HTTP : Header
π‘ HTTPλ?
- HyperText Transfer Protocol
- νμ΄νΌν
μ€νΈ(HTML) λ¬Έμλ₯Ό κ΅ννκΈ° μν΄ λ§λ€μ΄μ§ ν΅μ κ·μ½(protocol)
π HTTP ν΅μ λ°©μ
- HTTPλ κΈ°λ³Έμ μΌλ‘ μμ²(request)β’μλ΅(response) κ΅¬μ‘°λ‘ μ΄λ£¨μ΄μ§
- ν΄λΌμ΄μΈνΈκ° HTTP requestλ₯Ό μλ²μ 보λ΄λ©΄ μλ²λ HTTP responseλ₯Ό 보λ΄λ ꡬ쑰
- ν΄λΌμ΄μΈνΈμ μλ²μ λͺ¨λ ν΅μ μ΄ μμ²κ³Ό μλ΅μΌλ‘ μ΄λ£¨μ΄μ§
- Stateless
- Statelessλ λ§κ·Έλλ‘ state(μν)λ₯Ό μ μ₯νμ§ μλλ€λ λ»
- κ°κ°μ μμ²β’μλ΅μ λ
립μ μΈ μμ²β’μλ΅
- ν΄λΌμ΄μΈνΈκ° μμ²μ 보λ΄κ³ μλ²μ μλ΅μ λ°μ ν λ€μ μμ²μ λ³΄λΌ λ, μ΄μ μ μμ²β’μλ΅μ λν΄ μμ§ λͺ»νλ€λ λ»
π© HTTP : Header
- ν΄λΌμ΄μΈνΈκ° μλ²λ‘ μμ²μ ν λ νΉμ μλ²κ° ν΄λΌμ΄μΈνΈμ μλ΅ν λ λΆκ°μ μΈ μ 보λ₯Ό λ΄λ κ³³μ΄ ν€λ(header)λΌλ κ³³
-νμ΄μ¬(Python)μ λμ
λ리(Dictionary)μ λΉμ·νκ² ν€μ κ°μ΄ μμ μ΄λ£¨λ κ°μΌλ‘ μ΄λ£¨μ΄μ Έ μμ
- μλ₯Ό λ€μ΄ ν€μλ Content-Type λΌλ ν€μ κ°μλ application/json λ±μ΄ μ€λλ° μ΄ λμ μ½λ‘ μΌλ‘ ꡬλΆ
- μ΅μ’
μ μΌλ‘λ Content-Type: application/json
νμμΌλ‘ μ΄λ£¨μ΄μ§
- ν€λλ λ¬Έλ§₯μ λ°λΌ μ’
λ₯λ₯Ό λλ μ μμ
- λνμ μΌλ‘ μμ²κ³Ό μλ΅μ λͺ¨λ μ€μ΄λλ₯Ό μ μλ General Headerκ° μ‘΄μ¬
- ν΄λΌμ΄μΈνΈ μ체 μ 보 λ±μ λ΄λ Request Header
- μλ²μ μ체 μ 보 λ±μ λ΄λ Response Header
- 컨ν
μΈ κΈΈμ΄ νΉμ MIME νμ
μ κ΄ν μ 보λ₯Ό λ΄λ Entity Header
Tip! MIMEμ΄λ?
Multipurpose Internet Mail Extensionsμ μ½μλ‘ κ°λ¨ν λ§νλ©΄ νμΌ λ³νμ μλ―Ένλ€.νμ¬λ μΉμ ν΅ν΄ μ¬λ¬ ννμ νμΌμ μ λ¬νλλ° μ¬μ©νκ³ μμ§λ§ μ΄ μ©μ΄κ° μκΈΈ λ μ΄λ©μΌκ³Ό ν¨κ» λλ΄ν νμΌμ ν
μ€νΈ λ¬Έμλ‘ μ νν΄μ μ΄λ©μΌ μμ€ν
μ ν΅ν΄ μ λ¬νκΈ° μν΄ κ°λ°λμ΄ Internet Mail ExtensionsλΌκ³ λΆλ¦¬κΈ° μμνλ€κ³ νλ€.
π General Header
- HTTP κ³΅ν΅ ν€λλΌκ³ λ λΆλ¦Ό
- HTTP ν΅μ μ νλ μλ²μ ν΄λΌμ΄μΈνΈ μΈ‘μμ λͺ¨λ μ¬μ©ν μ μλ ν€λλ₯Ό λ§ν¨
- μ΄ κ³΅ν΅ ν€λλ μΌλ°μ μΈ λͺ©μ μΌλ‘ μ¬μ©λλ©° κ°μ₯ κΈ°λ³Έμ μΈ μ 보 λ±μ λ΄λ ν€λλ€μ΄ μ‘΄μ¬
- Date
- HTTP λ©μΈμ§λ₯Ό μμ±ν μΌμλ₯Ό λ»ν¨
- ν€λ Dateλ‘ μ¬μ©λλ©°
Date: Wed, 20 May 2020 02:44:49 GMT
νμμΌλ‘ μ΄λ£¨μ΄μ§
- Connection
- HTTP ν΅μ μ΄ μλ£λ νμ λ€νΈμν¬ μ μμ μ μ§ν μ§ λ§μ§λ₯Ό κ²°μ νλ ν€λ
- κ°μΌλ‘λ closeμ keep-alive λ κ°μ§κ° μ‘΄μ¬
- closeμ κ²½μ° ν΅μ μ΄ μλ£λ νμ λ°λ‘ μ°κ²°μ λκ² λ€λ μλ―Έλ‘, HTTP/1.0μμλ μ΄ κ°μ΄ κΈ°λ³Έ κ°
- keep-aliveμ κ²½μ°μλ μ°κ²°μ μ΄λ¦° μνλ‘ μ μ§νλ κ²μ λνλ΄λ©°, HTTP/1.1μμμ κΈ°λ³Έ κ°
- Cache-control
- μλ²μ ν΄λΌμ΄μΈνΈ μμ² μλ΅κ°μ μΊμ± 맀컀λμ¦μ μν΄ μ μνλ ν€λ
- ν€:κ°μΌλ‘ μ΄λ£¨μ΄μ§ ν€λμμ 'κ°'μ 'λλ ν°λΈ'λΌλ λͺ
μΉμΌλ‘ μ¬μ©
- μ΄ λλ ν°λΈμλ λ§€μ° λ€μν κ°μ΄ μ¬ μ μμΌλ©° μ£Όλ‘ μ°μ΄λ κ² λͺ κ°μ§λ§ μ 리
- max-age=[seconds] : 리μμ€κ° μ΅μ μνλΌκ³ νλ€ν μ΅λ μκ°μ μ§μ νλ λλ ν°λΈ, μμ² μκ°κ³Ό κ΄λ ¨μ΄ μμ
- no-store : μ΄λ ν μμ²κ³Ό μλ΅μ λν μ 보λ₯Ό μΊμνμ§ μμ
- no-transform : μλ΅μ λν΄ λ³νμ΄λ λ³νμ΄ μΌμ΄λλ©΄ μλ¨. 컨ν
μΈ μ ν€λλ νλ‘μμ μν΄ μμ λλ©΄ μλλ€κ³ λͺ
μνκ³ μ΄λ₯Ό νμ©νμ§ μμ
- no-cache : μΊμλ 볡μ¬λ³Έμ 보μ¬μ£ΌκΈ° μ μ μ¬κ²μ¦μ μν μμ²μ μλ²λ‘ 보λ΄λλ‘ κ°μ ν¨
- public : μλ΅μ μ΄λ ν μΊμμ μν΄μλ μΊμλ μ μμ
- private : μλ΅μ 곡μ μΊμμ μν΄ μ μ₯λμ§ μμμΌ ν¨
π Entity Header
- μ£Όλ‘ μ»¨ν
μΈ μ μ 보λ₯Ό λ΄κΈ° μν ν€λ
- Content- λ‘ μμνλ ν€λ ν€λ€μ΄ μ‘΄μ¬
- Content-Type
- μλ΅νλ 컨ν
μΈ κ° μ΄λ€ μ νμΈμ§ μλ €μ£Όλ ν€λ
- λλ ν°λΈμλ media-type, charset, boundary λ±μ΄ μ‘΄μ¬
- media-typeμ΄λ λ§ κ·Έλλ‘ μ»¨ν
μΈ μ μ νμ MIME TypeμΌλ‘ μμ±νλ©΄ λλ©°, μ£Όλ‘ μ¬μ©λλ application/json, text/html, font/woff, image/jpeg, image/png, video/mp4 λ±μ΄ μμ
- Content-Length
- λ°μ΄νΈ λ¨μμ 컨ν
μΈ κΈΈμ΄λ₯Ό 보λ
- Content-Location
- 컨ν
μΈ μ λ체 μμΉλ₯Ό κ°λ¦¬ν΄
- μ΄ μμΉλ μλμ μΈ μ£Όμκ° λ μλ μμΌλ©° μ λμ μΈ μ£Όμκ° λ μλ μμ (리λ€μ΄λ μ
μ λμμ κ°λ¦¬ν€λ Location ν€λμλ λ€λ¦)
Content-Location: https://example.com/index.html
νμμΌλ‘ μ¬μ©
- Content-Range
- 컨ν
μΈ μ λΆλΆ μμΉλ₯Ό μλ €μ€
- μλ₯Ό λ€μ΄ μ΄ 67800bytes ν¬κΈ°λ₯Ό κ°μ§λ 컨ν
μΈ λ₯Ό λΆλΆμ μΌλ‘ 보λΈλ€λ©΄
Content-Range: bytes 100-1000/67800
λ‘ νν
- "μ΄ ν€λλ μλ΅μΌλ‘ λ΄λ³΄λΈ 컨ν
μΈ κ° μ΄ μ»¨ν
μΈ κΈΈμ΄λ 67800bytesμ΄κ³ , κ·Έ μ€ 100bytesμμ 1000bytesκΉμ§μ 컨ν
μΈ μ΄λ€." λΌκ³ μλ―Έμ ν€λ
π Request Header
- μμ²μ μ€λ¦¬λ ν€λλ€
- μ£Όλ‘ ν΄λΌμ΄μΈνΈμ μ체 μ 보λ₯Ό λ΄λ κ²λ€μ΄ μ‘΄μ¬
- Host
- μμ²μ νλ 주체μ λν μ 보λ₯Ό λ΄λ ν€λ
- HTTP/1.1 μ΄ν μ΄ ν€λλ νμ νλͺ©
Host: developers.facebook.com
νμμΌλ‘ μ¬μ©
- User-Agent
- ν΄λΌμ΄μΈνΈμ μ 보λ₯Ό λ΄κ³ μμ
- μ¬κΈ°μλ λΈλΌμ°μ μμ§, λ²μ , μ΄μ체μ λ±μ΄ λ΄κΈΈ μ μμ
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0
νμμΌλ‘ μ¬μ©
- Accept
- ν΄λΌμ΄μΈνΈκ° μ΄λ€ 컨ν
μΈ νμ
μ μ΄ν΄ν μ μλμ§μ λν μ 보λ₯Ό λ΄λ ν€λ
- MIME νμ
μΌλ‘ μμ±ν μ μμΌλ©° μλ²λ μ΄ ν€λλ₯Ό μ°Έκ³ ν΄μ μ μ νκ² μλ΅ν μ μμ
- Accept ν€λλ‘ ν΄λΌμ΄μΈνΈκ° μ΄ν΄ν μ μλ 컨ν
μΈ νμ
μ λμ΄νκ³ , μλ²λ κ·Έ μ€ νλλ₯Ό μ νν΄ Content-Type ν€λμ 컨ν
μΈ νμ
μ λ΄λ³΄λ
- Accept-Language
- λ€κ΅μ΄λ₯Ό μ§μν΄μΌ νλ μλΉμ€λ₯Ό μ΄μνκ³ μμ κ²½μ° λλ©μΈμ λ€λ₯΄κ² ν΄ κ°κ΅μ μΈμ΄λ‘ μμ±λ νμ΄μ§λ₯Ό 보μ¬μ€ μ μλλ°, μ΄λ° λ°©λ²μ μ¬μ©νμ§ μλλ€λ©΄ ν΄λΌμ΄μΈνΈκ° μλ²μκ² μ§μ μ΄ν΄ν μ μλ μΈμ΄λ₯Ό ν€λμ μ€μ΄μ λ³΄λΌ μ μμ
Accept-Language: ko-KR, ko;q=0.5
νμμΌλ‘ μ¬μ©
- Accept-Encoding
- μμ²ν΄μ μλ΅ λ°μ λ°μ΄ν°μ μμΆ λ°©μμ μ§μ νλ ν€λ
- Authorization
- μ£Όλ‘ μΈμ¦ ν ν°μ λ³΄λΌ λ μ°λ ν€λ
- λ€μν μΈμ΄μμ ꡬνλ JWT λΌμ΄λΈλ¬λ¦¬λ‘ λ§λ€μ΄μ§ ν ν°μ μ΄ ν€λμ μ€μ΄μ μλ²μ λ³΄λΌ μ μμΌλ©°, μ£Όλ‘
Authorization: Type Token
νμμΌλ‘ μ¬μ©
- μΌλ°μ μΌλ‘λ Typeμ Bearerλ₯Ό μ°κ³ Tokenμ Access Tokenμ λ΄μμ μλ²μ 보λ΄λ©΄, μλ²λ μ΄λ¬ν ν ν°μ λ°μ κ²μ¦νκ³ κ²μ¦λ ν ν°μ΄λ©΄ μμμ λ΄λ³΄λ΄κ³ κ·Έλ μ§ μλ€λ©΄ μ μ ν μλ΅μ ν μ μμ
- Referer
- μ΄ ν€λλ νμ¬ μμ²λ νμ΄μ§μμ μ΄μ μ λ°©λ¬Έν, νμ¬ νμ΄μ§κ° μ΄λλ‘λΆν° λ€μ΄μ€κ² λμλμ§ νμνλ ν€λ
- λ€μν μ λ리ν±μ€ μλΉμ€μμλ μ΄λ¬ν ν€λλ₯Ό ν΅ν΄ μ¬μ΄νΈκ° μ΄λλ‘λΆν° μ μ
λμλμ§ μ 보λ₯Ό μ»μ΄λ
π Response Header
- μλ² μ체μ μ 보λ₯Ό λ΄λ ν€λ, 컨ν
μΈ μ λν μ 보λ₯Ό λ΄μ μλ μμ
- Server
- κΈ°λ³Έμ μΈ μλ²μ μ 보λ₯Ό λ΄λ ν€λ
- λ무 λ§μ μλ²μ μ 보λ₯Ό λ΄κ² λλ©΄ 곡격μ λ°μ μ μμΌλ―λ‘ μΈλΆμ μΌλ‘ μμ±νλ 건 νΌν΄μΌν¨
- μμ²μ μ²λ¦¬νλ μλ² μΈ‘μ΄ μ΄λ ν μννΈμ¨μ΄λ₯Ό μ¬μ©νκ³ μλμ§ νΉμ νμ μ νμ λν λ΄μ©μ λ΄κ³ μμ
server: Netlify
νμμΌλ‘ μ¬μ©
- Access-Control-Allow-Origin
- ν΄λΉ Origin(μ£Όμ)μΌλ‘λΆν° μ€λ μμ²μ νμ©νλ€λ μ 보λ₯Ό μλ €μ£Όλ ν€λ
access-control-allow-origin: *
νμμΌλ‘ μ¬μ©
- μμΌλ μΉ΄λ *κ° μ€κ²λλ©΄ λͺ¨λ Originμ νμ©νλ€λ μλ―Έ
- κ·Έλ μ§ μκ³ Originμ μ κ² λλ©΄ κ·Έ OriginμΌλ‘ μ€λ μμ²λ§ νμ©νλ€λ μλ―Έ
- λ§μ½ νμ©λλ Originμ΄ μλ λ€λ₯Έ κ³³μμ μμ²μ΄ μ€κ² λλ€λ©΄ λΈλΌμ°μ μμ CORS μ€λ₯λ₯Ό λ
Tip! CORSλ?
Cross-Origin Resource Sharingμ μ½μλ‘ μΆκ°μ μΈ HTTP headerλ₯Ό μ¬μ©ν΄μ μ ν리μΌμ΄μ
μ΄ λ€λ₯Έ originμ 리μμ€μ μ κ·Όν μ μλλ‘ νλ λ©μ»€λμ¦μ λ»νλ€. λ€λ₯Έ originμμ λ΄ λ¦¬μμ€μ ν¨λΆλ‘ μ κ·Όνμ§ λͺ»νκ² νκΈ° μν΄ μ¬μ©λλ€.
- Expires
- 리μμ€κ° μ§μ λ μΌμκΉμ§ μ ν¨νλ€κ³ λνλ΄λ ν€λ
- μΊμμ κ΄λ ¨μ΄ μμΌλ©° 리μμ€μ λν μΊμκ° μΈμ λ§λ£λλμ§λ₯Ό μλ €μ£Όλ ν€λ
- ETag
- HTTP 컨ν
μΈ κ° λ°λμλμ§μ λν κ²μ¦μ ν μ μλ νκ·Έ
- μλ΅ λ³Έλ¬Έμ΄ λ³νμ§ μλλ€λ©΄ νμ λκ°μ κ°μ λ΄λ±κ³ λ³νλ€λ©΄ λ€λ₯Έ κ°μ λ΄λ±κΈ° λλ¬Έμ μ΄λ‘ μΈν΄ 컨ν
μΈ κ° λ°λμλμ§ κ²μ¦μ΄ κ°λ₯νλ©° λ§μ½ λ°λκ² λλ€λ©΄ μΊμλ₯Ό μ§μ°κ³ μλ‘ λ΄λ €λ°κ² λ¨