π Intro
πμ©λ
• HTTP μ μ‘μ νμν λͺ¨λ λΆκ°μ 보 <body>...</body> </html>
• μ) λ©μμ§ λ°λμ λ΄μ©, λ©μμ§ λ°λμ ν¬κΈ°, μμΆ, μΈμ¦, μμ² ν΄λΌμ΄μΈνΈ, μλ² μ 보, μΊ μ κ΄λ¦¬ μ 보...
• νμ€ ν€λκ° λ무 λ§μ
• https://en.wikipedia.org/wiki/List_of_HTTP_header_fields
• νμμ μμμ ν€λ μΆκ° κ°λ₯
π HTTP BODY
• λ©μμ§ λ³Έλ¬Έ(message body)μ ν΅ν΄ νν λ°μ΄ν° μ λ¬
• λ©μμ§ λ³Έλ¬Έ = νμ΄λ‘λ(payload)
• ννμ μμ²μ΄λ μλ΅μμ μ λ¬ν μ€μ λ°μ΄ν°
• νν ν€λλ νν λ°μ΄ν°λ₯Ό ν΄μν μ μλ μ 보 μ 곡
• λ°μ΄ν° μ ν(html, json), λ°μ΄ν° κΈΈμ΄, μμΆ μ 보 λ±λ±
• μ°Έκ³ : νν ν€λλ νν λ©νλ°μ΄ν°μ, νμ΄λ‘λ λ©μμ§λ₯Ό ꡬλΆν΄μΌ νμ§λ§, μ¬κΈ°μλ μλ΅
π νν
νμμ΄λΌλ 리μμ€λ₯Ό 'HTML'μ΄λΌλ ννμΌλ‘ μ λ¬ν κ±°μΌ, 'JSON'μ΄λΌλ ννμΌλ‘ μ λ¬ν κ±°μΌ.
• Content-Type: νν λ°μ΄ν°μ νμ
• Content-Encoding: νν λ°μ΄ν°μ μμΆ λ°©μ
• Content-Language: νν λ°μ΄ν°μ μμ° μΈμ΄
• Content-Length: νν λ°μ΄ν°μ κΈΈμ΄
• νν ν€λλ μ μ‘, μλ΅ λλ€ μ¬μ©
π Content-Type: νν λ°μ΄ν°μ νμ μ€λͺ
μ)
• text/html; charset=utf-8
• application/json
• image/png
π Content-Encoding: νν λ°μ΄ν° μΈμ½λ©
• νν λ°μ΄ν°λ₯Ό μμΆνκΈ° μν΄ μ¬μ©
• λ°μ΄ν°λ₯Ό μ λ¬νλ κ³³μμ μμΆ ν μΈμ½λ© ν€λ μΆκ°
• λ°μ΄ν°λ₯Ό μ½λ μͺ½μμ μΈμ½λ© ν€λμ μ λ³΄λ‘ μμΆ ν΄μ
• μ) gzip, deflate, identity
π Content-Language: νν λ°μ΄ν°μ μμ° μΈμ΄
• νν λ°μ΄ν°μ μμ° μΈμ΄λ₯Ό νν
• μ) ko, en, en-US
π Content-Length: νν λ°μ΄ν°μ κΈΈμ΄
• byteλ¨μ
• Transfer-Encoding(μ μ‘ μ½λ©)μ μ¬μ©νλ©΄ Content-Lengthλ₯Ό μ¬μ©νλ©΄ μλ¨.
π νμ(μ½ν
μΈ λ€κ³ μμμ΄μ
)
: ν΄λΌμ΄μΈνΈκ° μ νΈνλ νν μμ²
ν΄λΌμ΄μΈνΈκ° μνλ ννλλ‘ νν λ°μ΄ν°λ₯Ό μ€μΌν΄~!
• Accept: ν΄λΌμ΄μΈνΈκ° μ νΈνλ λ―Έλμ΄ νμ μ λ¬
• Accept-Charset: ν΄λΌμ΄μΈνΈκ° μ νΈνλ λ¬Έμ μΈμ½λ©
• Accept-Encoding: ν΄λΌμ΄μΈνΈκ° μ νΈνλ μμΆ μΈμ½λ©
• Accept-Language: ν΄λΌμ΄μΈνΈκ° μ νΈνλ μμ° μΈμ΄
• νμ ν€λλ μμ²μμλ§ μ¬μ©
π νμκ³Ό μ°μ μμ
0. κ°: Quality Values(q)
1. 0~1, ν΄μλ‘ λμ μ°μ μμ (μλ΅νλ©΄ 1)
2. ꡬ체μ μΈ κ²μ΄ μ°μ
3. ꡬ체μ μΈ κ²μ κΈ°μ€μΌλ‘ λ―Έλμ΄ νμ μ λ§μΆ€.
• μ) Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
ko-KR;q=1 (qμλ΅) | ko;q=0.9 |
en-US;q=0.8 | en:q=0.7 |
π μ μ‘ λ°©μ
• λ¨μ μ μ‘: νλ²μ μμ²νκ³ νλ²μ λ°μ.
• μμΆ μ μ‘: gzip λ±μ μ¬μ©ν΄ μμΆν΄μ μ£Όκ³ λ°μ. (Content-Encoding: gzip ν¬ν¨ νμ)
• λΆν μ μ‘: μμμ λ¨μλλ‘ μͺΌκ°μ μ£Όκ³ λ°μ. (Content-Length λ£μΌλ©΄ μλ¨.)
• λ²μ μ μ‘: μ 체 μ€μ νμν λ²μλ₯Ό μ§μ ν΄μ μ£Όκ³ λ°μ.
π μΌλ° μ 보
π From: μ μ μμ΄μ νΈμ μ΄λ©μΌ μ 보
• μΌλ°μ μΌλ‘ μ μ¬μ©λμ§ μμ
• κ²μ μμ§ κ°μ κ³³μμ, μ£Όλ‘ μ¬μ©
• μμ²μμ μ¬μ©
π Referer: μ΄μ μΉ νμ΄μ§ μ£Όμ
• νμ¬ μμ²λ νμ΄μ§μ μ΄μ μΉ νμ΄μ§ μ£Όμ
• A -> Bλ‘ μ΄λνλ κ²½μ° Bλ₯Ό μμ²ν λ Referer: A λ₯Ό ν¬ν¨ν΄μ μμ²
• Refererλ₯Ό μ¬μ©ν΄μ μ μ κ²½λ‘ λΆμ κ°λ₯
• μμ²μμ μ¬μ©
• μ°Έκ³ : refererλ λ¨μ΄ referrerμ μ€ν
π 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 μλ²μ μννΈμ¨μ΄ μ 보
* ORIGIN μλ²: μ€κ°μ μ¬λ¬ κ°μ νλ‘μ μλ²λ₯Ό κ±°μΉλλ°, μ§μ§ λμ μμ²μ΄ λμ°©ν λ§μ§λ§ μλ²
• Server: Apache/2.2.22 (Debian)
• server: nginx
• μλ΅μμ μ¬μ©
π Date: λ©μμ§κ° μμ±λ λ μ§
• Date: Tue, 15 Nov 1994 08:12:31 GMT
• μλ΅μμ μ¬μ©
π νΉλ³ν μ 보
π Host: μμ²ν νΈμ€νΈ μ 보(λλ©μΈ) -νμ!!
* κ°μνΈμ€νΈλ₯Ό ν΅ν΄ μ¬λ¬ λλ©μΈμ νλ²μ μ²λ¦¬ν μ μλ μλ²(μ€μ μ ν리μΌμ΄μ μ΄ μ¬λ¬κ° ꡬλλ μ μμ.)μκ² μμ²μ 보λ΄μΌ νλ€λ©΄?
• νλμ μλ²κ° μ¬λ¬ λλ©μΈμ μ²λ¦¬ν΄μΌ ν λ
• νλμ IP μ£Όμμ μ¬λ¬ λλ©μΈμ΄ μ μ©λμ΄ μμ λ
• μμ²μμ μ¬μ©
π Location: νμ΄μ§ 리λ€μ΄λ μ
• μΉ λΈλΌμ°μ λ 3xx μλ΅μ κ²°κ³Όμ Location ν€λκ° μμΌλ©΄, Location μμΉλ‘ μλ μ΄λ (리λ€μ΄λ νΈ)
• μλ΅μ½λ 3xxμμ μ€λͺ
• 201 (Created): Location κ°μ μμ²μ μν΄ μμ±λ 리μμ€ URI
• 3xx (Redirection): Location κ°μ μμ²μ μλμΌλ‘ 리λλ μ
νκΈ° μν λμ 리μμ€λ₯Ό κ°λ¦¬ν΄.
π Allow: νμ© κ°λ₯ν HTTP λ©μλ
• 405 (Method Not Allowed) μμ μλ΅μ ν¬ν¨ν΄μΌν¨
• Allow: GET, HEAD, PUT
π Retry-After: μ μ μμ΄μ νΈκ° λ€μ μμ²μ νκΈ°κΉμ§ κΈ°λ€λ €μΌ νλ μκ°
• 503 (Service Unavailable): μλΉμ€κ° μΈμ κΉμ§ λΆλ₯μΈμ§ μλ €μ€ μ μμ
• Retry-After: Fri, 31 Dec 1999 23:59:59 GMT (λ μ§ νκΈ°)
• Retry-After: 120 (μ΄λ¨μ νκΈ°)
π μΈμ¦
μΈμ¦νλ λ€μν λ°©λ²λ€μ΄ μλλ° (OAuth λ±λ±) λ°©λ²λ€λ§λ€ νμν μ λ³΄κ° λ€λ¦.
π Authorization: ν΄λΌμ΄μΈνΈ μΈμ¦ μ 보λ₯Ό μλ²μ μ λ¬
• Authorization: Basic xxxxxxxxxxxxxxxx
π WWW-Authenticate: 리μμ€ μ κ·Όμ νμν μΈμ¦ λ°©λ² μ μ
• 리μμ€ μ κ·Όμ νμν μΈμ¦ λ°©λ² μ μ
• 401 Unauthorized μλ΅κ³Ό ν¨κ» μ¬μ©
• WWW-Authenticate: Newauth realm="apps", type=1,
title="Login to \"apps\"", Basic realm="simple"
π μΏ ν€ (Cookie)
π νμμ±
μ μ κ° λ‘κ·ΈμΈ νλλ°, λ€μ λ‘κ·ΈμΈ νμ΄μ§ μ μνλλ λ‘κ·ΈμΈνκ±Έ λͺ°λΌ.
μ¬κΈ°μ λ±μ₯νλ stateless.
ν΄λΌμ΄μΈνΈκ° μλ²κ° μμ²κ³Ό μλ΅μ μ£Όκ³ λ°μΌλ©΄ μ°κ²°μ΄ λμ΄μ§κ³ , μ°κ²° λμ΄μ§λ©΄ μ΄μ μμ²μ κΈ°μ΅νμ§ λͺ»ν¨.
μλ²λ λ‘κ·ΈμΈν μ¬μ©μ μ 보λ₯Ό μκ³ μμ΄μΌ ν¨.
κ·ΈλΌ λͺ¨λ μμ²μ λ§ν¬μ μ¬μ©μ μ 보λ₯Ό ν¬ν¨μμΌ? λ μ©μ΄μ§ κ°λ° κ΄μ μμλ νλ€κ³ .
π Set-Cookie: μλ²μμ ν΄λΌμ΄μΈνΈλ‘ μΏ ν€ μ λ¬(μλ΅)
1. μΉ λΈλΌμ°μ κ° μμ²μ 보λ΄λ©΄,
2. μλ²κ° Set-Cookieλ‘ μΏ ν€λ₯Ό λ§λ€μ΄μ μ΄λ° μλ΅μ 보λ.
HTTP/1.1 200 OK
Set-Cookie: user=νκΈΈλ
3. μΉ λΈλΌμ°μ λ μΏ ν€ μ μ₯μλ₯Ό κ°κ³ μλλ°, μ΄ μ μ₯μμ μλ²λ‘λΆν° λ°μ κ·Έ μΏ ν€λ₯Ό μ μ₯ν΄λ .
λ‘κ·ΈμΈ μ΄νμλ?
4. μΉ λΈλΌμ°μ λ κ·Έ μ§μ λ μλ²μ HTTP μμ²μ 보λΌλλ§λ€ 무쑰건 μλμΌλ‘ μΏ ν€ μ μ₯μλ₯Ό λ€μ Έμ κ·Έ μΏ ν€λ‘ μλ²λ‘ μ λ¬.
• μ) set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure
π νΉμ§
• μ£Ό μ¬μ©μ²: μ¬μ©μ λ‘κ·ΈμΈ μΈμ κ΄λ¦¬, κ΄κ³ μ 보 νΈλνΉ
• μΏ ν€ μ 보λ νμ μλ²μ μ μ‘λ¨.
• λ€νΈμν¬ νΈλν½ μΆκ° μ λ°
• μ΅μνμ μ λ³΄λ§ μ¬μ©(μΈμ id, OAuth-μΈμ¦ ν ν°)
• μλ²μ μ μ‘νμ§ μκ³ , μΉ λΈλΌμ°μ λ΄λΆμ λ°μ΄ν°λ₯Ό μ μ₯νκ³ μΆμΌλ©΄ μΉ μ€ν λ¦¬μ§ (localStorage, sessionStorage)
(* μΉ μ€ν 리μ§: μμ²ν λλ§λ€ μλ²μ 보λ΄λκ² μλλΌ ν΄λΌμ΄μΈνΈμμ κ°κ³ μλ€κ°, νμν λ‘μ§μμ κΊΌλ΄ μΈ μ μλ μ μ₯곡κ°)
• μ£Όμ! 보μμ λ―Όκ°ν λ°μ΄ν°λ μ μ₯νλ©΄ μλ¨. (μ£Όλ―Όλ²νΈ, μ μ©μΉ΄λ λ²νΈ λ±)
π μλͺ μ£ΌκΈ° (Expires, max-age)
• Set-Cookie: expires=Sat, 26-Dec-2020 04:39:21 GMT -> λ§λ£μΌμ΄ λλ©΄ μΏ ν€ μμ
• Set-Cookie: max-age=3600 (3600μ΄) -> 0μ΄λ μμλ₯Ό μ§μ νλ©΄ μΏ ν€ μμ
• μΈμ
μΏ ν€: λ§λ£ λ μ§λ₯Ό μλ΅νλ©΄ λΈλΌμ°μ μ’
λ£μ κΉμ§λ§ μ μ§
• μμ μΏ ν€: λ§λ£ λ μ§λ₯Ό μ
λ ₯νλ©΄ ν΄λΉ λ μ§κΉμ§ μ μ§
π λλ©μΈ (Domain)
• μΏ ν€λ λλ©μΈμ μ§μ ν μ μμ.
• λͺ μ: λͺ μν λ¬Έμ κΈ°μ€ λλ©μΈ + μλΈ λλ©μΈ ν¬ν¨
• μλ΅: νμ¬ λ¬Έμ κΈ°μ€ λλ©μΈλ§ μ μ©
μ) domain=example.org
<λͺ μ>
• domain=example.orgλ₯Ό μ§μ ν΄μ μΏ ν€ μμ±
• example.orgλ λ¬Όλ‘ dev.example.orgλ μΏ ν€ μ κ·Ό
<μλ΅>
• example.org μμ μΏ ν€λ₯Ό μμ±νκ³ domain μ§μ μ μλ΅
• example.org μμλ§ μΏ ν€ μ κ·Ό, dev.example.orgλ μΏ ν€ λ―Έμ κ·Ό
π κ²½λ‘
• μ΄ κ²½λ‘λ₯Ό ν¬ν¨ν νμ κ²½λ‘ νμ΄μ§λ§ μΏ ν€ μ κ·Ό
• μΌλ°μ μΌλ‘ path=/ 루νΈλ‘ μ§μ
π 보μ (Secure, HttpOnly, SameSite)
π Secure
• μΏ ν€λ http, httpsλ₯Ό ꡬλΆνμ§ μκ³ μ μ‘
• Secureλ₯Ό μ μ©νλ©΄ httpsμΈ κ²½μ°μλ§ μ μ‘
π HttpOnly
• XSS 곡격 λ°©μ§
• μλ°μ€ν¬λ¦½νΈμμ μ κ·Ό λΆκ°(document.cookie)
• HTTP μ μ‘μλ§ μ¬μ©
π SameSite
• XSRF 곡격 λ°©μ§
• μμ² λλ©μΈκ³Ό μΏ ν€μ μ€μ λ λλ©μΈμ΄ κ°μ κ²½μ°λ§ μΏ ν€ μ μ‘
'Web > HTTP' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
κ²μ¦ ν€λμ μ‘°κ±΄λΆ μμ² (0) | 2022.01.12 |
---|---|
μΊμ (0) | 2022.01.12 |
HTTP μν μ½λ (0) | 2022.01.11 |
HTTP API μ€κ³ μμ (0) | 2022.01.11 |
HTTP λ©μλμ νμ© (0) | 2022.01.10 |