티스토리 뷰

Dev/Network

HTTP Messages

kuidoli 2024. 7. 8. 12:22

HTTP Messages 란

HTTP Messages 는 서버와 클라이언트 간의 데이터가 전송되는 양식이다.


HTTP Messages 의 종류

HTTP Messages 는 requests, responses 2가지로 나뉜다.

requests 는 클라이언트가 서버로 보내는 것으로 서버가 어떤 행위를 하도록 한다.

responses 는 클라이언트의 요청에 대한 서버의 응답이다.


HTTP Messages 의 구성

HTTP Messages 는 start-line, HTTP headers, body 3가지로 구성된다.

HTTP headers, body 는 optional 하다.


start-line

requests 는 서버에게 요청할 내용을 담고, response 에는 request 의 성공여부를 담는다.

반드시 한 줄로 이루어진다.


HTTP headers (optional)

어떤 종류의 request 인지 나타내거나, body 를 설명한다.


body (optional)

request 에 필요한 data 를 담거나, response 와 연관된 문서를 포함한다. body 의 존재 여부와 크기는 start-line 과 headers 에 명시한다.


HTTP Requests

HTTP Requests 는 request line(start-line 이 HTTP Requests 에서는 request-line 으로 불린다), headers, body 로 구성된다.


Request line(start-line)

Request line 은 HTTP method, request target, HTTP version 3개의 요소로 이루어진다.


  • HTTP method - GET, POST 등이 있고 서버가 해야할 행동의 성격을 나타낸다.
  • request target - 주로 URL 이 해당한다.
  • HTTP version
POST / HTTP/1.1
GET /background.png HTTP/1.0
HEAD /test.html?query=alibaba HTTP/1.1
OPTIONS /anypage.html HTTP/1.0

HTTP headers

헤더는 대소문자를 구분하지 않는 문자열, 콜론(:), 값으로 구성된다. 헤더 하나는 한 줄로 이루어진다.

헤더의 종류는 General, Request, Representation 3개로 나뉠 수 있다.


  • General headers - HTTP Message 전체에 적용된다
    • Via - 포워드 프록시나 리버스 프록시에 의해 추가된다. HTTP Request, HTTP Response 모두 Via 를 포함할 수 있다. 프록시 서버 리스트 정보를 유지하면서 이미 방문한 네트워크 경로를 다시 방문하지 않도록 해서 network loop 를 방지한다.
  • Request headers - User-Agent, Accept, Accept-Language 처럼 request 에 대한 구체적인 정보를 나타낸다.
    • User-Agent - request 를 보낸 사용자의 제품(product - Chrome 와 같은 web browser 혹은 cURL, Postman 과 같은 Library), 제품의 버전, 운영체제 등을 나타낸다
    • Accept - 클라이언트가 이해할 수 있는 데이터 타입을 나타낸다.
    • Referer - 요청을 보낸 페이지의 절대 주소나 부분 주소를 포함한다. 링크를 통해 들어왔다면 해당 링크를 갖고 있는 페이지의 주소가 포함된다.
  • Representation headers - data 의 형식을 나타내거나, (body 가 있을경우) 인코딩 방식을 나타낸다.
    • Content-Type - 인코딩이 적용되기 이전의 자원의 본래 media type(MIME type) 정보를 담는다.
    • Content-Type: text/html; charset=utf-8
      Content-Type: multipart/form-data; boundary=something

Body

모든 요청에 반드시 포함되는 것은 아니다. GET, HEAD 등의 HTTP method 의 경우 주로 body 가 필요없다. PUT, POST 와 같은 HTTP method 처럼 리소스를 생성하기 위해 서버로 데이터를 전송하는 경우 body 가 필요하다.

body 는 크게 Single-resource, Multiple-resource 2가지로 나뉜다.


  • Single-resource bodies - Content-Type, Content-Length 2개의 헤더에 정의되며 단일 파일로 구성된다.
  • Multiple-resource bodies - multipart body 로 구성되고 각각 다른 종류의 정보를 갖고 있다. body 에 json, image 등 여러 타입을 담을 때 사용할 수 있다.

HTTP Responses

HTTP Responses 는 status line(start-line 이 HTTP Responses 에서는 status line 으로 불린다), headers, body 로 구성된다.


Status line

HTTP/1.1 404 Not Found

status line 은 다음의 정보들을 갖는다.


  • protocol version - 주로 HTTP/1.1 이며 HTTP/1.0 도 가능하다.
  • status code - HTTP Request 의 성공 여부를 나타낸다.
  • status text - 사람이 HTTP Message 를 이해하기 쉽도록 status code 에 대한 간략한 정보를 전달하는 문구를 담는다.

Headers

헤더는 대소문자를 구분하지 않는 문자열, 콜론(:), 값으로 구성된다. 헤더 하나는 한 줄로 이루어진다.

헤더의 종류는 General, Request, Representation 3개로 나뉠 수 있다.


  • General headers - HTTP Message 전체에 적용된다.
    • Via
  • Response headers - status line 에 담지 못한 서버에 대한 부가적인 정보를 담는다
    • Vary
    • Accept-Ranges
  • Representation headers - data 의 형식을 나타내거나, (body 가 있을경우) 인코딩 방식을 나타낸다.
    • Content-Type

Body

부가적인 payload 없이도 status code 만으로도 HTTP Request 에 대한 충분한 응답이 된다면 body 가 필요하지 않다.

body 는 세 가지 종류로 나뉜다.


  • single-resource 로 Content-Type, Content-Length 2개의 headers 에 정의된 길이 정보를 담은 단일 파일 형태
  • single-resource 로 키가 Transfer-Encoding, 값이 chunked 인 header 인 경우 사용하는 길이 정보가 없는 단일 파일 형태
  • multiple-resource 로 각 multipart 로 구성된다.

HTTP/2 Frames

앞서 살펴본 HTTP Messages 는 1.x 버전이다. HTTP/1.x messages 는 몇가지 단점이 있다.


  • body 와 달리 headers 가 압축되지 않는다
  • headers 는 각 HTTP Message 마다 유사한 형태라도 connection 마다 반복된다
  • HTTP/1.1 에는 pipelining 이 있지만 브라우저에 디폴트로 설정되어 있지 않고, 동시에 다수 요청을 보내는 multiplexing 이 허용되지 않는다.

이러한 단점을 보완한게 HTTP/2 인데 이는 추가로 학습이 필요하다.



<참고>

https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages

https://romcanrom.tistory.com/77

https://developer.mozilla.org/en-US/docs/Learn/Common_questions/Web_mechanics/What_is_a_URL

https://www.ibm.com/docs/ko/datapower-gateway/10.5.0?topic=commands-case-insensitive

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/User-Agent

https://blog.naver.com/PostView.naver?blogId=allstar927&logNo=90161809512

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Accept

https://developer.mozilla.org/ko/docs/Web/HTTP/Headers/Referer

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Via

https://http.dev/via

https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Type

'Dev > Network' 카테고리의 다른 글

서브넷 마스크  (0) 2023.11.08
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
TAG
more
«   2025/05   »
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
글 보관함