https://learn.dreamhack.io/199
μ»΄ν¨ν°μ ν΅μ ν λλ λΉκ΅μ μ격ν νλ‘ν μ½μ μ¬μ©ν΄μΌ νλ€.
λ§μ μ»΄ν¨ν° ν΅μ νλ‘ν μ½μ κ° ν΅μ μ£Όμ²΄κ° κ΅ννλ λ°μ΄ν°(μ΄ν λ©μμ§)λ₯Ό λͺ νν ν΄μν μ μλλ‘ λ¬Έλ²(syntax)μ ν¬ν¨νλ€. μΌλ°μ μΌλ‘ μ΄ λ¬Έλ²μ μ΄κΈλλ λ©μμ§λ μλͺ» μ μ‘λ κ²μΌλ‘ μ·¨κΈνμ¬ λ¬΄μλλ€.
νμ¬κΉμ§ μ μ λ νμ€ ν΅μ νλ‘ν μ½μλ λ€νΈμν¬ ν΅μ μ κΈ°μ΄κ° λλ TCP/IP, μΉ μ ν리μΌμ΄μ
μ΄ μ¬μ©νλ HTTP, νμΌμ μ£Όκ³ λ°μ λ μ¬μ©νλ FTP λ± λ§€μ° λ§μ μ’
λ₯κ° μλ€.
HTTP
HTTP(Hyper Text Transfer Protocol)λ μλ²μ ν΄λΌμ΄μΈνΈμ λ°μ΄ν° κ΅νμ μμ²(Request)κ³Ό μλ΅(Response) νμμΌλ‘ μ μν νλ‘ν μ½μ΄λ€.
HTTPμ κΈ°λ³Έ λ©μ»€λμ¦μ ν΄λΌμ΄μΈνΈκ° μλ²μκ² μμ²νλ©΄, μλ²κ° μλ΅νλ κ²μ΄λ€. μΉ μλ²λ HTTP μλ²λ₯Ό HTTP μλΉμ€ ν¬νΈμ λκΈ°μν¨λ€. μ΄ ν¬νΈλ μΌλ°μ μΌλ‘ TCP/80 λλ TCP/8080μ΄λ€. ν΄λΌμ΄μΈνΈκ° μλΉμ€ ν¬νΈμ HTTP μμ²μ μ μ‘νλ©΄, μ΄λ₯Ό ν΄μνμ¬ μ μ ν μλ΅μ λ°ννλ€.
HTTP λ©μμ§
HTTP λ©μμ§μλ ν΄λΌμ΄μΈνΈκ° μ μ‘νλ HTTP μμ², κ·Έλ¦¬κ³ μλ²κ° λ°ννλ HTTP μλ΅μ΄ μλ€.
κΈ°λ₯κ³Ό μΈλΆ ꡬ쑰μμλ μ°¨μ΄κ° μμ§λ§, ν¬κ² 보면 μ΄λ€μ 곡ν΅μ μΌλ‘ HTTP ν€λμ λ°λλ‘ κ΅¬μ±λλ€.
HTTP λ©μμ§μ μμ μ€κ³Ό HTTP ν€λλ₯Ό λ¬Άμ΄μ 'μμ² ν€λ(head)' λΌκ³ λΆλ₯΄λ©°, HTTP λ©μμ§μ νμ΄λ‘λλ 'λ³Έλ¬Έ(body)'μ΄λΌκ³ νλ€.
HTTP μμ²
HTTP μμ²μ μλ²μκ² νΉμ λμμ μꡬνλ λ©μμ§μ΄λ€.
μλ²λ ν΄λΉ λμμ΄ μ€ν κ°λ₯νμ§, ν΄λΌμ΄μΈνΈκ° κ·Έλ¬ν λμμ μμ²ν κΆνμ΄ μλμ§ λ±μ κ²ν νκ³ , μ μ ν λλ§ μ΄λ₯Ό μ²λ¦¬νλ€.
μμ μ€
HTTP μμ²μ μμ μ€μ λ©μλ(Method), μμ² URI(Request-URI), κ·Έλ¦¬κ³ HTTP λ²μ μΌλ‘ ꡬμ±νλ€.
κ°κ°μ λμ΄μ°κΈ°λ‘ ꡬλΆνλ€.
- HTTP μ μ‘ λ°©λ² (method)
- ex. GET, PUT, POST, HEAD, OPTIONS
- μμ² URL
- μ£Όλ‘ URL, λλ νλ‘ν μ½, ν¬νΈ, λλ©μΈμ μ λ κ²½λ‘λ‘ λνλ¨
- μμ² ν¬λ§·μ HTTP λ©μλμ λ°λΌ λ¬λΌμ§
- POST / HTTP/1.1
- GET /background.png HTTP/1.0
- HEAD /test.html?query=alibaba HTTP/1.1
- OPTIONS /anypage.html HTTP/1.1
- 'absolute νμ'μΌλ‘ μλ €μ§ μμ ν URLμ νλ‘μμ μ°κ²°νλ κ²½μ° λλΆλΆ GETκ³Ό ν¨κ» μ¬μ©
- 'authority νμ'μΌλ‘ μλ €μ§κ³ λλ©μΈ μ΄λ¦ λ° μ΅μ
ν¬νΈ(':'κ° μμ λΆμ΅λλ€)λ‘ μ΄λ£¨μ΄μ§ URLμ μΈμ¦ μ»΄ν¬λνΈμ΄λ€. HTTP ν°λμ ꡬμΆνλ κ²½μ°μλ§ CONNECTμ ν¨κ» μ¬μ©ν μ μλ€.
- CONNECT developer.mozilla.org:80 HTTP/1.1
- OPTIONSμ ν¨κ» λ³ν('*') νλλ‘ μλ² μ 체λ₯Ό λνλ΄λ 'asterisk νμ'μ΄λ€.
- OPTIONS * HTTP/1.1
- HTTP λ²μ
- ex. 1.0 λλ 1.1
- ν΄λΌμ΄μΈνΈμ μλ²μ λ²μ μ λ§μΆ°μ£ΌκΈ° μν¨
HTTP μμ² ν€λ
- μ΄λ¦: κ°
- μμ² ν€λμ μ’
λ₯
- General ν€λ: HTTP/1.1 λΆν°λ General headerλ‘ κ΅¬μ²΄μ μΌλ‘ λΆλ₯νμ§ μμ
- Request ν€λ: User-Agent (en-US), Acceptμ κ°μ Request ν€λλ μμ²μ λ΄μ©μ μ’ λ ꡬ체ν μν€κ³ (Accept-Language), 컨ν
μ€λ₯Ό μ 곡νκΈ°λ νλ©°(Referer), 쑰건μ λ°λ₯Έ μ μ½ μ¬νμ μ£ΌκΈ°λ νλ©΄μ(If-None) μμ² λ΄μ©μ μμ λ€.
- User-Agent ν€λ: μννΈμ¨μ΄μ κ΄ν μ 보
- νΈμ€νΈ(Host) ν€λ: νΈμ€νΈλͺ
- μΏ ν€(Cookie) ν€λ
- μΏ ν€: μΈμ μ λν μ 보 (μ΄κ² μ΄λ€ μΈμ μΈμ§ νμ κ°λ₯)
- XWS 곡격μΌλ‘ μΈμ μ 보 νμ³μ¬ μ μμ
- Referer ν€λ: ν΄λΉ μμ²μ΄ μμλ URL μ 보
- 곡격μκ° ν΄λΉ ν€λλ₯Ό λ³κ²½ν μ μλ€.
- λ©μμ§ λ°μ΄ν°μ μλ νμκ³Ό μ μ©λ μΈμ½λ©μ μ€λͺ νλ Content-Typeκ³Ό κ°μ Representation ν€λ(λ©μμ§μ λ³Έλ¬Έμ΄ μλ κ²½μ°μλ§ μ‘΄μ¬).
→ 보μμ κ΄μ μμλ μΏ ν€ ν€λμ Refererν€λκ° κ°μ₯ μ€μ!
λ³Έλ¬Έ (body)
λ³Έλ¬Έμ μμ²μ λ§μ§λ§ λΆλΆμ λ€μ΄κ°λ€.
λͺ¨λ μμ²μ λ³Έλ¬Έμ΄ λ€μ΄κ°μ§λ μμ΅λλ€. GET, HEAD, DELETE , OPTIONSμ²λΌ 리μμ€λ₯Ό κ°μ Έμ€λ μμ²μ λ³΄ν΅ λ³Έλ¬Έμ΄ νμκ° μλ€.
μΌλΆ μμ²μ μ λ°μ΄νΈλ₯Ό νκΈ° μν΄ μλ²μ λ°μ΄ν°λ₯Ό μ μ‘ν©λλ€. λ³΄ν΅ (HTML νΌ λ°μ΄ν°λ₯Ό ν¬ν¨νλ) POST μμ²μΌ κ²½μ°μ κ·Έλ λ€.
bodyλ ν¬κ² λκ°μ§ μ’ λ₯λ‘ λλλ€
- ν€λ λ κ°(Content-Typeμ Content-Length)λ‘ μ μλ λ¨μΌ νμΌλ‘ ꡬμ±λλ λ¨μΌ-리μμ€ λ³Έλ¬Έ(single-resource bodies)
- κ°κ° μλ‘ λ€λ₯Έ μ 보λ₯Ό λ΄κ³ μλ λ©ν°ννΈ λ³Έλ¬ΈμΌλ‘ ꡬμ±λλ λ€μ€ 리μμ€ λ³Έλ¬Έ
- λ³΄ν΅ HTML νΌ (en-US)κ³Ό κ΄λ ¨μ΄ μμ
HTTP μλ΅
μμμ€
- HTTP λ²μ
- ex. HTTP/1.1
- μμ²μ λν κ²°κ³Ό μ½λ
- ex. 200. 404, 302
- μλ΅μ λν μν©μ μ€λͺ
ν΄μ£Όκ³ , μ¬λμ΄ HTTP λ©μμ§λ₯Ό μ΄ν΄ν λ λμμ΄ λλ μν μ½λμ λν μ§§κ³ , μμ ν μ 보 μ 곡 λͺ©μ μ 'μν ν
μ€νΈ'
- ex. OK
μν μ½λ | μ€λͺ | λν μμ |
1xx | μμ²μ μ λλ‘ λ°μκ³ , μ²λ¦¬κ° μ§ν μ€ | |
2xx | μμ²μ΄ μ λλ‘ μ²λ¦¬λ¨ | 200(OK): μ±κ³΅ |
3xx | μμ²μ μ²λ¦¬νλ €λ©΄, ν΄λΌμ΄μΈνΈκ° μΆκ° λμμ μ·¨ν΄μΌ ν¨ | 302(Found): λ€λ₯Έ URLλ‘ κ° κ² |
4xx | ν΄λΌμ΄μΈνΈκ° μλͺ»λ μμ²μ 보λ΄μ΄ μ²λ¦¬μ μ€ν¨νμ΅λλ€. | - 400(Bad Request): μμ²μ΄ λ¬Έλ²μ λ§μ§ μμ - 401(Unauthorized): ν΄λΌμ΄μΈνΈκ° μμ²ν 리μμ€μ λν μΈμ¦μ΄ μ€ν¨ν¨ - 403(Forbidden): ν΄λΌμ΄μΈνΈκ° 리μμ€μ μμ²ν κΆνμ΄ μμ - 404(Not Found): 리μμ€ μμ |
5xx | ν΄λΌμ΄μΈνΈμ μμ²μ μ ν¨νμ§λ§, μλ²μ μλ¬κ° λ°μνμ¬ μ²λ¦¬μ μ€ν¨νμμ΅λλ€. | - 500(Interval Server Error): μλ²κ° μμ²μ μ²λ¦¬νλ€κ° μλ¬κ° λ°μν¨ - 503(Service Unavailable): μλ²κ° κ³ΌλΆνλ‘ μΈν΄ μμ²μ μ²λ¦¬ν μ μμ |
HTTP μλ΅ ν€λ
μλ΅μ λ€μ΄κ°λ HTTP ν€λλ λ€λ₯Έ ν€λμ λμΌν ꡬ쑰λ₯Ό λ°λ₯Έλ€.
- Viaμ κ°μ General ν€λλ λ©μμ§ μ 체μ μ μ©λ©λλ€
- μλ΅ ν€λ: μμΉμ μΌλ‘λ μλ²μμ λμλλ μννΈμ¨μ΄μ μ 보λ₯Ό 보μ¬μ€
⇒ λ°λΌμ, 곡격μμ κ΄μ¬μ¬! BUT λμ νλ₯ λ‘ μ λ³΄κ° μλͺ»λ¨- μ΄ μ 보λ₯Ό ν΅ν΄ λ²μ μ μ 보λ₯Ό μμλ → λ§μ½ λ§λ μ 보λΌλ©΄ 곡격μκ° λ§μΆ€ν 곡격μ ν μ μκΈ° λλ¬Έμ λ§€μ° μ 리ν΄μ§
⇒ 곡격μλ λ€λ₯Έ λ°©λ² μ¬ - Set-Cookie ν€λ: μΏ ν€λ₯Ό λΈλΌμ°μ (=ν΄λΌμ΄μΈνΈ)μκ² λ³΄λΌ λ μ¬μ©
- www-Authenticate ν€λ: μΈμ¦ κ΄λ ¨ μμΈ μ 보λ₯Ό λ΄μ
- μ΄ μ 보λ₯Ό ν΅ν΄ λ²μ μ μ 보λ₯Ό μμλ → λ§μ½ λ§λ μ 보λΌλ©΄ 곡격μκ° λ§μΆ€ν 곡격μ ν μ μκΈ° λλ¬Έμ λ§€μ° μ 리ν΄μ§
λ³Έλ¬Έ (body)
λ³Έλ¬Έμ μλ΅μ λ§μ§λ§ λΆλΆμ λ€μ΄κ°λλ€. λͺ¨λ μλ΅μ λ³Έλ¬Έμ΄ λ€μ΄κ°μ§λ μλλ€.
ν΄λΉ νμ΄λ‘λ μμ΄λ μμ²μ μΆ©λΆν μλ΅νλ 201 Created, 204 **No Content**κ³Ό κ°μ μν μ½λλ₯Ό κ°μ§ μλ΅μλ λ³΄ν΅ λ³Έλ¬Έμ΄ μλ€.
HTTP ν΄λΌμ΄μΈνΈ λ©μλ
β GETκ³Ό POSTμ μ°¨μ΄μ → μ΄λ€κ² λ 보μμ μΌλ‘ μμ ν κΉ?
⇒ POST (URL κ³΅κ° X)
κ·Έλ¬λ POSTλ μμ νκ² μμ νμ§ μλ€λ κ²μ μ£Όμν΄μΌ ν¨ (μλμ μΌλ‘ λ μμ νλ€λ κ²)
→ POSTλ ν¬λ‘¬ κ°λ°μ λꡬλ μμ΄μ΄μ€ν¬ λ±μ ν΅ν΄μ νμΈν μ μκΈ° λλ¬Έ
λ¨Όμ GETμ 리μμ€λ₯Ό κ°μ Έμ€λΌλ λ©μλμ΄λ€. μ΄μ©μκ° λΈλΌμ°μ μ μΉ μλ²μ μ£Όμλ₯Ό μ λ ₯νκ±°λ νμ΄νΌλ§ν¬λ₯Ό ν΄λ¦νλ©΄, μλ‘μ΄ νμ΄μ§λ₯Ό λ λλ§νκΈ° μν΄ λ¦¬μμ€κ° νμνλ€. μ΄λ λΈλΌμ°μ λ GET μμ²μ μλ²μ μ μ‘νμ¬ λ¦¬μμ€λ₯Ό λ°μμ¨λ€. λ°λλ‘, POSTλ 리μμ€λ‘ λ°μ΄ν°λ₯Ό 보λ΄λΌλ λ©μλμ΄λ€. μ μ‘ν λ°μ΄ν°λ λ³΄ν΅ HTTP λ°λμ ν¬ν¨λκ³ , λ‘κ·ΈμΈν λ μ λ ₯νλ IDμ λΉλ°λ²νΈ, κ²μνμ μμ±νλ κΈ λ±μ΄ POSTλ‘ μλ²μ 보λ΄μ§λ€.
- GETβββ
- μΉ μλ²μ μλ μμμ νλν λ μ¬μ© → μμ²
- URLμ λͺ¨λ μ λ³΄κ° λνλ¨
- URLμ΄ ν λ² μ λ ₯λλ©΄ λΈλΌμ°μ νμ€ν 리λ μΉ μλ²μ λ‘κ·Έμ μ μ₯λ¨
- μΈλΆμ¬μ΄νΈμ λ§ν¬λμ΄ μλ κ²½μ°μ λ€λ₯Έ μ¬μ΄νΈλ€μ Referer ν€λμλ μ λ¬λ¨
- μ€μν μ 보λ URL queryλ₯Ό ν΅ν΄ 곡κ°λλ©΄ μλκΈ° λλ¬Έμ GET λ©μλλ₯Ό ν΅ν΄ μ λ¬νλ©΄ μλ¨
- POSTβββ
- μμ² μΈμλ₯Ό λ©μμ§ λͺΈμ²΄λ₯Ό ν΅ν΄μ 보λ΄μ§ μ μμ
- URLμ λΆλ§ν¬ λμ§λ§, λ©μμ§ λͺΈμ²΄λ₯Ό ν΅ν΄ 보λ΄μ΄μ§ μμ² μΈμλ URLμ κΈ°λ‘νλ λ‘κ·Έμ μ μ₯λμ§ μκ³ , Referer ν€λμλ μ λ¬λμ§ μμ
- HEAD
- GET μμ²μ νκΈ° μ μ 리μμ€κ° μλμ§ νμΈ
- μμΌλ©΄ GETμμ² λ³΄λ΄κ³ , μμΌλ©΄ 보λ΄μ§ X
- GET μμ²μ νκΈ° μ μ 리μμ€κ° μλμ§ νμΈ
- TRACE
- μ§λ¨μ μν λͺ©μ μΌλ‘ μ¬μ©λ¨
- νλ‘μ μλ²μ ν¨κ³Όλ₯Ό νμ§νλλ° μ¬μ©
- OPTIONS
- μΆκ°μ μΌλ‘ λ€μ΄κ° μ μλ μ΄λ€ μ 보λ€μ μλ²μ μμ²ν λ μ¬μ©
- μΌμμ μΌλ‘ μ¬μ©λμ§ μλ νΉμ μμ λ±
- μλ²λ 리μ€νΈλ₯Ό κ°λ allow ν€λλ₯Ό ν΅ν΄ μλ΅
- μΆκ°μ μΌλ‘ λ€μ΄κ° μ μλ μ΄λ€ μ 보λ€μ μλ²μ μμ²ν λ μ¬μ©
- PUT
- μλ²μ νΉμ μμμ μ¬λ¦΄ λ(μ
λ‘λ..) μ¬μ©νλ λ°©μ
- GET/POST: μμμ κ°μ Έμ¬ λ μ¬μ©
- 곡격μκ° μ μμ μΈ μ€ν¬λ¦½νΈλ₯Ό μλ²μ μ¬λ €μ μ€νν λ μ¬μ©λ μ μμ
- μλ²μ νΉμ μμμ μ¬λ¦΄ λ(μ
λ‘λ..) μ¬μ©νλ λ°©μ