HTTP Message

HTTP λ©”μ‹œμ§€λŠ” λ‹¨μˆœν•œ 쀄 λ‹¨μœ„μ˜ λ¬Έμžμ—΄μ΄κ³ , 이진 ν˜•μ‹μ΄ μ•„λ‹Œ 일반 ν…μŠ€νŠΈ ν˜•μ‹μ΄κΈ° λ•Œλ¬Έμ— μ‚¬λžŒμ΄ μ‰½κ²Œ 읽을 수 μžˆλ‹€. HTTP λ©”μ‹œμ§€λŠ” HTTP μ• ν”Œλ¦¬μΌ€μ΄μ…˜ 간에 μ£Όκ³  λ°›λŠ” λ°μ΄ν„°μ˜ λ‹¨μœ„μ΄λ©°, HTTP μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ€ HTTP λ©”μ‹œμ§€λ₯Ό 톡해 μš”μ²­κ³Ό 응닡을 μ£Όκ³  λ°›λŠ”λ‹€.

λ©”μ‹œμ§€μ˜ 흐름과 λ°©ν–₯μ„±

HTTP ν†΅μ‹ μ—μ„œ λ©”μ‹œμ§€μ˜ 흐름은 λ°œμ†‘μžλ‘œλΆ€ν„° μˆ˜μ‹ μžλ‘œ 흐λ₯΄λŠ” λ°©ν–₯으둜 이루어진닀.

  • μΈλ°”μš΄λ“œ(Inbound) : ν΄λΌμ΄μ–ΈνŠΈμ—μ„œ μ„œλ²„λ‘œμ˜ λ°©ν–₯

  • μ•„μ›ƒλ°”μš΄λ“œ(Outbound) : μ„œλ²„μ—μ„œ ν΄λΌμ΄μ–ΈνŠΈλ‘œμ˜ λ°©ν–₯

  • μ—…μŠ€νŠΈλ¦Ό(Upstream) : λ°œμ†‘μž

  • λ‹€μš΄μŠ€νŠΈλ¦Ό(Downstream) : μˆ˜μ‹ μž

HTTP ꡬ쑰

HTTP λ©”μ‹œμ§€λŠ” 크게 μ•„λž˜ μ„Έ 개둜 κ΅¬μ„±λ˜μ–΄ μžˆλ‹€.

  • Start Line: λ©”μ‹œμ§€μ˜ 첫 μ€„λ‘œ, λ©”μ‹œμ§€μ˜ μ’…λ₯˜μ™€ 버전 λ“±κ³Ό 무엇을 ν•˜λŠ”μ§€μ— λŒ€ν•œ 정보

  • Headers: HTTP 전솑에 ν•„μš”ν•œ λͺ¨λ“  λΆ€κ°€μ •λ³΄λ‘œ, 0개 μ΄μƒμ˜ 헀더 ν•„λ“œλ‘œ ꡬ성

  • Message Body: μ‹€μ œ 전솑할 데이터(ν•„μš”μ— 따라 μƒλž΅ κ°€λŠ₯)

각 쀄은 CRLF(Carriage Return, Line Feed)둜 λλ‚˜λ©°, 각 뢀뢄은 CRLF둜 κ΅¬λΆ„λœλ‹€. ν•˜μ§€λ§Œ λͺ¨λ“  HTTP μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ΄ CRLFλ₯Ό μ œλŒ€λ‘œ μ‚¬μš©ν•˜κ³  μžˆμ§€ μ•ŠκΈ° λ•Œλ¬Έμ—, κ·Έλƒ₯ κ°œν–‰ λ¬Έμžλ„ 받아듀일 수 μžˆλŠ” HTTP μ• ν”Œλ¦¬μΌ€μ΄μ…˜μœΌλ‘œ κ°œλ°œν•˜λŠ” 것이 μ’‹λ‹€.

<start-line>
<headers>
<CRLF>
<message-body>

** CRLF: Carriage Return, Line Feed, 즉 \r을 μ˜λ―Έν•˜λ©° 캐리지 리턴과 κ°œν–‰ 문자둜 κ΅¬μ„±λœ λ¬Έμžμ—΄

HTTP Request Message

HTTP Request Message의 ν˜•νƒœμ™€ μ˜ˆμ‹œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

<method> <request-URI> <HTTP-version>
<header>
<CRLF>
<entity-body>

entity bodyλŠ” μ˜ˆμ‹œμ™€ 같이 μƒλž΅λ  수 있으며, μƒλž΅λœ κ²½μš°μ—λŠ” CRLF둜 λλ‚˜λŠ” λ©”μ‹œμ§€κ°€ λœλ‹€.

GET /index.html HTTP/1.1
Host: www.example.com
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.14; rv:70.0) Gecko/20100101 Firefox/70.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Upgrade-Insecure-Requests: 1
Cache-Control: max-age=0

HTTP Response Message

HTTP Response Message의 ν˜•νƒœμ™€ μ˜ˆμ‹œλŠ” λ‹€μŒκ³Ό κ°™λ‹€.

<HTTP-version> <status-code> <reason-phrase>
<header>
<CRLF>
<entity-body>
HTTP/1.1 200 OK
Date: Mon, 18 Nov 2019 07:28:00 GMT
Server: Apache/2.4.18 (Ubuntu)
Last-Modified: Mon, 18 Nov 2019 07:27:30 GMT
ETag: "1d3-5a115e6ee8400"
Accept-Ranges: bytes
Content-Length: 467
Vary: Accept-Encoding
Content-Type: text/html

<html>
  ...
</html>

각 뢀뢄에 λŒ€ν•œ μžμ„Έν•œ μ„€λͺ…은 μ•„λž˜μ™€ κ°™λ‹€.

Start Line

HTTP λ©”μ‹œμ§€μ˜ 첫 μ€„λ‘œ, μš”μ²­κ³Ό 응닡에 따라 ꡬ성에 μ•½κ°„ 차이가 있으며, λ©”μ‹œμ§€μ˜ μ’…λ₯˜μ™€ 버전 λ“±κ³Ό 무엇을 ν•˜λŠ”μ§€μ— λŒ€ν•œ 정보λ₯Ό λ‹΄κ³  μžˆλ‹€.

  • Request

<method> <request-URI> <HTTP-version>
  • Response

<HTTP-version> <status-code> <reason-phrase>

Headers

HTTP 전솑에 ν•„μš”ν•œ λͺ¨λ“  뢀가정보λ₯Ό λ‹΄κ³  있으며, λ©”μ‹œμ§€ λ‚΄μš©/크기/μ••μΆ•/인증 등을 ν¬ν•¨ν•œλ‹€. μš”μ²­ ν˜Ήμ€ μ‘λ‹΅μ˜ μ»¨ν…μŠ€νŠΈλ₯Ό μ„€μ •ν•˜κ³ , λ©”μ‹œμ§€ 전솑을 더 잘 μ œμ–΄ν•  수 μžˆλ„λ‘ 도와쀀닀.

status line
request header field(|| response header field)
general header field
entity header field
etc..
CRLF

HTTP ν—€λ”λŠ” 크게 μ•„λž˜μ™€ 같이 ꡬ뢄할 수 있으며, 각 λΆ„λ₯˜ μ•ˆμ— λ§Žμ€ 헀더 ν•„λ“œκ°€ μ‘΄μž¬ν•œλ‹€.

  • General Header: λ©”μ‹œμ§€μ— λŒ€ν•œ 기본적인 정보λ₯Ό 가진 헀더

  • Request Header: μš”μ²­μ— λŒ€ν•œ 정보, μš”μ²­μžμ— λŒ€ν•œ μ •λ³΄λ‚˜ μ–΄λ–€ λ¦¬μ†ŒμŠ€λ₯Ό μš”μ²­ν•˜λŠ”μ§€μ— λŒ€ν•œ 정보λ₯Ό 가진 헀더

  • Response Header: 응닡에 λŒ€ν•œ 정보, μ‘λ‹΅μžμ— λŒ€ν•œ μ •λ³΄λ‚˜ 응닡에 λŒ€ν•œ 뢀가적인 정보λ₯Ό 가진 헀더

  • Entity Header: μ—”ν‹°ν‹° 바디에 λŒ€ν•œ 정보, μ—”ν‹°ν‹° λ°”λ””μ˜ 데이터 νƒ€μž…μ΄λ‚˜ 길이 λ“± μ—”ν‹°ν‹° 바디에 λŒ€ν•œ 뢀가적인 정보λ₯Ό 가진 헀더

  • Extension Header: λͺ…세에 μ •μ˜λ˜μ§€ μ•Šμ€ μƒˆλ‘œμš΄ 헀더, μ‚¬μš©μžκ°€ 직접 λ§Œλ“€μ–΄ μ‚¬μš©ν•œ 헀더

Message Body(Entity Body)

μ‹€μ œ 전솑할 λ°μ΄ν„°λ‘œ, byte둜 ν‘œν˜„ν•  수 μžˆλŠ” λͺ¨λ“  데이터λ₯Ό 전솑할 수 μžˆλ‹€. λͺ¨λ“  λ©”μ‹œμ§€κ°€ 가지고 μžˆμ§€λŠ” μ•ŠμœΌλ©°, κ·Έλƒ₯ CRLF둜 λλ‚˜λŠ” λ©”μ‹œμ§€λ„ μ‘΄μž¬ν•œλ‹€.

참고자료

Last updated

Was this helpful?