HTTP ν€λ κ°μ
field-name: field-value
νμμΌλ‘ μ΄λ£¨μ΄μ Έ μλ€.
HTTP ν€λμ μ©λ
- HTTP μ μ‘μ νμν λͺ¨λ λΆκ°μ 보λ₯Ό ν¬ν¨νλ€.
- e.g. λ©μμ§ λ°λμ λ΄μ©, λ©μμ§ λ°λμ ν¬κΈ°, μμΆ, μΈμ¦, λ±λ±β¦
- νμ€ ν€λκ° λ무 λ§μΌλ©°, νμ μ μμμ ν€λλ₯Ό μΆκ°ν μ μλ€.
HTTP ν€λμ λΆλ₯
- General ν€λ - λ©μμ§ μ 체μ μ μ©λλ μ 보
- e.g. Connection: close
- Reqeust ν€λ - μμ² μ 보
- e.g. User-Agent: Mozilla/5.0 (Macintosh; ..)
- Response ν€λ - μλ΅ μ 보
- e.g. Server: Apache
- Representation ν€λ - νν λ°μ΄ν° μ 보
- e.g. Content-Type: text/html, Content-Length: 3423
HTTP BODY
- λ©μμ§ λ³Έλ¬Έμ ν΅ν΄ νν λ°μ΄ν°λ₯Ό μ λ¬νλ€.
- λ©μμ§ λ³Έλ¬Έ = νμ΄λ‘λ
- νν = μμ²μ΄λ μλ΅μμ μ λ¬ν μ€μ λ°μ΄ν°
- νν ν€λ = νν λ°μ΄ν° ν΄μ μ 보 μ 곡
- λ°μ΄ν° μ ν, κΈΈμ΄, μμΆ μ 보 λ±λ±β¦
- λ°μ΄ν° μ ν, κΈΈμ΄, μμΆ μ 보 λ±λ±β¦
νν
Content-Type
νν λ°μ΄ν°μ νμ
- λ―Έλμ΄ νμ , λ¬Έμ μΈμ½λ©
- e.g. Content-Type: application/json
Content-Encoding
νν λ°μ΄ν°μ μμΆ λ°©μ
- νν λ°μ΄ν°λ₯Ό μμΆνκΈ° μν΄ μ¬μ©
- λ°μ΄ν°λ₯Ό μ λ¬νλ κ³³μμ μμΆ ν μΈμ½λ© ν€λ μΆκ°
- λ°μ΄ν°λ₯Ό μ½λ μͺ½μμ μΈμ½λ© ν€λμ μ λ³΄λ‘ μμΆ ν΄μ
- e.g. Content-Encoding: gzip
Content-Language
νν λ°μ΄ν°μ μμ° μΈμ΄
- νν λ°μ΄ν°μ μμ° μΈμ΄λ₯Ό νν
- e.g. Content-Language: en-US
Content-Length
νν λ°μ΄ν°μ κΈΈμ΄
- λ°μ΄νΈ λ¨μ
- Transfer-Encoding(μ μ‘ μ½λ©)μ μ¬μ©νλ©΄ Content-Length λ₯Ό μ¬μ©νλ©΄ μλ¨
μ½ν μΈ νμ
Content Negotiation μ΄λ?
Content Negotiation μ΄λ ν΄λΌμ΄μΈνΈκ° μ νΈνλ ννμ μμ²νλ κ²μ μλ―Ένλ€.
- Accept: ν΄λΌμ΄μΈνΈκ° μ νΈνλ λ―Έλμ΄ νμ μ λ¬
- Accept-Charset: ν΄λΌμ΄μΈνΈκ° μ νΈνλ λ¬Έμ μΈμ½λ©
- Accept-Encoding: ν΄λΌμ΄μΈνΈκ° μ νΈνλ μμΆ μΈμ½λ©
- Accept-Language: ν΄λΌμ΄μΈνΈκ° μ νΈνλ μμ° μΈμ΄ νμ ν€λλ μμ² μ μ¬μ©λλ©° μμ κ°μ ννλ‘ ν¬ν¨λλ€.
νμκ³Ό μ°μ μμ
μ νΈνλ ννμ μ°μ μμλ₯Ό μ μνμ¬ μμ²νλ κ²μ μλ―Ένλ€.
- 0~1 μ¬μ΄μ Quality Values(q) κ°μ μ¬μ©νμ¬ ν° κ°μ μ°μ νλ€. (q κ°μ΄ μλ€λ©΄ 1μ΄ μλ΅λ κ²μ μλ―Έ)
GET /event
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
μμ κ°μ μμ²μ΄ μ£Όμ΄μ‘μ λ μ°μ μμλ μλμ κ°λ€.
- ko-KR(;q=1)
- ko;q=0.9
- en-US;q=0.8
- en;q=0.7
ꡬ체μ μΈ κ²μ μ°μ νλ€.
GET /event
Accept: text/*,text/plain,text/plain;format=flowed,*/*
μμ κ°μ μμ²μ΄ μ£Όμ΄μ‘μ λ μ°μ μμλ μλμ κ°λ€.
- text/plain;format=flowed
- text/plain
- text/*
- /
ꡬ체μ μΈ κ²μ κΈ°μ€μΌλ‘ λ―Έλμ΄ νμ μ λ§μΆλ€.
GET /event
Accept: text/*;q=0.3,text/html;q=0.7,text/html;level=1,text/html;level=2;q=0.4,*/*;q=0.5
μμ κ°μ μμ²μ΄ μ£Όμ΄μ‘μ λ qκ°μ μλμ κ°λ€.
- text/html;level=1;q=1
- text/html;q=0.7
- text/plain;q=0.3
- image/jpeg;q=0.5
- text/html;level=2;q=0.4
- text/html;level=3;q=0.7
μ μ‘ λ°©μ
λ¨μ μ μ‘ Content-Length
λ©μμ§ λ°λμ λν Content-Length λ₯Ό μ§μ νμ¬ μ μ‘νλ€.
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423
<html>
<body>...</body>
</html>
μμΆ μ μ‘ Content-Encoding
Content-Encoding μ λͺ μνμ¬ λ©μμ§ λ°λλ₯Ό μμΆνμ¬ μ μ‘νλ€.
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Encoding: gzip
Content-Length: 521
lkj123kljoiasudlkjaweioluywlnfdo912u34ljko98udjkl
λΆν μ μ‘ Transfer-Encoding
λ©μμ§ λ°λλ₯Ό λΆν νμ¬ μ μ‘νλ€. λΆν μ μ‘ μ Chunk λ§λ€ κΈΈμ΄κ° μ£Όμ΄μ§κΈ° λλ¬Έμ Content-Length λ₯Ό λͺ μνμ§ μμλ λλ€.
HTTP/1.1 200 OK
Content-Type: text/plain
Transfer-Encoding: chunked
5
Hello
5
World
0
\r\n
λ²μ μ μ‘ Range, Content-Range
λ°μ΄ν°λ₯Ό λ°λ λμ€ μ μ‘μ΄ λκΈΈ κ²½μ° λ²μ μ μ‘μ ν΅ν΄ λ¨μ λ°μ΄ν°λ₯Ό μ΄μ΄ λ°μ μ μλ€.
HTTP/1.1 200 OK
Content-Type: text/plain
Content-Range: bytes 1001-2000 / 2000
qweqwe1l2iu3019u2oehj1987askjh3q98y
μΌλ° μ 보
From
μ μ μμ΄μ νΈμ μ΄λ©μΌ μ 보
- μΌλ°μ μΌλ‘ μ μ¬μ©λμ§ μλλ€.
- κ²μ μμ§ κ°μ κ³³μμ μ£Όλ‘ μ¬μ©νλ€.
- μμ²μμ μ¬μ©νλ€.
Referer
μ΄μ μΉ νμ΄μ§μ μ£Όμ
- νμ¬ μμ²λ νμ΄μ§μ μ΄μ μΉ νμ΄μ§ μ£Όμμ΄λ€.
- A β B λ‘ μ΄λνλ κ²½μ° B λ₯Ό μμ²ν λ Referer: A λ₯Ό ν¬ν¨ν΄μ μμ²νλ€.
- Referer λ₯Ό μ¬μ©ν΄μ μ μ κ²½λ‘λ₯Ό λΆμν μ μλ€.
- μμ²μμ μ¬μ©νλ€.
User-Agent
μ μ μμ΄μ νΈ μ ν리μΌμ΄μ μ 보
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/
537.36 (KHTML, like Gecko) Chrome/86.0.4240.183 Safari/537.36
- ν΄λΌμ΄μΈνΈμ μ ν리μΌμ΄μ μ 보 (μΉ λΈλΌμ°μ μ 보, λ±λ±)
- μ΄λ€ μ’ λ₯μ λΈλΌμ°μ μμ μ₯μ κ° λ°μνλμ§ νμ ν μ μλ€.
- μμ²μμ μ¬μ©νλ€.
Server
μμ²μ μ²λ¦¬νλ ORIGIN μλ²μ μννΈμ¨μ΄ μ 보
Server: Apache/2.2.22 (Debian)
- μλ΅μμ μ¬μ©νλ€.
Date
λ©μμ§κ° λ°μν λ μ§μ μκ°
Date: Tue, 15 Nov 1994 08:12:31 GMT
- μλ΅μμ μ¬μ©νλ€.
νΉλ³ν μ 보
Host
μμ²ν νΈμ€νΈ μ 보 (λλ©μΈ)
- μμ²μμ μ¬μ©νλ©° νμμ΄λ€.
- νλμ μλ²κ° μ¬λ¬ λλ©μΈμ μ²λ¦¬ν΄μΌ ν λ. μ¦, νλμ IP μ£Όμμ μ¬λ¬ λλ©μΈμ΄ μ μ©λμ΄ μμ λ μ¬μ©λλ€.
Location
νμ΄μ§ 리λ€μ΄λ μ
- μΉ λΈλΌμ°μ λ 3xx μλ΅ κ²°κ³Όμ Location ν€λκ° μμΌλ©΄, Location μμΉλ‘ μλ μ΄λνλ€.
- 201 Created μμμ Location κ°μ μμ²μ μν΄ μμ±λ 리μμ€ URI λ₯Ό μλ―Ένλ€.
Allow
νμ© κ°λ₯ν HTTP λ©μλ
- 405 Method Not Allowed μμ μλ΅μ ν¬ν¨ν΄μΌ νλ€.
Retry-After
μ μ μμ΄μ νΈκ° λ€μ μμ²μ νκΈ°κΉμ§ κΈ°λ€λ €μΌ νλ μκ°
- 503 Service Unavaiable: μλΉμ€κ° μΈμ κΉμ§ λΆλ₯μΈμ§ μλ €μ€ μ μλ€.
μΈμ¦
Authorization
ν΄λΌμ΄μΈνΈ μΈμ¦ μ 보λ₯Ό μλ²μ μ λ¬
Authorization: Basic xxxxx
WWW-Authenticate
리μμ€ μ κ·Ό μ νμν μΈμ¦ λ°©λ² μ μ
WWW-Authenticate: Newauth realm="apps", type=1,title="Login to \"apps\"", Basic
realm="simple"
- 401 Unauthorized μλ΅κ³Ό ν¨κ» μ¬μ©νλ€.
μΏ ν€
μΉλΈλΌμ°μ λ΄λΆμ μΏ ν€ μ μ₯μκ° μ‘΄μ¬νλ€.
- Set-Cookie: μλ²μμ ν΄λΌμ΄μΈνΈλ‘ μΏ ν€λ₯Ό μ λ¬νλ€.
- Cookie: ν΄λΌμ΄μΈνΈκ° μλ²μμ λ°μ μΏ ν€λ₯Ό μ μ₯νκ³ , HTTP μμ² μ μλ²λ‘ μ λ¬νλ€.
set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/;
domain=.google.com; Secure
- μΏ ν€λ μ¬μ©μ λ‘κ·ΈμΈ μΈμ κ΄λ¦¬ λ° κ΄κ³ μ 보 νΈλνΉμ μ¬μ©λλ€.
- μΏ ν€ μ 보λ νμ μλ²μμ μ μ‘λλ€.
- λ€νΈμν¬ νΈλν½μ μΆκ°λ‘ μ λ°νλ€.
- μ΅μνμ μ λ³΄λ§ μ¬μ©νλ€. (μΈμ id, μΈμ¦ ν ν°)
- 보μμ λ―Όκ°ν λ°μ΄ν°λ μ μ₯νλ©΄ μλλ€. (μ£Όλ―Όλ²νΈ, μ μ©μΉ΄λ λ²νΈ λ±λ±)
μΏ ν€ - μλͺ μ£ΌκΈ°
Set-Cookie: expires=Sat, 26-Dec-2020 04:39:21 GMT
- λ§λ£μΌμ΄ λλ©΄ μΏ ν€λ₯Ό μμ νλ€.
Set-Cookie: max-age=3600 (3600μ΄)
- 0 μ΄λ μμλ₯Ό μ§μ νλ©΄ μΏ ν€λ₯Ό μμ νλ€. μΈμ μΏ ν€ - λ§λ£ λ μ§λ₯Ό μλ΅νλ©΄ λΈλΌμ°μ μ’ λ£ μ κΉμ§λ§ μ μ§νλ€. μμ μΏ ν€ - λ§λ£ λ μ§λ₯Ό μ λ ₯νλ©΄ ν΄λΉ λ μ§κΉμ§ μ μ§νλ€.
μΏ ν€ - λλ©μΈ
domain=example.org
- λͺ
μν κ²½μ° - λͺ
μν λ¬Έμ κΈ°μ€ λλ©μΈ + μλΈ λλ©μΈμ ν¬ν¨νμ¬ μΏ ν€λ₯Ό μμ±νλ€.
- e.g. example.org, dev.example.org λͺ¨λ μΏ ν€ μ κ·Όμ΄ κ°λ₯
- μλ΅ν κ²½μ° - νμ¬ λ¬Έμ κΈ°μ€ λλ©μΈλ§ μ μ©νλ€.
- e.g. example.org μμλ§ μΏ ν€ μ κ·Όμ΄ κ°λ₯
μΏ ν€ - κ²½λ‘
path=/home
μ΄ κ²½λ‘λ₯Ό ν¬ν¨ν νμ κ²½λ‘ νμ΄μ§λ§ μΏ ν€ μ κ·Όμ΄ κ°λ₯νλ€. μΌλ°μ μΌλ‘ path=/
루νΈλ‘ μ§μ νλ€.
- e.g. /home, /home/level1, β¦ λͺ¨λ μΏ ν€ μ κ·Ό κ°λ₯
- e.g. /hello λ λΆκ°λ₯
μΏ ν€ - 보μ
Secure
- μΏ ν€λ http, https λ₯Ό ꡬλΆνμ§ μκ³ μ μ‘νκΈ° λλ¬Έμ Secure λ₯Ό μ μ©νλ©΄ https μΈ κ²½μ°μλ§ μ μ‘νλ€.
HttpOnly
- JS μμ μ κ·Όμ΄ λΆκ°νλ€.
- HTTP μ μ‘μλ§ μ¬μ©νλ€.
SameSite
- μμ² λλ©μΈκ³Ό μΏ ν€μ μ€μ λ λλ©μΈμ΄ κ°μ κ²½μ°μλ§ μΏ ν€λ₯Ό μ μ‘νλ€.
HTTP Caching
μΊμκ° μμ λ
λ°μ΄ν°κ° λ³κ²½λμ§ μμλ κ³μ λ€νΈμν¬λ₯Ό ν΅ν΄μ λ°μ΄ν°λ₯Ό λ€μ΄λ°μμΌ νλ€.
μΊμ μ μ©
μΊμλ₯Ό ν΅ν΄ μΊμ κ°λ₯ μκ° λμ λ€νΈμν¬λ₯Ό μ¬μ©νμ§ μμλ λλ€.
μΊμ μκ° μ΄κ³Ό
μΊμ μ ν¨ μκ°μ΄ μ΄κ³Όλλ©΄, μλ²λ₯Ό ν΅ν΄ λ°μ΄ν°λ₯Ό λ€μ μ‘°ννκ³ , μΊμλ₯Ό κ°±μ νλ€.
κ²μ¦ ν€λ
μΊμ λ°μ΄ν°μ μλ² λ°μ΄ν°κ° κ°μμ§ κ²μ¦νλ λ°μ΄ν°
Last-Modified: 2020λ
11μ 10μΌ 10:00:00
μ‘°κ±΄λΆ μμ²
κ²μ¦ ν€λλ‘ μ‘°κ±΄μ λ°λ₯Έ λΆκΈ°
if-modified-since: 2020λ
11μ 10μΌ 10:00:00
μΊμ μκ° μ΄κ³Ό
μΊμκ° λ§λ£λ νμλ μλ²μμ λ°μ΄ν°λ₯Ό λ³κ²½νμ§ μμμ κ²½μ°, ν΄λΌμ΄μΈνΈμ μλ²μ λ°μ΄ν°κ° κ°λ€λ μ¬μ€μ νμΈν μ μλ€λ©΄ μ μ₯ν΄λμλ μΊμλ₯Ό μ¬μ¬μ© ν μ μλ€.
- μΊμ μ ν¨ μκ°μ΄ μ΄κ³Όν΄λ, μλ²μ λ°μ΄ν°κ° κ°±μ λμ§ μμΌλ©΄ 304 Not Modified μ λ°λ μμ΄ ν€λμ λ©ν μ λ³΄λ§ μλ΅νλ€.
- ν΄λΌμ΄μΈνΈλ μλ²κ° λ³΄λΈ μλ΅ ν€λ μ 보λ₯Ό ν΅ν΄ μΊμμ λ©ν μ 보λ₯Ό κ°±μ νκ³ μΊμμ μ μ₯λμ΄ μλ λ°μ΄ν°λ₯Ό μ¬νμ©νλ€.
- κ²°κ³Όμ μΌλ‘ λ€νΈμν¬ λ€μ΄λ‘λκ° λ°μνμ§λ§ μ©λμ΄ μ μ ν€λ μ λ³΄λ§ λ€μ΄λ‘λ λ°μ μ μλ€.
Last-Modified μ If-Modified-Since μ λ¨μ
- λ μ§ κΈ°λ°μ λ‘μ§μ μ¬μ©νκ³ 1μ΄ λ―Έλ§ λ¨μλ‘ μΊμ μ‘°μ μ΄ λΆκ°λ₯νλ€.
- A β B β A μ κ°μ λ°μ΄ν° λ³κ²½μ΄ μΌμ΄λ¬μ κ²½μ°, κ²°λ‘ μ μΈ λ°μ΄ν°λ κ°μ§λ§, μμ μΌμ΄ λ€λ₯΄κΈ° λλ¬Έμ λ€μ λ€μ΄λ‘λ λ°μμΌ νλ€.
- μλ²μμ λ³λμ μΊμ λ‘μ§μ κ΄λ¦¬νκ³ μΆμ κ²½μ°
- e.g. μ€νμ΄μ€λ μ£Όμμ²λΌ ν¬κ² μν₯μ΄ μλ λ³κ²½μμ μΊμλ₯Ό μ μ§νκ³ μΆμ κ²½μ°
ETag μ If-None-Match
ETag: "aaaaaaaaaa"
- μΊμμ© λ°μ΄ν°μ μμμ κ³ μ λ²μ μ΄λ¦μ λ¬μλλ€.
- λ°μ΄ν°κ° λ³κ²½λλ©΄ μ΄ μ΄λ¦μ λ°κΎΈμ΄μ λ³κ²½νλ€. (Hash λ₯Ό λ€μ μμ±)
Cache-Control: μΊμ μ μ΄
μΊμ μ§μμ΄ (directives)
- Cache-Control: max-age
- μΊμ μ ν¨ μκ°, μ΄ λ¨μ
- Cache-Control: no-cache
- λ°μ΄ν°λ μΊμν΄λ λμ§λ§, νμ origin μλ²μ κ²μ¦νκ³ μ¬μ©
- Cache-Control: no-store
- λ°μ΄ν°μ λ―Όκ°ν μ λ³΄κ° μμΌλ―λ‘ μ μ₯νλ©΄ μλ¨ (λ©λͺ¨λ¦¬μμ μ¬μ©νκ³ μ΅λν 빨리 μμ )
νλ‘μ μΊμ μλ²λ?
νλ‘μλ ν΄λΌμ΄μΈνΈμ μλ² μ¬μ΄ λ리 ν΅μ μ μννλ κ²μ μλ―Ένλ€. νλ‘μ μΊμ μλ²λ μ μλ²μμ λ€μ΄λ‘λ λ°μ μΊμλ₯Ό 미리 λ°μλλ μΌμ’ μ μ€κ³ μΊμ μλ²λ₯Ό μλ―Ένλ€. κΈ°ν μΊμ μ§μμ΄
- Cache-Control: public
- μλ΅μ΄ public μΊμμ μ μ₯λμ΄λ λ¨
- Cache-Control: private
- μλ΅μ΄ ν΄λΉ μ¬μ©μλ§μ μν κ²μ΄λ―λ‘ private μΊμμ μ μ₯ν΄μΌ ν¨
- Cache-Control: s-maxage
- νλ‘μ μΊμμλ§ μ μ©λλ max-age
- Age: 60 (HTTP ν€λ)
- origin μλ²μμ μλ΅ ν νλ‘μ μΊμ λ΄μ λ¨Έλ¬Έ μκ° (μ΄)
μΊμ 무ν¨ν
λΈλΌμ°μ κ° μΊμνλ©΄ μλλ μ 보λ€μ λνμ¬ νμ€νκ² μΊμλ₯Ό 무ν¨ννκ³ μΆμ λ μ¬μ©ν΄μΌ νλ μ§μμ΄λ€μ΄λ€.
- Cache-Control: no-cache
- λ°μ΄ν°λ μΊμν΄λ λμ§λ§, νμ μ μλ²μ κ²μ¦νκ³ μ¬μ©
- Cache-Control: no-store
- λ°μ΄ν°μ λ―Όκ°ν μ λ³΄κ° μμΌλ―λ‘ μ μ₯νλ©΄ μλ¨ (λ©λͺ¨λ¦¬μμ μ¬μ©νκ³ μ΅λν 빨리 μμ )
- Cache-Control: must-revalidate
- μΊμ λ§λ£ ν μ΅μ΄ μ‘°ν μ μ μλ²μ κ²μ¦ν΄μΌ ν¨
- μ μλ² μ κ·Ό μ€ν¨ μ λ°λμ μ€λ₯κ° λ°μν΄μΌ ν¨ - 504 Gateway Timeout
- must-revalidate λ μΊμ μ ν¨ μκ°μ΄λΌλ©΄ μΊμλ₯Ό μ¬μ©ν¨
- Pragma: no-cache
- HTTP 1.0 νμ νΈν
no-cache vs must-revalidate
νλ‘μ μΊμμ μ μλ²κ° μκ° λ¨μ λμ΄ μ μλ² μ κ·Όμ΄ λΆκ°ν κ²½μ°
- no-cache λ νλ‘μ μλ²μ λ°μ΄ν°λΌλ μ‘°ννμ¬ μλ΅νλ κ²½μ°κ° μμ
- must-revalidate λ νμ 504 μλ¬λ₯Ό μλ΅ν΄μΌ ν¨