[HTTP] 7.HTTP ν€λ1 - μΌλ°ν€λ
1. νν
- Content-Type : νν λ°μ΄ν°μ νμ
- Content-Encoding : νν λ°μ΄ν°μ μμΆ λ°©μ
- Content-Language : νν λ°μ΄ν°μ μμ° μΈμ΄
- Content-Length : νν λ°μ΄ν°μ κΈΈμ΄
ex) νμ 리μμ€
-> HTML νμ/ννμΌλ‘ μ μ‘?
-> JSON νμ/ννμΌλ‘ μ μ‘?
- νν ν€λλ μ μ‘, μλ΅ λ λ€ μ¬μ©
Content-Type (νν λ°μ΄ν°μ νμ) - λ―Έλμ΄ νμ , λ¬Έμ μΈμ½λ© ex) text/html; charset=utf-8 application/json image/png |
Content-Encoding (νν λ°μ΄ν°μ μμΆ λ°©μ) - νν λ°μ΄ν°λ₯Ό μμΆνκΈ° μν΄ μ¬μ© - λ°μ΄ν°λ₯Ό μ λ¬νλ κ³³μμ μμΆ ν μΈμ½λ© ν€λ μΆκ° - λ°μ΄ν°λ₯Ό μ½λ μͺ½μμ μΈμ½λ© ν€λμ μ λ³΄λ‘ μμΆ ν΄μ ex) gzip deflate identity |
Content-Language (νν λ°μ΄ν°μ μμ° μΈμ΄) - νν λ°μ΄ν°μ μμ° μΈμ΄λ₯Ό νν ex) ko en en-US |
Content-Length (νν λ°μ΄ν°μ κΈΈμ΄) - λ°μ΄νΈ λ¨μ - Transfer-Encoding(μ μ‘μ½λ©)μ μ¬μ©νλ©΄ Content-Lengthλ₯Ό μ¬μ©νλ©΄ μλ¨ |
2. νμ (Contents Negotiation)
- ν΄λΌμ΄μΈνΈκ° μ νΈνλ νν μμ²
Accept: ν΄λΌμ΄μΈνΈκ° μ νΈνλ λ―Έλμ΄ νμ μ λ¬
Accept-Charset: ν΄λΌμ΄μΈνΈκ° μ νΈνλ λ¬Έμ μΈμ½λ©
Accept-Encoding: ν΄λΌμ΄μΈνΈκ° μ νΈνλ μμΆ μΈμ½λ©
Accept-Language: ν΄λΌμ΄μΈνΈκ° μ νΈνλ μμ° μΈμ΄
* νμ ν€λλ μμ²μμλ§ μ¬μ©
Accept-Language μ μ© μ
- μλ²μμ μ νΈ μΈμ΄ μλμΌλ‘ μ 곡 (Content-Language)
- λ§μ½ λ€μ€ μΈμ΄ μ€ koκ° μμλ? -> κΈ°λ³Έμ΄ λ μΌμ΄κ³ κ·Έ λ€μμ΄ μμ΄μΌλ? -> μ°μ μμ νμ
νμκ³Ό μ°μ μμ1
- Quality Values(q)
- 0~1 ν΄μλ‘ μ°μ μμ
- μλ΅νλ©΄ 1 (default)
- Accept-Language: ko-KR, ko;q=0.9, en-US;q=0.8, en;q=0.7
νμκ³Ό μ°μ μμ2
- ꡬ체μ μΈ κ²μ΄ μ°μ
- Accpet: text/*, text/plain, text/plain;format=flowed, */*
(1) text/plain;format=flowed
(2) text/plain
(3) text/*
(4) */*
νμκ³Ό μ°μ μμ3
- ꡬ체μ μΈ κ²μ κΈ°μ€μΌλ‘ λ―Έλμ΄ νμ μ λ§μΆ€
- Accept: text/*;q=0.3, text/html;q=0.7, text/html;level=1,text/html;level=2;q=0.4, */*;q=0.5
3. μ μ‘λ°©μ
- λ¨μ μ μ‘
- μμΆ μ μ‘
- λΆν μ μ‘
- λ²μ μ μ‘
(1) λ¨μ μ μ‘
- νλ²μ μμ²νκ³ νλ²μ λ°λ κ²
(2) μμΆ μ μ‘
- μμ²νκ³ μμΆν΄μ λ°λ κ²
ex) Content-Encoding: gzip
(3) λΆν μ μ‘
- Transfer-Encoding: chunked
- 5λ°μ΄νΈ λ¨Όμ 보λ΄λ©΄ ν΄λΌμ΄μΈνΈ λ°μλ³Όμμμ
- 5λ°μ΄νΈ λ 보λ΄κ³
- λ§μ§λ§μ 0 + \r\n
-> μ©λμ΄ μ»€μ λΆν ν΄μ μ μ‘νλ©΄ μ€λλλ‘ λ³Ό μ μμ
-> Content-length λ£μΌλ©΄ μλ¨!!!
(4) λ²μ μ μ‘
- Range, Content-Range
- μμ² λ³΄λΌλ Range: bytes=1001~2000
- μλ΅μΌλ‘ Content-Range: bytes 1001~2000/2000
4. νΉλ³ν μ 보
1) Host : μμ²ν νΈμ€νΈ μ 보 (λλ©μΈ)
- μμ²μμ μ¬μ©
- νμκ°
- νλμ μλ²κ° μ¬λ¬ λλ©μΈμ μ²λ¦¬ν΄μΌ ν λ
- νλμ IPμ£Όμμ μ¬λ¬ λλ©μΈμ΄ μ μ©λμ΄ μμ λ
μ€λͺ )
νλμ μλ²κ° IPκ° μ ν΄μ ΈμλλΌλ λ΄λΆμμ μ¬λ¬ λλ©μΈμμ μ ν리μΌμ΄μ ꡬλ μ€μΌ μ μμ
μ΄λ ν΄λΌμ΄μΈνΈμμ HTTP μμ² λ³΄λΌ λ Hostμ μ΄λ€ λλ©μΈμΈμ§ λ§ν΄μ£Όλ κ²
2) Location : νμ΄μ§ 리λ€μ΄λ μ
- μΉ λΈλΌμ°μ λ 3xx μλ΅μ κ²°κ³Όμ Locationν€λκ° μμΌλ©΄, Location μμΉλ‘ μλ μ΄λ (리λ€μ΄λ νΈ)
- μλ΅μ½λ 3xxμμ μ€λͺ
- 201 (Created) : Location κ°μ μμ²μ μν΄ μμ±λ 리μμ€ URI
- 3xx (Redirection) : Location κ°μ μμ²μ μλμΌλ‘ 리λ€μ΄λ μ νκΈ° μν λμ 리μμ€λ₯΄ κ°λ¦¬ν΄
3) Allow : νμ© κ°λ₯ν HTTP λ©μλ
- 405(Method Not Allowed)μμ μλ΅μ ν¬ν¨ν΄μΌν¨
- Allow: GET, HEAD, PUT
* μλ²μμ λ§μ΄ ꡬνμλμ΄μμ΄μ μ°Έκ³ λ§
4) Retry-After : μ μ μμ΄μ νΈκ° λ€μ μμ²μ νκΈ°κΉμ§ κΈ°λ€λ €μΌνλ μκ°
- 503(Service Unavailable) : μλΉμ€κ° μΈμ κΉμ§ λΆλ₯μΈμ§ μλ €μ€ μ μμ
- Retry-After : Fri, 31, Dec 1999 23:59:59 GMT (λ μ§ νκΈ°)
- Retry-After : 120 (μ΄λ¨μ νκΈ°)
5. μΈμ¦
(1) Authorization : ν΄λΌμ΄μΈνΈ μΈμ¦ μ 보λ₯Ό μλ²μ μ λ¬
- Authorization: Basic xxxxx
- O Auth λ± μΈμ¦λ°©λ²μ λ°λΌ ν€λμ μ΄λ€ κ°μ λ£λμ§ λ€λ¦
(2) WWW-Authenticate : 리μμ€ μ κ·Όμ νμν μΈμ¦ λ°©λ² μ μ
- 리μμ€ μ κ·Όμ νμν μΈμ¦ λ°©λ² μ μ
- 401 Unauthorized μλ΅κ³Ό ν¨κ» μ¬μ©
WWW-Authenticate: Newauth realm="apps", type=1, title="Login to \"apps\"", Basic realm="simple"
6. μΏ ν€
- Set-Cookie: μλ²μμ ν΄λΌμ΄μΈνΈλ‘ μΏ ν€ μ λ¬(μλ΅)
- Cookie: ν΄λΌμ΄μΈνΈκ° μλ²μμ λ°μ μΏ ν€λ₯Ό μ μ₯νκ³ , HTTP μμ²μ μλ²λ‘ μ λ¬
[μΏ ν€ λ―Έμ¬μ©]
1) μ²μ welcome νμ΄μ§ μ κ·Ό
2) λ‘κ·ΈμΈ
3) λ‘κ·ΈμΈ ν welcome νμ΄μ§ μ κ·Ό
* νκΈΈλμ΄ μλλΌ μλμ΄λΌκ³ ν¨
Stateless
- HTTPλ 무μν(Stateless) νλ‘ν μ½
- ν΄λΌμ΄μΈνΈμ μλ²κ° μμ²κ³Ό μλ΅μ μ£Όκ³ λ°μΌλ©΄ μ°κ²°μ΄ λμ΄μ§
- ν΄λΌμ΄μΈνΈκ° λ€μ μμ²νλ©΄ μλ²λ μ΄μ μμ²μ κΈ°μ΅νμ§ λͺ»ν¨
- ν΄λΌμ΄μΈνΈμ μλ²λ μλ‘ μνλ₯Ό μ μ§νμ§ μμ
λμ)
λͺ¨λ μμ²μ μ¬μ©μ μ 보 ν¬ν¨ -> 보μ & λΆνΈ
[μΏ ν€ μ¬μ©]
1) λ‘κ·ΈμΈ
2) λ‘κ·ΈμΈ μ΄ν welcome νμ΄μ§ μ κ·Ό
* μΏ ν€ κ°μ HTTP ν€λμ μλμΌλ‘ λ£μ΄μ 보λ
μΏ ν€
- μ) set-cookie : sessionId=abcde1234, expires=Sat,26-Dec-2020 00:00:00 GMT; path=/; domain=google.com; Secure
- μ¬μ©μ²
μ¬μ©μ λ‘κ·ΈμΈ μΈμ
κ΄κ³ μ 보 νΈλνΉ
- μΏ ν€ μ 보λ νμ μλ²μ μ μ‘λ¨
λ€νΈμν¬ νΈλν½ μΆκ° μ λ°
μ΅μνμ μ λ³΄λ§ μ¬μ© (μΈμ id, μΈμ¦ ν ν°)
μλ²μ μ μ‘νμ§ μκ³ μΉλΈλΌμ°μ λ΄λΆμ λ°μ΄ν°λ₯Ό μ μ₯νκ³ μΆμΌλ©΄ μΉ μ€ν λ¦¬μ§ (localStorage, sessionStorage) μ°Έκ³
- μ£Όμ
보μμ λ―Όκ°ν λ°μ΄ν°λ μ μ₯ X (μ£Όλ―Όλ²νΈ, μ μ©μΉ΄λ λ²νΈ λ±)
μΏ ν€ μλͺ μ£ΌκΈ°
- Set-Cookie : expires=Sat,26-Dec-2020 00:00:00 GMT
λ§λ£μΌμ΄ λλ©΄ μΏ ν€ μμ
- Set-Cookie : max-age=3600 (3600μ΄)
0,μμλ©΄ μΏ ν€ μμ
- μΈμ μΏ ν€ : λ§λ£ λ μ§ μλ΅νλ©΄ λΈλΌμ°μ μ’ λ£μκΉμ§
- μμ μΏ ν€ : λ§λ£ λ μ§ μ λ ₯νλ©΄ ν΄λΉ λ μ§κΉμ§ μ μ§
μΏ ν€ - λλ©μΈ
- ex) domain=example.org
- λͺ μ : λͺ μν λ¬Έμ κΈ°μ€ λλ©μΈ + μλΈ λλ©μΈ ν¬ν¨
domain=example.orgλ₯Ό μ§μ ν΄μ μΏ ν€ μμ±
> example.orgλ λ¬Όλ‘ μ΄κ³ dev.example.orgλ μΏ ν€ μ κ·Ό
- μλ΅ : νμ¬ λ¬Έμ κΈ°μ€ λλ©μΈλ§ μ μ©
example.orgμμ μΏ ν€ μμ±νκ³ domain μ§μ μλ΅
> example.orgμμλ§ μΏ ν€ μ κ·Ό
> dev.example.orgλ μΏ ν€ λ―Έμ κ·Ό
μΏ ν€ - κ²½λ‘
- ex) path=/home
- μ΄ κ²½λ‘λ₯Ό ν¬ν¨ν νμ κ²½λ‘ νμ΄μ§λ§ μΏ ν€ μ κ·Ό
- μΌλ°μ μΌλ‘ path=/루νΈλ‘ μ§μ
- ex)
path=/home μ§μ
--κ°λ₯--
/home
/home/level1
/home/level1/level2
--λΆκ°λ₯--
/hello
μΏ ν€ - 보μ
Secure
- httpsμΈ κ²½μ°μλ§ μ μ‘
- μλλ http https ꡬλΆνμ§ μμ
HttpOnly
- XSS 곡격 λ°©μ§
- μλ°μ€ν¬λ¦½νΈμμ μ κ·Ό λΆκ° (document.cookie)
- HTTP μ μ‘μλ§ μ¬μ©
SameSite
- XSRF 곡격 λ°©μ§
- μμ² λλ©μΈκ³Ό μΏ ν€μ μ€μ λ λλ©μΈμ΄ κ°μ κ²½μ°λ§ μΏ ν€ μ μ‘
'π¨βπ» Web Development > HTTP' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[HTTP] 7.HTTP ν€λ2 - μΊμμ μ‘°κ±΄λΆ μμ² (0) | 2023.03.04 |
---|---|
[HTTP] 6.HTTP μνμ½λ (0) | 2023.03.03 |
[HTTP] 5.HTTP λ©μλ νμ© (0) | 2023.03.03 |
[HTTP] 4.HTTP λ©μλ (0) | 2023.03.02 |
[HTTP] 3.HTTP κΈ°λ³Έ (0) | 2023.03.02 |
μ΅κ·ΌλκΈ