HTTP(HyperText Transfer Protocol)
WWW(웹)상에서 정보를 주고받을 수 있는 프로토콜 이다.
주로 HTML 문서를 주고 받는데 쓰이며, TCP UDP 80포트를 사용한다.
HTTP/1.0(1996년), HTTP/1.1(1999년)에 발표되었다.
Client <- 요청/응답(request/response) -> server
우리는 웹개발을 위해 HTTP Message를 이해할 필요가 있다. 작년에 개인프로젝트로 web-application 서버를 직접 구현하면서 HTTP 스펙 지식에 대한 필요성을 느꼈었는데 까먹고있었는데, 오늘 Rest 관련 동영상을 보게되어 HTTP Message에 대해 정리를 당장 하기로 하였다.
HTTP Message Format 형식 (Request Message & Response Message )
HTTP 메세지는 서버와 클라이언트 간에 데이터가 교환되는 방식을 말한다.
- 클라이언트(Client) → 서버(Server) : Request Messasge
- 서버(Server) → 클라이언트(Client) : Response Message
HTTP 메세지는 ASCII로 인코딩된 텍스트 정보이며 여러줄로 되어 있다.
HTTP 요청과 응답의 구조는 서로 닮았으며, 구조는 아래와 같다.
- 시작줄(start-line) 에는 실행되어야 할 요청 또는 요청 수행에 대한 성공, 실패가 기록되어 있으며, 항상 한줄로 끝난다.
- 옵션으로 HTTP 헤더 세트가 들어간다. 여기에는 요청에 대한 설명, 혹은 메시지 본문에 대한 설명이 들어간다.
- 요청에 대한 모든 메타 정보가 전송되었음을 알리는 빈 줄(blank line) 이 삽입된다.
- 요청과 관련된 내용(HTML 컨텐츠 등) 이 옵션으로 들어가거나, 응답과 관련된 문서(document) 가 들어간다. 본문의 존재 유무 및 크기는 첫 줄과 HTTP 헤더에 명시된다.
HTTP Message의 구성은 크게 위의 4가지로 보면된다.시작줄(start-line)
HTTP 헤더 세트
(필수는 아니기 때문에 존재 안할 수 도 있음)빈 줄(blank line)
(메타정보는 끝나고 밑에 줄에는 요청과 관련되 내용을 전달할꺼다! 라는 의미)본문(contents)
HTTP Request Message
시작줄
[HTTP 메서드] [URL] [HTTP버전]POST / HTTP 1.1
GET /books HTTP/1.0
HEAD /test.html?query=corn HTTP/1.1
헤더
HTTP 헤더는 HTTP 헤더의 기본 구조를 따르며, 대소문자 구분 없는 문자열 다음에 콜론(:
)이 붙으며 그 뒤에는 헤더 값이 온다.
본문GET
, HEAD
, DELETE
, OPTIONS
처럼 리소스를 가져오는 요청은 보통 본문이 필요가 없으나, POST
요청은 HTML 폼데이터를 포함하여 전송하기 때문에 본문이 존재할 수 있다.
HTTP Response Message
상태줄
HTTP 응답의 시작 줄은 상태 줄(status line)이라고 불리며, 다음과 같은 정보를 갖고 있다.
프로토콜 버전 : 보통 HTTP/1.1
상태 코드 : 요청의 성공 여부를 나타냄 (200, 402, 302 ... )
상태 텍스트 : 짧고 간결하게 상태 코드에 대한 설명을 글로 나타내어 사람들이 HTTP 메시지를 이해할 때 도움이 됨
[프로토콜 버전] [상태코드] [상태 텍스트]HTTP/1.1 404 Not Found.
헤더
HTTP 헤더의 기본 구조를 따르며, 대소문자 구분 없는 문자열 다음에 콜론(:
)이 붙으며 그 뒤에는 헤더 값이 온다.
본문은 응답의 마지막 부분에 들어가며, 모든 응답에 본문이 들어가지는 않는다.201
, 204
과 같은 상태 코드를 가진 응답에는 보통 본문이 없다.
출처 : https://developer.mozilla.org/ko/docs/Web/HTTP/Messages
'프로그래밍 노트 > WEB' 카테고리의 다른 글
REST API 보안_1 (0) | 2019.05.30 |
---|---|
REST API 디자인 가이드 (0) | 2019.05.18 |
REST API에 관한 고찰 (0) | 2019.05.18 |
MIME 타입에 관하여 (0) | 2019.05.13 |
URI란 무엇인가? (0) | 2019.05.03 |