μλ νμΈμ!
λ²μ¨ μΉμ 7μ΄ λμμ΅λλ€!!
κ·ΈλΌ μμν΄λ³΄λλ‘ νκ² μ΅λλ€.
κ³ κ³ !!

1. HTTP ν€λ κ°μ
1-1. HTTP ν€λ
HTTP ν€λλ header-field = field-name ":" OWS field-value OWS (OWS: λμ΄μ°κΈ° νμ©) μ΄λ° νμμ κ°κ³ μμ΅λλ€.
λν, field-nameμ λμλ¬Έμ κ΅¬λ¬Έμ΄ μμ΅λλ€.
HTTP ν€λμ νΉμ§μ κ΄νμ¬ μ€λͺ νκ² μ΅λλ€.
HTTP ν€λλ μμλΌμΈ μ μΈνκ³ HTTP μ μ‘μ νμν λͺ¨λ λΆκ° μ 보λ₯Ό λ΄κ³ μμ΅λλ€.
μλ₯Ό λ€μ΄, λ©μμ§ λ°λμ λ΄μ©, λ©μμ§ λ°λμ ν¬κΈ°, μμΆ, μΈμ¦, μμ² ν΄λΌμ΄μΈνΈ, μλ² μ 보, μΊμ κ΄λ¦¬ μ 보 λ±λ± λ§μ΄μ£ .
λν, HTTP ν€λλ νμ€ ν€λκ° κ΅μ₯ν λ§μ΅λλ€.
νμ μ μμμ ν€λλ₯Ό μΆκ°ν μλ μꡬμ.
κ·ΈλΌ κ³Όκ±°μ HTTP ν€λλ μ΄λ μκΉμ?
λ°μμ μ€λͺ νλλ‘ νκ² μ΅λλ€.
1-2. RFC2616 (κ³Όκ±°μ HTTP ν€λμ HTTP BODY)
μ°μ , κ³Όκ±°μ HTTP ν€λλ₯Ό λΆλ₯ν΄λ³΄λλ‘ νκ² μ΅λλ€.
- General ν€λ: λ©μμ§ μ 체μ μ μ©λλ μ 보
- ex) Connection: close
- Request ν€λ: μμ² μ 보
- ex) User-Agent: Mozilla/5.0 (Macintosh; ..)
- Response ν€λ: μλ΅ μ 보
- ex) Server: Apache
- Entity ν€λ: μν°ν° λ°λ μ 보
- ex) Content-Type: text/html, Content-Length: 3423
κ³Όκ±°μ HTTP BODYλ μ΄λ μκΉμ?
λ©μμ§ λ³Έλ¬Έ(message body)μ μν°ν° λ³Έλ¬Έ(entity body)μ μ λ¬νλλ° μ¬μ©νμ΅λλ€.
μ¬κΈ°μ μν°ν° λ³Έλ¬Έμ μμ²μ΄λ μλ΅μμ μ λ¬ν μ€μ λ°μ΄ν°κ° λ€μ΄μμ΅λλ€.
μν°ν° ν€λλ μν°ν° λ³Έλ¬Έμ λ°μ΄ν°λ₯Ό ν΄μν μ μλ μ 보λ₯Ό μ 곡νμ΅λλ€.
μ΄λ€ μ 보λ₯Ό μ 곡νλλ©΄...
λ°μ΄ν° μ ν(html, json), λ°μ΄ν° κΈΈμ΄, μμΆ μ 보 λ±λ±μ΄μ!
κ·ΈλΌ μ΄λ¦μ΄ μ μν°ν° ν€λμΌκΉμ?
λ§ κ·Έλλ‘ μν°ν°μ κ΄λ ¨μ΄ μμ΄μ μν°ν° ν€λμμ~
κ·Έλ°λ° HTTP νμ€ μ€νμ΄ λ°λμμ΅λλ€!!
1999λ μ RFC2616μ νκΈ°κ° λκ³ , 2014λ μ RFC7230~7235κ° λ±μ₯νμ΅λλ€.
1-3. RFC723x λ³ν (νμ¬μ HTTP ν€λμ HTTP BODY)
ν€λμμ μ€ν°ν°λΌλ λ§μ μ¬λΌμ§κ³ νν(Representation)μ΄λΌλ λ§λ‘ λ°λμμ΅λλ€.
μ¬κΈ°μ ννμ νν λ©νλ°μ΄ν°(Representation Metadata)μ νν λ°μ΄ν°(Representation Data)κ° ν©μ³μ§ κ²μ λλ€.
μ΅μ λ²μ μ HTTP BODYλ₯Ό ν λ² λ΄λ³ΌκΉμ?
νμ΄λ‘λ(λ©μμ§ λ³Έλ¬Έ)μ ν΅ν΄ νν λ°μ΄ν°λ₯Ό μ λ¬ν©λλ€.
ννμ μμ²μ΄λ μλ΅μμ μ λ¬ν μ€μ λ°μ΄ν°μ΄κ΅¬μ.
νν ν€λλ νν λ°μ΄ν°λ₯Ό ν΄μν μ μλ μ 보λ₯Ό μ 곡ν©λλ€. μν°ν° ν€λμ²λΌμ!
μ΄λ€ μ 보λ₯Ό μ 곡νλλ©΄...
λ°μ΄ν° μ ν(html, json), λ°μ΄ν° κΈΈμ΄, μμΆ μ 보 λ±λ±μ΄μ!
κ·ΈλΌ ννμ κ΄ν΄μ μμΈν μ΄ν΄λ³ΌκΉμ?
2. νν
- Content-Type: νν λ°μ΄ν°μ νμ (htmlλ‘ κ°λμ§ jsonμΌλ‘ κ°λμ§... μμμΌ ν΄μ)
- Content-Encoding: νν λ°μ΄ν°μ μμΆ λ°©μ
- Content-Language: νν λ°μ΄ν°μ μμ° μΈμ΄ (νκ΅μ΄μΈμ§ μμ΄μΈμ§...)
- Content-Length: νν λ°μ΄ν°μ κΈΈμ΄
νν ν€λλ μ μ‘κ³Ό μλ΅ λ λ€ μ¬μ©ν©λλ€!
2-1. Content-Type
νν λ°μ΄ν°μ νμ μ€λͺ
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 3423
<html>
<body>...</body>
</html>
HTTP/1.1 200 OK
Content-Type: application/json (κΈ°λ³ΈμΌλ‘ UTF-8)
Content-Length: 16
{"data":"hello"}
λ―Έλμ΄ νμ κ³Ό λ¬Έμ μΈμ½λ© λ± λ€μ΄μμ΅λλ€.
μλ₯Ό λ€μ΄...
- text/html charset=utf-8
- htmlμ΄λ©΄...
- application/json
- jsonμ΄λ©΄...
- image/png
2-2. Content-Encoding
νν λ°μ΄ν° μΈμ½λ©
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Encoding: gzip
Content-Length: 521
wejflkewfjlwjflkwdjflkwjflksdjflknc,mvns,mnc23ur0892uroiwjflksndco2u8fujweklnclkwho3rujwlkewkmcl
νν λ°μ΄ν°λ₯Ό μμΆνκΈ° μν΄ μ¬μ©ν©λλ€.
λ°μ΄ν°λ₯Ό μ λ¬νλ κ³³μμ μμΆ ν μΈμ½λ© ν€λλ₯Ό μΆκ°νκ³ (λ©μμ§ λ°λ μλ λΆλΆ),
λ°μ΄ν°λ₯Ό μ½λ μͺ½μμ μΈμ½λ© ν€λμ μ λ³΄λ‘ μμΆμ ν΄μ ν©λλ€.
μλ₯Ό λ€λ©΄ gzip, deflate, identity(μμΆ μνκ³ λκ°μ΄)κ° μμ΅λλ€.
2-3. Content-Language
νν λ°μ΄ν°μ μμ° μΈμ΄
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Language: ko
Content-Length: 521
<html>
μλ νμΈμ.
</html>
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Language: en
Content-Length: 521
<html>
hello
</html>
νν λ°μ΄ν°μ μμ° μΈμ΄λ₯Ό ννν©λλ€.
μλ₯Ό λ€λ©΄ ko, en, en-US λ± μμ΅λλ€.
2-4. Content-Length
νν λ°μ΄ν°μ κΈΈμ΄
HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 5
hello
λ°μ΄νΈ(byte) λ¨μμ λλ€.
μ€μν μ μ΄ μλλ° Transfer-Encoding(μ μ‘ μ½λ©)μ μ¬μ©νλ©΄ Content-Lengthλ₯Ό μ¬μ©νλ©΄ μ λ©λλ€.
μ΄μ λ μ λ°μμ μ€λͺ νλλ‘ νκ² μ΅λλ€.
3. νμ (Contents Negotiation)
3-1. νμμ΄λ...
ν΄λΌμ΄μΈνΈκ° μ νΈνλ νν μμ²
ν΄λΌμ΄μΈνΈκ° μλ²νν μνλ ννμ ν΄λ¬λΌκ³ μμ²ν©λλ€.
κ·ΈλΌ μλ²κ° μ΅λν λ§μΆ°μ€λλ€. (μλ²κ° λͺ» λ§μΆ°μ€ μλ μμ΅λλ€.)
μ΄ κ³Όμ μ νμ(Contents Negotiation)μ΄λΌκ³ ν©λλ€.
- Accept: ν΄λΌμ΄μΈνΈκ° μ νΈνλ λ―Έλμ΄ νμ μ λ¬
- Accept-Charset: ν΄λΌμ΄μΈνΈκ° μ νΈνλ λ¬Έμ μΈμ½λ©
- Accept-Encoding: ν΄λΌμ΄μΈνΈκ° μ νΈνλ μμΆ μΈμ½λ©
- Accept-Language: ν΄λΌμ΄μΈνΈκ° μ νΈνλ μμ° μΈμ΄
νμ ν€λλ μμ² μμλ§ μ¬μ©ν©λλ€.
<Accept-Language μ μ© μ (μμ)>
μλ₯Ό λ€μ΄, λλ νκ΅μ΄ λΈλΌμ°μ λ₯Ό μ¬μ©ν©λλ€.
μ΄λ€ μΈκ΅μ΄ μ΄λ²€νΈ νμ΄μ§λ₯Ό λ³΄κ³ λ€μ΄κ°λ³΄κ³ μΆλ€κ³ μκ°ν΄μ λ€μ΄κ°λλ€.
μ΄ νμ΄μ§λ λ€μ€ μΈμ΄λ₯Ό μ§μνλ μλ²λ€μ? 1μμλ μμ΄μ΄κ³ , νκ΅μ΄λ μ§μνλ€κ³ ν©λλ€.
κ·Όλ°, ν΄λΌμ΄μΈνΈκ° νκ΅μ΄λ₯Ό μνλμ§ μμ΄λ₯Ό μνλμ§ μλ²νν μ λ³΄κ° μμ΅λλ€.
κ·Έλμ, μλ²λ κΈ°λ³Έκ°μΈ μμ΄λ‘ ν΄λΌμ΄μΈνΈνν μλ΅μ ν©λλ€.
κ·ΈλΌ ν΄λΌμ΄μΈνΈλ μμ΄κ° λμ€λκΉ λΉν©νκ³ μ½μ§ μμν©λλ€.
μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ νμ (Contents Negotiation)μ ν©λλ€.
<Accept-Language μ μ© ν (μμ)>
λ΄κ° μ΄λ€ μΈκ΅μ΄ μ΄λ²€νΈ νμ΄μ§λ₯Ό λ€μ΄κ° κ²κ³Ό κ·Έ νμ΄μ§κ° λ€μ€ μΈμ΄(κΈ°λ³Έ μμ΄, νκ΅μ΄λ μ§μ)λ₯Ό μ§μνλ κ²κΉμ§λ λκ°μ΅λλ€.
μ΄λ²μ ν΄λΌμ΄μΈνΈκ° μλ²νν λ³΄λΌ λ λ³ΈμΈμ΄ μ νΈνλ μΈμ΄λ νκ΅μ΄λΌκ³ 보λ λλ€.
μλ²λ μλ κΈ°λ³Έ μΈμ΄κ° μμ΄μ΄μ§λ§, νκ΅μ΄λ μ§μνκΈ° λλ¬Έμ Content-Languageλ₯Ό νκ΅μ΄λ‘ νκ³ , νκ΅μ΄ λ©μμ§λ‘ μλ΅μ ν©λλ€.
μ΄λ κ² κΉλνκ² ν΄κ²°μ΄ λλ κ²½μ°κ° μμ§λ§,
μ¬μ€ νμ€μ λ Ήλ‘ μμ£ ~
λ°μλ κΉλνκ² λ¨μ΄μ§μ§ μμ 볡μ‘ν μμμ λλ€.
<Accept-Language 볡μ‘ν μμ>
κ³Όμ μ λ€ λκ°κ³ μκΉμ²λΌ ν΄λΌμ΄μΈνΈκ° νκ΅μ΄λ₯Ό μ νΈνλ€κ³ μλ²νν μ μ‘ν©λλ€.
κ·Όλ° μ΄ μλ²λ λ€μ€ μΈμ΄ μ§μ μλ²μ΄μ§λ§, κΈ°λ³Έ μΈμ΄λ λ μΌμ΄μ΄κ³ μμ΄λ₯Ό μ§μνλ€κ³ νλ€μ?
κ·Έλ κ² λλ©΄ μλ²λ νκ΅μ΄λ₯Ό μ§μνμ§ μκΈ° λλ¬Έμ ν΄λΌμ΄μΈνΈνν λ μΌμ΄λ‘ 보λ λλ€.
κ·Όλ° μμ§ν λ μΌμ΄λ‘ μ€λ©΄ λꡬλ λΉν©νμ§ μμκΉμ? κ·Έλλ§ μμ΄κ° λμλ° μ λ μΌμ΄λκ±°!!
κ·Έλμ μ°μ μμλ₯Ό λ‘λλ€.
μ°μ μμμ κ΄ν΄μλ λ°μμ μ€λͺ νλλ‘ νκ² μ΅λλ€.
3-2. νμκ³Ό μ°μ μμ1 - μ°μ μμμ κ΄νμ¬
Quality Values(q) κ° μ¬μ©
0μμ 1κΉμ§ μμΌλ©°, μ«μκ° ν΄ μλ‘ λμ μ°μ μμλ₯Ό λ»ν©λλ€.
μλ΅νλ©΄ μ°μ μμλ 1 μ λλ€.
GET /event
Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
μλ₯Ό λ€μ΄μ Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7κ° μμ΅λλ€.
μ¬κΈ°μμ μ°μ μμκ° μ΄λ»κ² λ κΉμ?
1μμλ qλ₯Ό μλ΅ν ko-KRμ΄ λꡬμ.
2μμλ κ·Έ λ€μ μ«μκ° λμ ko;q=0.9 μ λλ€.
3μμλ en-US;q=0.8μ΄κ³ , λ§μ§λ§μΌλ‘ 4μμλ en;q=0.7 μ λλ€.
λ°μμ μμλ₯Ό μμΈν λ΄λ³΄λλ‘ νκ² μ΅λλ€.
<Accept-Language 볡μ‘ν μμ>
μκΉμ κ°μ μν©μμ μ΄λ²μ ν΄λΌμ΄μΈνΈκ° μ°μ μμλ₯Ό 맀겨μ μλ²νν μμ²νμ΅λλ€.
κ·Έλ¬λ©΄ μλ²λ ν΄λΌμ΄μΈνΈκ° λ³΄λΈ μ°μ μμλ₯Ό νμΈνκ³ λ³ΈμΈμ΄ μ§μνλ μΈμ΄ μ€μμ μ μΌ μ°μ μμκ° λμ μΈμ΄λ‘ μλ΅μ ν©λλ€.
(μλ²: μ~ λ μΌμ΄λ³΄λ€ μμ΄λ₯Ό λ μ νΈνλꡬλ!)
3-3. νμκ³Ό μ°μ μμ2 - ꡬ체μ μΈ κ²μ΄ μ°μ
ꡬ체μ μΌμλ‘ μ°μ μμκ° λμ΅λλ€.
μ¦, λ§μ΄ λν μΌν μλ‘ μ°μ μμκ° λμ΅λλ€.
GET /event
Accept: text/*, text/plain, text/plain;format=flowed, */*
μλ₯Ό λ€μ΄μ Accept: text/*, text/plain, text/plain;format=flowed, */*κ° μμ΅λλ€.
1μμλ μ μΌ λν μΌν text/plain;format=flowedμ΄κ³ ,
2μμλ κ·Έ λ€μμΌλ‘ λν μΌν text/plain μ λλ€.
3μμλ text/*μ΄κ³ , 4μμλ μ μΌ κ°λ¨ν */* μ λλ€.
3-4. νμκ³Ό μ°μ μμ3 - λ―Έλμ΄ νμ λ§μΆκΈ°
ꡬ체μ μΈ κ²μ κΈ°μ€μΌλ‘ λ―Έλμ΄ νμ μ λ§μΆ₯λλ€.
Accept: text/*;q=0.3, text/plain;q=0.7, text/html;level=1, text/html;level=2;q=0.4, */*;q=0.5
4. μ μ‘ λ°©μ
μ μ‘ λ°©μμ μ΄ 4κ°μ§κ° μμ΅λλ€.
- λ¨μ μ μ‘
- μμΆ μ μ‘
- λΆν μ μ‘ (μͺΌκ°μ μ μ‘)
- λ²μ μ μ‘ (μνλ λ²μλ₯Ό μ§μ ν΄μ μ μ‘)
4-1. λ¨μ μ μ‘
Content-Length
Content κΈΈμ΄λ₯Ό μ μ μμ λ μλλ€.
κ·Έλ₯ ν΄λΌμ΄μΈνΈκ° ν λ²μ μμ²νλ©΄ μλ²κ° λ¨μνκ² μλ΅νλ νμμ λλ€.
4-2. μμΆ μ μ‘
Content-Encoding
ν΄λΌμ΄μΈνΈκ° λκ°λ₯Ό μμ²νλ©΄ μλ²μμ μ©λμ μμΆν΄μ ν΄λΌμ΄μΈνΈνν μ μ‘ν©λλ€.
무쑰건 Content-Encodingμ λ£μ΄μΌ ν©λλ€.
4-3. λΆν μ μ‘
Transfer-Encoding
ν΄λΌμ΄μΈνΈμμ λκ°λ₯Ό 보λ΄λ©΄ μλ²μμ λΆν ν΄μ μ μ‘ν©λλ€.
μ¦, μλ²μμ 5 byteλ₯Ό λ¨Όμ 보λ΄λ©΄ ν΄λΌμ΄μΈνΈμμ κ·Έ 5 byteλ₯Ό λ¨Όμ λ³΄κ³ , λ€μκ±° 5 byteλ₯Ό 보λ΄λ©΄ ν΄λΌμ΄μΈνΈκ° κ·Έ λ€μκ±° 5 byteλ₯Ό λ³΄κ³ κ·Έλ° νμμ λλ€.
μ£Όλ‘ μ©λμ΄ ν΄ λ μ¬μ©ν©λλ€.
μκΉ μμμλ μκΈ°νλλ° λΆν μ μ‘(Transfer-Encoding)μλ Content-Lengthλ₯Ό λ£μΌλ©΄ μ λ©λλ€.
μλνλ©΄, Content-Lengthκ° μ²μμλ μμμ΄ μ λκΈ° λλ¬Έμ λλ€.
λν, chunkedλ§λ€ κΈΈμ΄κ° λ€ μ°μ¬μ Έ μκΈ° λλ¬Έμ λλ€.
4-4. λ²μ μ μ‘
Range, Content-Range
ν΄λΌμ΄μΈνΈκ° λ²μλ₯Ό μ ν΄μ μλ²νν 보λ΄λ©΄ μλ²κ° λ²μμ λ§κ² μ°Ύμμ μ μ‘ν©λλ€.
5. μΌλ° μ 보
μΌλ° μ 보λ 5κ°μ§λ‘ λΆλ₯νμ΅λλ€.
- From: μ μ μμ΄μ νΈμ μ΄λ©μΌ μ 보
- Referer: μ΄μ μΉ νμ΄μ§ μ£Όμ
- User-Agent: μ μ μμ΄μ νΈ μ ν리μΌμ΄μ μ 보
- Server: μμ²μ μ²λ¦¬νλ Origin μλ²μ μννΈμ¨μ΄ μ 보
- Date: λ©μμ§κ° μμ±λ λ μ§
5-1. From
μ μ μμ΄μ νΈμ μ΄λ©μΌ μ 보
Fromμ μΌλ°μ μΌλ‘ μ μ¬μ©λμ§λ μκ³ , μ¬μ©νλ€λ©΄ μ£Όλ‘ κ²μ μμ§ κ°μ κ³³μμ μ¬μ©ν©λλ€.
μμ²μμ μ¬μ©ν©λλ€.
5-2. Referer
μ΄μ μΉ νμ΄μ§ μ£Όμ
νμ¬ μμ²λ νμ΄μ§μ μ΄μ μΉ νμ΄μ§ μ£Όμλ‘, νμ¬ λ§μ΄ μ¬μ©λκ³ μμ΅λλ€.
A->Bλ‘ μ΄λνλ κ²½μ°, Bλ₯Ό μμ²ν λ Referer: Aλ₯Ό ν¬ν¨ν΄μ μμ²μ ν΄μΌ ν©λλ€.
λν, Refererλ₯Ό μ¬μ©ν΄μ μ μ κ²½λ‘ λΆμμ΄ κ°λ₯νλ©°, λ°μ΄ν° λΆμν λ νΉν λ§μ΄ μ¬μ©ν©λλ€.
Fromμ²λΌ μμ²μμ μ¬μ©ν©λλ€.
- μ°Έκ³ !! μλ μμ΄ λ¨μ΄λ‘ λ°μ§λ©΄ referrerμ΄ λ§μ΅λλ€. κ·Όλ° μλ μ μ€νλ‘ μ°λ©΄μ μ΄λ κ² κ³μ μ°λ€λ³΄λ λ°κΎΈλκ² λ νλ€μ΄μ Έμ μ΄λ κ² referer μ€νλ‘ μ¬μ©νκ² λμμ΅λλ€. (μ°Έκ³ λ§ νκ³ μ νμλ X)
<μμ>
1. ꡬκΈμμ hello κ²μ
2. κ·Έλ₯ μ무 νμ΄μ§ λ€μ΄κ° (μλ₯Ό λ€μ΄ μ§μλ°±κ³Όμ λ€μ΄κ°)
3. λ€μ΄κ°μ μ€λ₯Έμͺ½ ν΄λ¦ν΄μ μ«λΌλ½ μμΈν λμμλ κ² λ³΄λ€ λ³΄λ©΄ refererμ΄ κ΅¬κΈμΈ κ²μ μ μ μμ΅λλ€.
=> μ΄μ νμ΄μ§κ° ꡬκΈμ΄μλ€λ κ²μ λ»ν©λλ€.
5-3. User-Agent
μ μ μμ΄μ νΈ μ ν리μΌμ΄μ μ 보
ν΄λΌμ΄μΈνΈμ μ ν리μΌμ΄μ μ 보 κ²Έ μΉ λΈλΌμ°μ μ 보μ λλ€.
μ¬μ©μλ€μ΄ μ΄λ€ λΈλΌμ°μ μ λ§μ΄ λ€μ΄μ€λκ±΄μ§ νμ κ°λ₯ν ν΅κ³ μ λ³΄λ‘ μ°μ΄κΈ°λ ν©λλ€.
λν, λ‘κ·Έλ₯Ό νΌμ±ν΄λ³΄λ©΄ μ΄λ€ μ’ λ₯μ λΈλΌμ°μ μμ μ₯μ κ° λ°μνλμ§ νμ ν μ μμ΅λλ€.
Fromκ³Ό Refererμ²λΌ μμ²μμ μ¬μ©ν©λλ€.
<μμ>
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
5-4. Server
μμ²μ μ²λ¦¬νλ ORIGIN μλ²μ μννΈμ¨μ΄ μ 보
ORIGIN μλ²λ...
μλ http μμ²μ 보λ΄λ©΄ μ€κ°μ μ¬λ¬ νλ‘μ μλ²λ€μ κ±°μΉκ² λ©λλ€.
κ·Έλμ μ€μ λμ μμ²μ΄ λμ°©ν΄μ http μλ΅μ ν΄μ£Όλ μ§μ§ μλ²μ΄μ λ§μ§λ§ μλ²μ λλ€.
μκΉμ λ¬λ¦¬ μλ΅μμ μ¬μ©ν©λλ€.
<μμ>
- Server: Apache/2.2.22 (Debian)
- server: nginx
5-5. Date
λ©μμ§κ° λ°μν λ μ§μ μκ°
- <μμ> Date: Mon, 21 May 2001 04:01:10 GMT
- μλ΅μμ μ¬μ©ν©λλ€. (κ³Όκ±°μ μμ²μλ μ¬μ©)
6. νΉλ³ν μ 보
νΉλ³ν μ 보λ 4κ°μ§λ‘ λΆλ₯ν΄λ΄€μ΅λλ€.
- Host: μμ²ν νΈμ€νΈ μ 보(λλ©μΈ)
- Location: νμ΄μ§ 리λ€μ΄λ μ
- Allow: νμ© κ°λ₯ν HTTP λ©μλ
- Retry-After: μ μ μμ΄μ νΈκ° λ€μ μμ²μ νκΈ°κΉμ§ κΈ°λ€λ €μΌ νλ μκ°
6-1. Host
μμ²ν νΈμ€νΈ μ 보(λλ©μΈ)
GET /search?q=hello&hl=ko HTTP/1.1
Host: www.google.com
μμ²μμ μ¬μ©νλ©°, νμκ°μ λλ€. μ§μ§ μ€μ!!
νλμ μλ²κ° μ¬λ¬ λλ©μΈμ μ²λ¦¬ν΄μΌ ν λ μ¬μ©ν©λλ€.
μ¦, νλμ IP μ£Όμμ μ¬λ¬ λλ©μΈμ΄ μ μ©λμ΄ μμ λ μ¬μ©ν©λλ€.
μ΄κ² λ¬΄μ¨ λ§μΈμ§μ κ΄ν΄μλ λ°μ κ·Έλ¦Όμ ν΅ν΄ μ€λͺ νλλ‘ νκ² μ΅λλ€.
μ΄ μλ² μμ μ¬λ¬ κ°μ μ ν리μΌμ΄μ μ΄ μ€μ λ€λ₯Έ λλ©μΈμΌλ‘ ꡬλλ μ μμ΅λλ€.
κ·Έλ°λ° λ§μ½μ Hostκ° μμΌλ©΄ λ¬΄μ¨ λ¬Έμ κ° μκΈΈκΉμ?
λ¨Όμ ν΄λΌμ΄μΈνΈκ° /helloλΌκ³ μμ²μ 보λ λλ€.
μλ² μ μ₯μμλ /helloκ° aaa.comκ³Ό κ΄λ ¨λ μ ν리μΌμ΄μ μ λ€μ΄κ°μΌν μ§ bbb.comμ κ΄λ ¨λ μ ν리μΌμ΄μ μ λ€μ΄κ°μΌν μ§ ccc.comμ κ΄λ ¨λ μ ν리μΌμ΄μ μ λ€μ΄κ°μΌν μ§ λͺ¨λ¦ λλ€ (κ΅¬λΆ λ°©λ²X).
μλνλ©΄ IPλ‘λ§ ν΅μ νκΈ° λλ¬Έμ λλ€.
μ΄μ°½κΈ°μ μ΄λ° λ¬Έμ κ° λ§μμ λμ€μλ Hostλ 무쑰건 λ£μ΄μΌλΌ!! κ° λμμ΅λλ€.
μμ κ·Έλ¦Όμ λ΄λ³ΌκΉμ?
μ΄λ²μ Hostλ₯Ό λ£μμ΅λλ€.
ν΄λΌμ΄μΈνΈκ° Host ν€λ νλλ₯Ό λ£μ΄μ μλ²νν μ λ¬νλ©΄ μλ²κ° "μ! μ΄κ±΄ aaa.comμΌλ‘ λ€μ΄κ°λꡬλ!"νκ³ μμμ±λλ€.
6-2. Location
νμ΄μ§ 리λ€μ΄λ μ
μΉ λΈλΌμ°μ λ 3xx μλ΅μ κ²°κ³Όμ Location ν€λκ° μμΌλ©΄, Location μμΉλ‘ μλ μ΄λν©λλ€.
μ΄κ±Έ 리λ€μ΄λ νΈλΌκ³ νκ³ , μ μΉμ μλ΅μ½λ 3xx λΆλΆμμ μ€λͺ νμμ΅λλ€.
- 201 (Created): Location κ°μ μμ²μ μν΄ μμ±λ 리μμ€ URI μ λλ€.
- 3xx (Redirection): Location κ°μ μμ²μ μλμΌλ‘ 리λ€μ΄λ μ νκΈ° μν λμ 리μμ€λ₯Ό κ°λ¦¬ν΅λλ€.
6-3. Allow
νμ© κ°λ₯ν HTTP λ©μλ
- 405 (Method Not Allowed)μμ μλ΅μ ν¬ν¨ν΄μΌ ν©λλ€.
λ§μ½μ URL κ²½λ‘λ μλλ° POSTλ₯Ό νμ©νμ§ μμΌλ©΄ 405λ₯Ό ν΅ν΄ μλ €μ€μΌν©λλ€.
"μ°λ¦¬λ GET, HEAD, PUTλ§ νμ© κ°λ₯ν΄!"
κ·Έλ°λ° μ΄κ±΄ μ€μ λ‘ μλ²μμ λ§μ΄ ꡬννμ§λ μμ΅λλ€.
6-4. Retry-After
μ μ μμ΄μ νΈκ° λ€μ μμ²μ νκΈ°κΉμ§ κΈ°λ€λ €μΌ νλ μκ°
- 503 (Service Unavailable): μλΉμ€κ° μΈμ κΉμ§ λΆλ₯μΈμ§ μλ €μ€ μ μμ΅λλ€.
- Retry-After: Fri, 31 Dec 1999 23:59:59 GMT (λ μ§ νκΈ°)
- Retry-After: 120 (μ΄λ¨μ νκΈ°)
μ¬μ©νκΈ°μ μ½μ§ μμ΅λλ€.
7. μΈμ¦ (Authorization)
- Authorization ν€λ: ν΄λΌμ΄μΈνΈ μΈμ¦ μ 보λ₯Ό μλ²μ μ λ¬ν©λλ€.
- Authorization: Basic xxxxxxxxxxxxxxxxxxxx (μΈμ¦κ³Ό κ΄λ ¨λ κ°)
- WWW-Authenticate: 리μμ€ μ κ·Ό μ νμν μΈμ¦ λ°©λ²μ μ μν©λλ€.
- 401 Unauthorized μλ΅κ³Ό ν¨κ» μ¬μ©ν©λλ€. (401 μ€λ₯ λλ©΄ μ΄κ±° λ£μ΄μ€μΌ ν¨)
- WWW-Authenticate: Newauth realm="apps", type=1, title="Login to \"apps\"", Basic realm="simple"
8. μΏ ν€πͺ
μΏ ν€λ μ΄λ κ² 2κ°μ ν€λλ₯Ό μ¬μ©ν©λλ€.
- Set-Cookie: μλ²μμ ν΄λΌμ΄μΈνΈλ‘ μΏ ν€ μ λ¬(μλ΅)ν©λλ€.
- Cookie: ν΄λΌμ΄μΈνΈκ° μλ²μμ λ°μ μΏ ν€λ₯Ό μ μ₯νκ³ , HTTP μμ² μ μλ²λ‘ μ λ¬ν©λλ€.
8-1. μΏ ν€ λ―Έμ¬μ© ν λ‘κ·ΈμΈ κ³Όμ πͺ
1. μ²μ welcome νμ΄μ§μ μ κ·Ό (λ‘κ·ΈμΈX)
μ¬μ©μκ° /welcome νμ΄μ§μ μ κ·Όν©λλ€.
κ·Έλ¬λ©΄ μλ²μμ "μλ νμΈμ. μλ"μ΄λΌκ³ μλ΅μ ν©λλ€.
2. λ‘κ·ΈμΈ
μ¬μ©μκ° POSTλ‘ μ μ μ 보λ₯Ό 보λ΄μ λ‘κ·ΈμΈμ ν©λλ€.
μλ²μμ "μμ€λμ΄ λ‘κ·ΈμΈνμ΅λλ€."λ‘ μλ΅μ ν©λλ€.
μ΄λ κ² λλ©΄ λ‘κ·ΈμΈμ΄ λ html νλ©΄μ΄ λμ΅λλ€.
3. λ‘κ·ΈμΈ μ΄ν welcome νμ΄μ§μ μ κ·Ό
μ¬μ©μλ μμ€λΌλ μ΄λ¦μΌλ‘ λ‘κ·ΈμΈμ νκ³ λ€μ /welcome νμ΄μ§μ μ κ·Όν©λλ€.
κ·Έλ°λ°, μλ²μμ λ‘κ·ΈμΈν μ¬μ©μμΈμ§ μλμ§ κ΅¬λΆμ λͺ»νλ€μ..?
λ©μ²μ΄..
"μλ νμΈμ. μμ€"κ° μλ "μλ νμΈμ. μλ"μΌλ‘ μλ΅μ ν©λλ€.
μμ μμ μ λν μ΄μ κ° λκΉμ?
κ·Έμ μ λ°°μ λ 무μν νλ‘ν μ½ Stateless κΈ°μ΅λμλμ?
httpλ 무μν νλ‘ν μ½ μ λλ€.
κ·Έλμ μμ² μλ΅μ μ£Όκ³ λ°μΌλ©΄ μ°κ²°μ΄ λμ΄μ§κ³ , ν΄λΌμ΄μΈνΈκ° λ€μ μμ²μ νλ©΄ μλ²λ μ΄μ μμ²μ κΈ°μ΅νμ§ λͺ»ν©λλ€.
μ΄ μ΄μ λλ¬Έμ μλ²κ° μμ€λΌλ μ΄λ¦μ κΈ°μ΅νμ§ λͺ»νκ³ "μλ νμΈμ. μλ"μ΄λΌκ³ μλ΅μ ν κ²μ λλ€.
8-1(1). λμπͺ
μμ μμ μ λν λμμ΄ μκΈ΄ ν©λλ€.
λͺ¨λ μμ²μ μ¬μ©μ μ 보λ₯Ό ν¬ν¨νλ κ²μΈλ°μ.
λ°μ κ·Έλ¦Όμ²λΌ λ§μ΄μ£ .
κ·Έλ°λ° μ΄ λμμ μ¬κ°ν λ¬Έμ κ° μμ΅λλ€.
λͺ¨λ μμ²κ³Ό λ§ν¬μ μ¬μ©μ μ 보λ₯Ό λ€ ν¬ν¨..?
μ΄λ κ² λͺ¨λ μμ²κ³Ό λ§ν¬μ μ¬μ©μ μ 보λ₯Ό λ€ ν¬ν¨ν κ²½μ°
보μμλ λ¬Έμ κ° μκΈ°κ³ κ°λ°λ νλ€μ΄μ§λλ€.
κ°λ°μκ° λͺ¨λ μμ²μ μ¬μ©μ μ 보λ₯Ό μΌμΌμ΄ λ€ λ£μ΄μΌ νλκΉμ£ ~ κ°κ³ μμ λλ€.
λΈλΌμ°μ λ₯Ό μμ ν μ’ λ£νκ³ λ€μ μ΄λ©΄ μ΄λ»κ² λ κΉμ?
μμ¦μ μΉ μ€ν 리μ§κ° μμ΄μ κ±°κΈ°μ μ μ₯μ νλ©΄ λκΈ΄ νμ§λ§...
κ°λ°μκ° μ΄κ±Έ μΈμ λ€ κ°λ°νκ³ μ μ₯νκ³ μΌμΌμ΄ λ€ ν κΉμ..?
μλ λΆν° μ΄λ° λ¬Έμ κ° μμ΄μ μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ μΏ ν€πͺλΌλ κ°λ μ λμ νμ΅λλ€.
8-2. μΏ ν€ μ¬μ© ν λ‘κ·ΈμΈ κ³Όμ πͺ
1. λ‘κ·ΈμΈ
μ¬μ©μκ° μμ€λΌλ μ΄λ¦μΌλ‘ POST λ©μλλ₯Ό μ¬μ©ν΄μ λ‘κ·ΈμΈμ ν©λλ€.
μλ²λ μμ€λΌλ μ¬μ©μμ μ 보λ₯Ό μΏ ν€μ λ£μ΅λλ€. (μΏ ν€ ν€λλ₯Ό λ§λ€μ΄μ μλ΅ν©λλ€.)
κ·Έλ¬λ©΄ μΉ λΈλΌμ°μ λ΄λΆμ μΏ ν€ μ μ₯μκ° μμ΄μ κ·Έ μ μ₯μμ μμ€λΌλ μ¬μ©μμ κ°μ μ μ₯ν©λλ€.
2. λ‘κ·ΈμΈ μ΄ν welcome νμ΄μ§ μ κ·Ό
μ¬μ©μκ° λ‘κ·ΈμΈμ νκ³ /welcome νμ΄μ§μ μ κ·Όν©λλ€.
μΉ λΈλΌμ°μ λ μ¬μ©μκ° μλ²νν μμ²μ λ³΄λΌ λλ§λ€ μλμΌλ‘ μΏ ν€λ₯Ό λ€μ Έμ μΏ ν€κ°μ 무쑰건 κΊΌλ΄κ³ "Cookie: ~~" ν€λλ₯Ό λ§λ€μ΄μ μλ²νν 보λ λλ€.
κ·Έλ¬λ©΄ μλ²λ μΏ ν€λ₯Ό μ΄μ΄μ μ¬μ©μμ μ 보λ₯Ό νμ ν μ μκ² λ©λλ€.
<λͺ¨λ μμ²μ μΏ ν€ μ 보 μλ ν¬ν¨>
μ§μ ν μλ²μ λν΄μλ μΉ λΈλΌμ°μ κ° μΏ ν€λ₯Ό μλμΌλ‘ λ½μλ΄μ λ€ λ³΄λ΄μ€λλ€.
μΏ ν€ λ§€μ»€λμ¦μΌλ‘ λ€ ν΄κ²°μ΄ λλ€λ κ²μ΄μ£ .
κ·Έλ°λ° μ΄λ°μμΌλ‘ μ¬μ©μ μ 보λ₯Ό λ€ λ³΄λ΄λ©΄ 보μμ λ¬Έμ κ° μκΉλλ€.
κ·Έλμ μ΄κ²μ μ μ½νλ λ°©λ²μ΄ μμ΅λλ€.
8-3. μΏ ν€ μ μ½νλ λ°©λ²πͺ
- μΏ ν€λ₯Ό μλ²μμ μΈν
ν λ
- ex) set-cookie: sessionId=abcde1234; expires=Sat, 26-Dec-2020 00:00:00 GMT; path=/; domain=.google.com; Secure
- μ¬μ©μ²
- μ¬μ©μ λ‘κ·ΈμΈ μΈμ κ΄λ¦¬ (μ¬μ©μ μ 보λ₯Ό κ·Έλλ‘ μΏ ν€λ‘ μ μ₯νλ κ²μ μν -> μλ²μμ μΈμ IDλ₯Ό λ§λ€μ΄ κ΄λ¦¬)
- κ΄κ³ μ 보 νΈλνΉ (μ΄ μΉ λΈλΌμ°μ μ°λ μ¬λμ΄ μ΄λ° κ΄κ³ λ₯Ό 보λꡬλ.. νκ³ νΈλνΉ ν λ μ¬μ©)
- μΏ ν€ μ 보λ νμ μλ²μ μ μ‘λ©λλ€.
- λ¨μ : λ€νΈμν¬ νΈλν½ μΆκ° μ λ° (μ 보λ€μ κ³μ μ μ‘ν΄μ)
- κ·Έλμ.. μ΅μνμ μ λ³΄λ§ μ¬μ©ν©λλ€. (μΈμ id, μΈμ¦ ν ν° μ λ)
- λν, μλ²μ μ μ‘νμ§ μκ³ μΉ λΈλΌμ°μ λ΄λΆμ λ°μ΄ν°λ₯Ό μ μ₯νκ³ μΆμΌλ©΄ μΉ μ€ν 리μ§λ₯Ό μ¬μ©ν©λλ€.
(μΏ ν€λ μΈν νλ©΄ λͺ κ°κ° λλ κ³μ μλμΌλ‘ μ μ‘μ΄ λκΈ° λλ¬Έμ μΉ μ€ν 리μ§λ μ΄μ©ν΄μΌ ν©λλ€.)
(μ κ·Έλ¬λ©΄ λ€νΈμν¬ λΆνκ° μ¬ν΄μ§ μλ..?γ·γ·)
- μ£Όμν μ β οΈ
- 보μμ λ―Όκ°ν λ°μ΄ν°λ μ μ₯νλ©΄ μ λ©λλ€. (μ£Όλ―Όλ²νΈ, μ μ©μΉ΄λ λ²νΈ λ±)
8-4. μΏ ν€ - μλͺ μ£ΌκΈ°πͺ
Expires, max-age
μμ μ μ½νλ λ°©λ²μμ 맨 첫 μ€μ μμλ‘ μ μκ±° 보μ΄μλμ?
κ±°κΈ°μμ expiresμ ν΄λΉνλ λΆλΆμ κ΄ν μ€λͺ μ λλ€.
μΏ ν€λ₯Ό 무기νμΌλ‘ 보κ΄ν μλ μκΈ° λλ¬Έμ μμ΅λλ€.
- Set-Cookie: expires=Sat, 26 Dec-2020 04:39:21 GMT (λ μ§ λ¨μ)
- λ§λ£μΌμ΄ λλ©΄ μΏ ν€ μμ
- Set-Cookie: max-age=3600 (3600μ΄, μ΄λ¨μ)
- 0μ΄λ μμλ₯Ό μ§μ νλ©΄ μΏ ν€ μμ
- μΈμ
μΏ ν€: λ§λ£ λ μ§λ₯Ό μλ΅νλ©΄ λΈλΌμ°μ μ’
λ£μ κΉμ§λ§ μ μ§ν©λλ€.
- μ μμ κ»λ€κ° ν€λ©΄ λ‘κ·ΈμΈμ λ€μ ν΄μΌνλ κ²..?
- μμ μΏ ν€: λ§λ£ λ μ§λ₯Ό μ λ ₯νλ©΄ ν΄λΉ λ μ§κΉμ§ μ μ§ν©λλ€.
8-5. μΏ ν€ - λλ©μΈπͺ
Domain
μΏ ν€κ° μ무 μ¬μ΄νΈ λ€μ΄κ° λλ§λ€ μκΈ°λ©΄ ν°μΌμ΄ λ©λλ€. -> λλ©μΈ μ§μ κ°λ₯
- ex) domain=example.org
- λͺ
μ: λͺ
μν λ¬Έμ κΈ°μ€ λλ©μΈ + μλΈ λλ©μΈ ν¬ν¨ λ€ μ μ‘ν©λλ€.
- ex) domain=example.orgλ₯Ό μ§μ ν΄μ μΏ ν€ μμ±
- example.orgλ λͺ°λ‘ μ΄κ³ , dev.example.orgλ μΏ ν€ μ κ·Ό
- ex) domain=example.orgλ₯Ό μ§μ ν΄μ μΏ ν€ μμ±
- μλ΅: νμ¬ λ¬Έμ κΈ°μ€ λλ©μΈλ§ μ μ©ν©λλ€.
- example.orgμμ μΏ ν€λ₯Ό μμ±νκ³ domain μ§μ μ μλ΅ν©λλ€.
- example.orgμμλ§ μΏ ν€κ° μ κ·Όνκ³ , dev.example.orgλ μΏ ν€κ° μ κ·Όνμ§ μμ΅λλ€.
- μ¦, νμ λλ©μΈμμλ μ κ·Όνμ§ μμ΅λλ€.
- example.orgμμ μΏ ν€λ₯Ό μμ±νκ³ domain μ§μ μ μλ΅ν©λλ€.
8-6. μΏ ν€ - κ²½λ‘πͺ
path
μ°μ λλ©μΈμ νν°λ§νκ³ , κ·Έ λ€μμ κ²½λ‘λ‘ νν°λ§ν©λλ€.
- ex) path=/home
- μ΄ κ²½λ‘λ₯Ό ν¬ν¨ν νμ κ²½λ‘ νμ΄μ§λ§ μΏ ν€κ° μ κ·Όν©λλ€.
- μΌλ°μ μΌλ‘ path=/루νΈλ‘ μ§μ ν©λλ€.
- ex) path=/home μ§μ ν κ²½μ°
- /home -> κ°λ₯
- /home/level1 -> κ°λ₯
- /home/level1/level2 -> κ°λ₯
- /hello -> λΆκ°λ₯ (λ λ²¨μ΄ λ§μ§ μμμ μΏ ν€κ° μ λ¬λμ§ μμ΅λλ€.)
8-7. μΏ ν€ - 보μπͺ
Secure, HttpOnly, SameSite
- Secure
- μΏ ν€λ http, httpsλ₯Ό ꡬλΆνμ§ μκ³ μ μ‘ν©λλ€.
- Secureλ₯Ό μ μ©νλ©΄ httpsμΈ κ²½μ°μλ§ μ μ‘ν©λλ€.
- HttpOnly
- XSS 곡격μ λ°©μ§ν©λλ€.
- μλ°μ€ν¬λ¦½νΈμμ μ κ·Ό λΆκ°ν©λλ€.(document.cookie) (μλλ μ κ·Ό κ°λ₯ν©λλ€.)
- HTTP μ μ‘μλ§ μ¬μ©ν©λλ€.
- SameSite
- XSRF 곡격μ λ°©μ§ν©λλ€.
- μμ² λλ©μΈκ³Ό μΏ ν€μ μ€μ λ λλ©μΈμ΄ κ°μ κ²½μ°μλ§ μΏ ν€λ₯Ό μ μ‘ν©λλ€. (κΈ°λ₯ μ μ©λ μ§ λͺ λ μ λ¨.)
μΉμ 7μ΄ λμ΄ λ¬μ΄μ¬
μκ°λ³΄λ€ 지 λ§μ΄ μΌλ€μ©γ γ γ γ γ
μΉμ 8μ΄ HTTP λ§μ§λ§μ΄λλλ€~~
μΉμ 8 λ€μμ Spring κΈ°λ³Έμ΄ μ°Ύμμ¬ μμ π»
κ·ΈλΌ μλ½~~

'STUDYπ' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[Spring κΈ°λ³Έ] 1. κ°μ²΄ μ§ν₯ μ€κ³μ μ€νλ§ (2) | 2025.03.19 |
---|---|
[HTTP] 8. HTTP ν€λ2 - μΊμμ μ‘°κ±΄λΆ μμ² (1) | 2025.03.13 |
[HTTP] 6. HTTP μν μ½λ (0) | 2025.03.06 |
[HTTP] 5. HTTP λ©μλ νμ© (0) | 2025.03.03 |
[HTTP] 4. HTTP λ©μλ (0) | 2025.03.02 |