http의 특징인 서버/클라이언트 구조, Stateless, Connectionless, http message 중
http message에 대해서 정리해놓은 게시물입니다.
http message
클라이언트/ 서버 통신 시 필요한 메세지
클라이언트의 요청
- 웹페이지에 접근/ 폼에 내용 입력 등을 하면 웹 서버와 웹 브라우저(클라이언트)가 데이터를 교환
- 웹 브라우저의 정보와 폼 입력 데이터 등의 데이터 헤더를 붙여 오픈할(redirect)할 웹페이지의 주소를 웹 서버에 요구
서버의 응답
- 웹페이지의 요청을 처리한 서버가 서버정보 또는 처리 결과(코드)를 웹페이지 콘텐츠에 응답
Status Code
클라이언트의 요청이 있을 시 서버가 요청에 따른 리소스를 제공해주었을 때 상태 코드도 http 메세지에 보냄
- 100번대 : 정보 > 요청을 받았으며 수행 진행 중
- 200번대 : 성공 > 클라이언트의 요청이 성공적으로 수행됨
- 300번대 : 리다이렉트 > 요청 완료를 위해 추가 작업 조치가 필요함
- 400번대 : 클라이언트 오류 > 클라이언트로 인한 오류 발생
- 500번대 : 서버 오류 > 서버로 인한 오류 발생
구조
1. start line
2. header
3. empty line(CRLF) : 무조건 있어야 함
4. message body
CR (Carriage Return)
- \r에 해당
- 커서를 맨 앞으로 보내는 것
LF (Line Feed)
- \n에 해당
- 커서를 아래 줄로 보내는 것 = 엔터
- 유닉스, 리눅스의 기본 줄바꿈 포맷
CRLF (CR+LF)
- \r, \n 둘 다 사용
- 윈도우 기본 줄바꿈 포맷
1. start-line(요청)
- request-line
- method SP(공백) request-target SP HTTP-version CRLF(엔터)
- method
- ex. GET, POST, PUT, DELETE, …
- 서버가 수행할 동작을 지정
- request-target
- absolute-path[?query]
- absoulte-path: “/”로 시작하는 경로
- method
- ex. GET /search?q=hello&hl=ko HTTP/1.1
1. start-line(응답)
- status-line
- HTTP-version SP status-code SP reason-phrase CRLF
- status-code
- 요청에 대한 성공/ 실패 코드
- reason-phrase
- 사람이 이해할 수 있는 짧은 상태 코드 설명글
- status-code
- ex. HTTP/1.1 200 OK
2. header
- http 전송에 필요한 모든 부가정보
- 메시지 바디의 종류(html, xml, …), 크기, 압축 방식
- 인증
- 클라이언트 정보, 서버 어플리케이션 정보
- 캐시 관리 정보 등
- 표준헤더(엄청 많음)
- 필요 시 임의의 헤더 추가 가능
3. empty line
- 무조건 있어야 하는 공백라인
4. message body
- 실제 전송할 데이터
예시(요청, 응답)
요청
GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com
(CRLF)
message body
일반적으로 Get 메서드에서는 message body가 없는 경우가 많음
응답
HTTP/1.1 200 OK // 시작줄
Connection: keep-alive // 헤더
Content-Encoding: gzip
Content-Length: 35653
Content-Type: text/html;
<html>
<body>...</body>
</html>
반응형
'CS > 네트워크' 카테고리의 다른 글
[TCP/IP 계층] 인터넷 계층(IP 프로토콜, ARP) (1) | 2024.02.01 |
---|---|
HTTP의 특징(서버/ 클라이언트 구조, Stateless, Connectionless) (0) | 2023.07.29 |
HTTP 프로토콜 (0) | 2023.07.28 |