HTTP κ°μ
λ€νΈμν¬λ₯Ό 곡λΆνκΈ° μν΄ developer.mozilla.orgμ HTTP Overview λ¬Έμλ₯Ό μμ½ μ 리νμμ΅λλ€.
HTTPλ?
HTTP(HyperText Transfer Protocol)μ www μμμ μ 보λ₯Ό μ£Όκ³ λ°μ μ μλ νλ‘ν μ½μΌλ‘ μΉμμ μ΄λ£¨μ΄μ§λ λͺ¨λ λ°μ΄ν° κ΅νμ κΈ°μ΄λΌ ν μ μμ΅λλ€. μ ν리μΌμ΄μ κ³μΈ΅μ νμ₯ κ°λ₯ν ν΄λΌμ΄μΈνΈ-μλ² νλ‘ν μ½μ λλ€.
νλ‘ν μ½
ν΅μ νλ‘ν μ½(κ·μ½, Protocal)μ΄λ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°λ(ν΅μ ) μνΈ κ°μ μ΄ κ³Όμ μ μννκ² νλλ‘ ν΄μ£Όλ 미리 μ½μλ κ·μΉμ λ§ν©λλ€. μ¬λκ³Ό μ¬λμ΄ ν΅μ ν λ μλ‘ μ΄ν΄ν μ μλ μΈμ΄λ₯Ό μ¬μ©ν΄μΌ λνλ₯Ό ν μ μλ κ²μ²λΌ, μ»΄ν¨ν°μ μ»΄ν¨ν° μ¬μ΄μλ ν΅μ μ νκΈ° μν΄μλ νλ‘ν μ½μ΄ μμ΄μΌ ν©λλ€.
λ€νΈμν¬ κ³μΈ΅
HTTPλ μ ν리μΌμ΄μ κ³μΈ΅μ νλ‘ν μ½μ λλ€. μΈν°λ·μ 볡μ‘ν¨κ³Ό κ±°λν κ΅¬μ‘°λ‘ μΈν΄ λ€νΈμν¬ μ€κ³μλ μΈν°λ·μ κ³μΈ΅ννμ¬ μ€κ³νμμ΅λλ€. λ€νΈμν¬ κ³μΈ΅μμ μ ν리μΌμ΄μ κ³μΈ΅μ μμ κ°μ΄ μ΅μμμ μμΉνκ³ μμ΅λλ€. HTTPλ μ ν리μΌμ΄μ κ³μΈ΅μ μμΉνκ³ μμΌλ©°, TCPλ₯Ό μ μ‘ κ³μΈ΅μΌλ‘ μ¬μ©ν©λλ€.
HTTP κΈ°λ° μμ€ν μ κ΅¬μ± μμ
HTTP κΈ°λ° μμ€ν μ κ΅¬μ± μμλ ν¬κ² ν΄λΌμ΄μΈνΈ(μ¬μ©μ μμ΄μ νΈ)μ μΉ μλ², κ·Έλ¦¬κ³ κ·Έ μ€κ³μ μν μ νλ νλ‘μλ‘ κ΅¬μ±λ©λλ€.
ν΄λΌμ΄μΈνΈ: μ¬μ©μ μμ΄μ νΈ
μ¬μ©μ μμ΄μ νΈλ μ¬μ©μλ₯Ό λμ νμ¬ λμνλ λͺ¨λ λꡬλ₯Ό λ§νκ³ , μ£Όλ‘ λΈλΌμ°μ μ μν΄ μνλ©λλ€. λΈλΌμ°μ λ νμ μμ²μ 보λ΄λ κ°μ²΄μ΄κ³ μλ²κ° λ μ μμ΅λλ€. μΉ νμ΄μ§λ₯Ό νμνκΈ° μν΄μ λΈλΌμ°μ λ HTML λ¬Έμμ λν μμ²νκ³ , μ€ν¬λ¦½νΈ λ° λ μ΄μμ μ 보μ λν΄ μΆκ°μ μΈ μμ²μνκ³ , λ°μ 리μμ€λ₯Ό νΌν©νλ κ³Όμ μ κ±°μΉ©λλ€. νμ΄νΌ ν μ€νΈ λ¬ΈμμΈ μΉ νμ΄μ§λ μλ‘μ΄ μΉνμ΄μ§λ₯Ό κ°μ Έμ€κΈ° μν λ§ν¬λ₯Ό ν¬ν¨νκ³ μλλ°, λΈλΌμ°μ λ HTTP μμ² λ΄μμ μ΄λ¬ν μ§μ μ¬νμ λ³ννκ³ μλ΅μ ν΄μν΄μ μ¬μ©μμκ² λͺ νν μλ΅μ νμν©λλ€.
μΉ μλ²
(λ Όλ¦¬μ μΌλ‘) λ¨μΌ κΈ°κ³μΈ μλ²λ μμ κ°μ μμ²μ λ¬Έμλ₯Ό μ 곡ν©λλ€. μ¬λ¬ κ°μ μλ²λ₯Ό λμΌν λ¨Έμ μμ νΈμ€ν ν μ μμ΅λλ€.
νλ‘μ
ν΄λΌμ΄μΈνΈμ μλ² μ¬μ΄μμ λμνλ λ¨Έμ λ€ μ€ νΉν μ ν리μΌμ΄μ κ³μΈ΅μμ λμνλ κ²μ νλ‘μλΌκ³ λΆλ¦ λλ€. νλ‘μλ μΊμ±, νν°λ§, λ‘λ λ°Έλ°μ±, μΈμ¦, λ‘κΉ λ± λ€μν κΈ°λ₯μ μνν©λλ€.
HTTP κΈ°μ΄
HTTPλ κ°λ¨ν©λλ€. HTTP λ©μμ§λ₯Ό νλ μλ³λ‘ μΊ‘μννμ¬ κ°κ²°ν¨μ μ μ§ν λλΆμ μ¬λμ΄ μ½κ³ μ΄ν΄ν μ μμ΄ ν μ€νΈνκΈ° μ½μ΅λλ€.
HTTPλ νμ₯ κ°λ₯ν©λλ€. HTTP ν€λλ₯Ό ν΅ν΄ μλ‘μ΄ κΈ°λ₯μ μΆκ°ν μ μμ΅λλ€.
HTTPλ μνκ° μμ΅λλ€(Stateless). ν΄λΌμ΄μΈνΈμμ 첫 λ²μ§Έ ν΅μ μμ λ°μ΄ν°λ₯Ό μ£Όκ³ λ°μλ€κ³ ν΄λ, λ λ²μ§Έ ν΅μ μμ μ΄μ λ°μ΄ν°λ₯Ό μ μ§νμ§ μμ΅λλ€. κ·Έλ¬λ HTTPλ μΏ ν€λ₯Ό ν΅ν΄ μνκ° μλ μΈμ μ λ§λ€μ΄ ν΅μ κ³Ό ν΅μ μ¬μ΄μ μ°μμ±μ λ§λ€μ΄μ€ μ μμ΅λλ€.
HTTPμ μ°κ²°μ μ λ’°ν μ μλ μ μ‘ νλ‘ν μ½μΈ TCPμ κΈ°λ°ν©λλ€. λ°λΌμ ν΄λΌμ΄μΈνΈμ μλ²κ° HTTPλ₯Ό μμ²/μλ΅μΌλ‘ κ΅ννκΈ° μ μ TCP μ°κ²°μ μ€μ ν΄μΌ ν©λλ€. HTTP/1.0 λλ κ° μμ²/μλ΅μ λν΄ λ³λμ TCP μ°κ²°μ μ΄μμ΅λλ€. HTTP/1.1μ νμ΄νλΌμ΄λκ³Ό μ§μμ μΈ μ°κ²° κ°λ μ λμ ν΄ μ΄μ λ²μ μ λΉν¨μ¨μ±μ κ°μ νκ³ μ νμ΅λλ€. μ΄ν HTTP/2λ λ¨μΌ μ°κ²° μμμ λ©μμ§λ₯Ό λ€μ€ μ μ‘(multiplex)νμ¬ μ°κ²°μ μ’ λ μ§μμ μ΄κ³ ν¨μ¨μ μΌλ‘ μ μ§νλλ‘ νμμ΅λλ€.
νμ΄νλΌμ΄λ μ΄λ?: λμμ μ¬λ¬ κ°μ λͺ λ Ήμ΄λ₯Ό μ²λ¦¬ν¨μΌλ‘μ¨ μ²λ¦¬λμ μ¬λ¦¬λ κΈ°λ²μ΄λ€.
HTTPλ‘ μ μ΄ν μ μλ κ²
μΊμ
HTTPλ λ¬Έμκ° μΊμλλ λ°©μμ μ μ΄ν μ μμ΅λλ€. μλ²λ μΊμ λμκ³Ό κΈ°κ°μ νλ‘μμ ν΄λΌμ΄μΈνΈμ μ§μν μ μκ³ , ν΄λΌμ΄μΈνΈλ μ μ₯λ λ¬Έμλ₯Ό 무μνλΌκ³ μ€κ° μΊμ νλ‘μμ μ§μν μ μμ΅λλ€.
μΊμλ? λ°μ΄ν°λ κ°μ 미리 볡μ¬ν΄ λλ μμ μ μ₯μλ₯Ό 카리ν¨λ€. μΊμμ λ°μ΄ν°λ₯Ό 미리 볡μ¬ν΄ λμΌλ©΄ κ³μ°μ΄λ μ κ·Ό μκ° μμ΄ λΉ λ₯Έ μλλ‘ λ°μ΄ν°μ μ κ·Όν μ μλ€. μΊμλ μμ€ν μ ν¨μ¨μ±μ μν΄ μ¬λ¬ λΆμΌμμ λ루 μ°μ΄κ³ μλ€. HTTPμμ μΊμ±μ λ³΄ν΅ GET μμ²μμ κ°μ Έμ¨ 리μμ€λ₯Ό μ μ₯ν΄λκ³ μ¬μ¬μ©νμ¬ μ±λ₯μ λμΈλ€.
origin μ μ½μ¬ν μν
λΈλΌμ°μ λ λμΌν originμΌλ‘λΆν° μ¨ νμ΄μ§λ§μ΄ μΉ νμ΄μ§μ μ 체 μ 보μ μ κ·Όν μ μκ² ν©λλ€(same-origin policy). κ·Έλ¬λ HTTPν€λλ₯Ό ν΅ν΄ μ΄λ¬ν μ μ½μ¬νμ μννμ¬ λ€λ₯Έ λλ©μΈμΌλ‘λΆν° μ λ¬λ μ 보λ₯Ό μ§ λ§μΆ μ μμ΅λλ€.
μ€λνμ΄λ? λ€νΈμν¬ μμ μ 보λ₯Ό μΌλ΄νμ¬ λΆλ²μ μΌλ‘ μ»λ κ²μ μλ―Ένλ€. μννΈμ¨μ΄ νλ‘κ·Έλ¨(μ€λνΌ)λ₯Ό ν΅ν΄μ μ격μΌλ‘ λ€λ₯Έ μ»΄ν¨ν°μ μ 보λ₯Ό μΏλ³Ό μ μμ΄ κ°μΈμ μΈ λ©μ μ λ΄μ©, λ‘κ·ΈμΈ μ 보, μ μ μ°νΈ λ±μ μ 보λ₯Ό λͺ°λ νλν μ μλ€. λ€νΈμν¬ νΈλν½μ λΆμνκΈ° μν΄ μ¬μ©λκΈ°λ νλ€.
λμΌ-μΆμ² μ μ± (same-origin policy) μ΄λ? μ΄λ€ μΆμ²μμ λΆλ¬μ¨ λ¬Έμλ μ€ν¬λ¦½νΈκ° λ€λ₯Έ μΆμ²μμ κ°μ Έμ¨ 리μμ€μ μνΈμμ©νλ κ²μ μ ννλ 보μ λ°©μμ΄λ€.
μΈμ¦
WWW-Authenticate νΉμ μ μ¬ν ν€λλ₯Ό μ¬μ©ν΄ κΈ°λ³Έ μΈμ¦μ κ±°μΉκ±°λ μΏ ν€λ‘ νΉμ μΈμ μ μ€μ ν¨μΌλ‘μ¨ μΉνμ΄μ§λ₯Ό 보νΈνμ¬ νΉμ μ¬μ©μλ§μ΄ μ κ·Όν μ μκ² ν©λλ€.
νλ‘μμ ν°λλ§
μλ² νΉμ ν΄λΌμ΄μΈνΈλ μΈνΈλΌλ·μ μμΉνμ¬ μ€μ μ£Όμλ₯Ό μ¨κΈ°κΈ°λ νλλ°, μ΄λ HTTP μμ²μ λ€νΈμν¬ μ₯λ²½μ κ°λ‘μ§λ₯΄κΈ° μν΄ νλ‘μλ₯Ό ν΅ν΄ λκ°λλ€.
μΈμ
HTTPλ κΈ°λ³Έμ μΌλ‘ μνκ° μμ΅λλ€. νμ§λ§, μ€μ λ‘λ λ°μ΄ν° μ μ§κ° νμν κ²½μ°κ° λ§μ΅λλ€. μ λ³΄κ° μ μ§λμ μμΌλ©΄ λ§€λ² νμ΄μ§λ₯Ό μ΄λν λλ§λ€ λ‘κ·ΈμΈμ ν΄μΌ νκ³ , μνμ μ ννκ³ λ ꡬ맀 νμ΄μ§μ μ νν μνμ΄ μμ κ²μ΄κΈ° λλ¬Έμ λλ€. HTTP μΏ ν€λ μΈμ μ λ§λ€μ΄ μλ² μνλ₯Ό μμ²κ³Ό μ°κ²°νλλ‘ ν΄μ€ μ΄μ λμ²ν©λλ€.
μΏ ν€λ λΈλΌμ°μ μ μ μ₯λλ μμ λ°μ΄ν° μ‘°κ°μΌλ‘ μμ λ°μ΄ν° λ³΄κ΄ νΉμ μΉ νμ΄μ§ κ°μΈνμ μ¬μ©λλ€.
HTTP νλ¦
- TCP μ°κ²°μ μ°λ€.
- HTTP λ©μμ§λ₯Ό μ μ‘νλ€.
- μλ²μ μν΄ μ μ‘λ μλ΅μ μ½μ΄λ€μΈλ€.
- μ°κ²°μ λ«κ±°λ λ€λ₯Έ μμ²λ€μ μν΄ μ¬μ¬μ©νλ€.
HTTP λ©μμ§
HTTP/2λΆν°λ HTTP λ©μμ§κ° νλ μ μμΌλ‘ μΊ‘μννμ¬ λ³΅μ‘ν΄μ‘μ§λ§, μ ν리μΌμ΄μ μ κ΄μ μμ λ³Ό λ λ©μμ§μ ꡬ쑰λ λμΌν©λλ€.
μμ²
- Method: ex) GET, POST, OPTIONS, HEAD
- Path: νλ‘ν μ½(http://), λλ©μΈ(developer.mozilla.org), TCP ν¬νΈ(80)μ μ μΈν 리μμ€μ URL
- Headers λΆκ°μ μΈ μ 보 μ 곡
μλ΅
- HTTP Headers: ex) User-Agent, Referer, If-Modified-Since, If-None-Match, μΏ ν€ λ± μ 보 ν¬ν¨
HTTP κΈ°λ° API
XMLHttpRequest API
: μ 체 νμ΄μ§μ μλ‘κ³ μΉ¨ μμ΄λ URLλ‘λΆν° λ°μ΄ν°λ₯Ό λ°μμ¬ μ μμ΅λλ€. μ¦, νμ΄μ§μ μΌλΆλ₯Ό μ λ°μ΄νΈν μ μκ² ν΄μ€λλ€.Fetch API
: μ΅μ APIλ‘XMLHttpRequest
μ λΉμ·ν κΈ°λ₯μ μννμ§λ§ λ³΄λ€ κ°λ ₯νκ³ μ μ°ν μ‘°μμ΄ κ°λ₯ν©λλ€.Server-sent Events
: μλ μΉνμ΄μ§λ μλ‘μ΄ λ°μ΄ν°λ₯Ό λ°μΌλ €λ©΄ μλ²λ‘ μμ²μ 보λ΄μΌ ν©λλ€. κ·Έλ¬λ Server-sent λ°©μμΌλ‘λ μμ² μμ΄λ μΈμ λ μ§ μλ²κ° μλ‘μ΄ λ°μ΄ν°λ₯Ό 보λ΄λ κ²μ΄ κ°λ₯ν©λλ€. ν΄λΌμ΄μΈνΈλ λμ°©ν λ©μμ§λ₯Ό Event κ°μ²΄λ‘ μλ λ³νν΄ μΉνμ΄μ§ μμμ Events + λ°μ΄ν°λ‘ λ€λ£° μ μμ΅λλ€.