일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
- Network
- BHS
- boot sequence
- dp
- 네트워크
- C++
- baekjoon
- 임베디드
- Database
- swea
- 관계형 모델
- 백준
- 프로그래머스
- 데이터베이스
- leetcode
- STL
- 부트시퀀스
- BST
- Transport layer
- 다익스트라
- 응용 계층
- DB
- Djikstra
- 자료구조
- Embedded
- Application Layer
- ps
- 문제풀이
- 전송 계층
- 릿코드
- Today
- Total
BOBO's Note
Application Layer (2) - HTTP 본문
HTTP에 대해 알아보기 전에 Web에 대해 간단하게 알아보자면,
웹은 클라이언트-서버 구조를 갖는 애플리케이션이고, HTTP은 웹의 application layer에 위치하는 프로토콜이다.
헷갈리지 말자!
HTTP
HTTP는 HyperText Transfer Protocol의 약자로, application 계층의 프로토콜 중 하나이다.
Client-Server 모델이며, ASCII로 된 응답/요청 메세지를 주고받는다. HTTP 통신 방법은 대략적으로 다음과 같은 순서로 이루어진다.
- 클라이언트가 URL을 통해 서버의 IP 주소를 알아낸다.
- 클라이언트가 HTTP request 메시지 생성한다.
- 클라이언트가 서버의 (IP 주소, port 번호)로 TCP connection 요청한다.
- 서버는 port 번호로 기다리다가 TCP connection 요청이 들어오면 수락하고, 클라이언트에게 이를 알린다.
- 클라이언트가 서버로 HTTP request 전송한다.
- 서버가 request를 처리하고, 그 결과에 대해 HTTP response 메세지 생성하여 전송한다.
- 이후 서버가 TCP connection을 끊는다.
- 클라이언트는 받은 response 메세지로부터 결과 화면을 웹 브라우저에 띄운다.
HTTP는 기본적으로 stateless한 프로토콜이다. 따라서 요청이 독립적으로 관리된다. 다시 말하자면, 서버가 클라이언트의 과거 요청 정보를 기록하지 않는다.
이로 인해 서버는 간단한 디자인을 가질 수 있으나, 클라이언트 측에서는 요청할 때마다 필요한 모든 정보를 함께 보내야 한다는 불편함이 있다.
이러한 점은 쿠키 및 세션으로 일정 부분 해소할 수 있다.
HTTP Message 구조
HTTP request message는 다음과 같은 구조를 갖는다.
대표적인 메소드는 GET, POST, PUT, DELETE가 있다.
- GET: 서버에 자원 요청
- POST: 서버에 새로운 자원을 전송 또는 생성
- PUT: 서버에 존재하는 자원 변경/수정
- DELETE: 서버에 존재하는 자원 삭제
GET vs POST
두 메소드 모두 데이터를 담아 전송할 수 있는 메소드이다.
GET은 URL에 데이터를 덧붙여 전송하는 방식이며, POST는 메세지의 body 부분에 데이터를 담아 전송하는 방식이다.
따라서 POST 방식이 좀 더 안전하고 대용량 데이터 전송에 알맞다.
HTTP response message는 다음과 같은 구조를 갖는다.
상태 코드는 번호에 따라 다른 의미를 갖는다. 대표적인 상태 코드는 다음과 같다.
- 200번대: 성공
- 200 OK
- 204 No Content: 성공했으나 response로 돌려줄 리소스 없음 (헤더 정보가 의미있을 때 사용)
- 300번대: Redirection 유도
- 301 Moved Permanently: 요청한 리소스가 새 URL에 존재
- 400번대: Client Error
- 403 Forbidden: 해당 리소스 접근 금지 (권한 없음)
- 404 Not Found: 해당 리소스 없음
- 500번대: Server Error
- 503 Service Unavailable: 유지보수 등의 이유로 서버가 일시적으로 요청 처리 못 할 때
'Network' 카테고리의 다른 글
Transport Layer (2) - Reliable Data Transfer (0) | 2020.07.23 |
---|---|
Transport Layer (1) (0) | 2020.07.22 |
Application Layer (4) - P2P (0) | 2020.07.20 |
Application Layer (3) - Web Cache, DNS, CDN (0) | 2020.07.20 |
Application Layer (1) (0) | 2020.07.20 |