5. Message Routing
HTTP μμ² λ©μμ§ λΌμ°ν μ λμ 리μμ€, ν΄λΌμ΄μΈνΈμ νλ½μ κ΅¬μ± λ° μΈλ°μ΄λ 컀λ₯μ μ μ€μ λλ μ¬μ¬μ©μ κΈ°μ€μΌλ‘ κ° ν΄λΌμ΄μΈνΈμ μν΄ κ²°μ λλ€.
5.1 Identifying a Target Resource
λλΆλΆμ HTTP ν΄λΌμ΄μΈνΈλ λ²μ© μΉ λΈλΌμ°μ μ λμΌν 리μμ€ μλ³ λ©μ»€λμ¦κ³Ό κ΅¬μ± κΈ°μ μ μμ‘΄νλ€.
5.2 Connecting Inbound
1.λμ URIκ° κ²°μ λλ©΄ ν΄λΌμ΄μΈνΈλ λ°λμ§ν μλ―Έλ‘ μ λ¬μ±νκΈ° μν΄ λ€νΈμν¬ μμ²μ΄ νμνμ§ μ¬λΆλ₯Ό κ²°μ ν΄μΌ νλ©°, κ·Έλ λ€λ©΄ μμ²μ΄ νμν κ²½μ° μ΄λμ μμ²λλ μμΉλ₯Ό κ²°μ ν΄μΌ νλ€.
2. ν΄λΌμ΄μΈνΈμ μΊμ [RFC7234] κ° μκ³ μμ²μ΄ μ΄μ μν΄ μΆ©μ‘±λ μ μλ κ²½μ°, μΌλ°μ μΌλ‘ μμ²μ λ¨Όμ ν΄λΉ μΊμλ‘ μ λ¬λλ€.
3. μμ²μ΄ μΊμμ μν΄ μΆ©μ‘±λμ§ μμΌλ©΄ μΌλ° ν΄λΌμ΄μΈνΈλ ν΄λΉ ꡬμ±μ νμΈνμ¬ μμ²μ μΆ©μ‘±νκΈ° μν΄ νλ‘μ μ¬μ©ν μ§ μ¬λΆλ₯Ό κ²°μ νλ€. νλ‘μ ꡬμ±μ ꡬνμ λ°λΌ λ€λ₯΄μ§λ§ URI μ λμ¬ μΌμΉ, μ νμ κΆν μΌμΉ λλ λ λ€μ κΈ°λ°νλ κ²½μ°κ° λ§μΌλ©°, νλ½μ μ체λ λκ° "http" λλ "https" URIλ‘ μλ³λλ€. νλ‘μ μ μ© κ°λ₯ν κ²½μ° ν΄λΌμ΄μΈνΈλ ν΄λΉ νλ‘μμ λν 컀λ₯μ μ μ€λ¦½(λλ μ¬μ¬μ©) νμ¬ μΈλ°μ΄λλ₯Ό μ°κ²°νλ€.
4. νλ‘μκ° μ μ©λμ§ μλ κ²½μ°, μΌλ°μ μΈ ν΄λΌμ΄μΈνΈλ λμ URI μ schemeκ³Ό κ΄λ ¨λ νΈλ€λ¬ 루ν΄μ νΈμΆνμ¬ λμ 리μμ€μ λν κΆνμ μ§μ μ°κ²°νλ€.
5.3 Request Target
νλ² μΈλ°μ΄λ 컀λ₯μ μ μ»μΌλ©΄, ν΄λΌμ΄μΈνΈλ λμ URIμμ νμλ request-targetκ³Ό ν¨κ» HTTP μμ² λ©μμ§(Section 3)λ₯Ό 보λΈλ€. μμ²νλ λ°©λ²κ³Ό νλ‘μμ λν μμ²μΈμ§ μ¬λΆμ λ°λΌ request-target νμμ λ€ κ°μ§λ‘ ꡬλΆλλ€.
request-target = origin-form / absolute-form / authority-form / asterisk-form
5.3.1 origin-form
λλΆλΆμ request-targetμ 곡ν΅μ μμμ origin-formμ΄λ€.
origin-form = absolute-path [ "?" query ]
CONNECT λλ μλ² μ 체 OPTIONS μμ² μΈμ μμλ²μ μ§μ μμ²ν λ(μλμ μμΈν μ€λͺ λ λλ‘) ν΄λΌμ΄μΈνΈλ λμ URIμ μ λ κ²½λ‘ λ° μΏΌλ¦¬ κ΅¬μ± μμλ§ request-targetμΌλ‘ 보λ΄μΌ νλ€.(MUST)
λμ URIμ κ²½λ‘ κ΅¬μ± μμκ° λΉμ΄ μμΌλ©΄ ν΄λΌμ΄μΈνΈκ° request-targetμ origin-form λ΄μ κ²½λ‘λ‘ β/" λ₯Ό λ°λμ 보λ΄μΌ νλ€.(MUST)
μλ₯Ό λ€μ΄, ν΄λΌμ΄μΈνΈλ http://www.example.org/where?q=now κ°μ μλ³λ 리μμ€μ νμλ‘ κ²μνλ κ²μ λ°λ κ²μ΄λ€.
μμλ²λ‘λΆν° μ§μ ν¬νΈ 80μ λν TCP 컀λ₯μ μ μ΄κ³ (λλ μ¬μ¬μ©νκ³ ) νΈμ€νΈ "www.example.org"κ³Ό λ€μμ€μ 보λμ κ²μ΄λ€.
GET /where?q=now HTTP/1.1 Host: www.example.org
5.3.2 absolute-form
νλ‘μμ μμ²μ ν λ, CONNECT λλ μλ² μΈ‘ OPTIONS μμ²μ μ μΈνκ³ (μλμ μμΈν μ€λͺ λ λλ‘), ν΄λΌμ΄μΈνΈλ absolute-formμ request-targetμΌλ‘ λμ URIλ₯Ό 보λ΄μΌ νλ€.
GET http://www.example.org/pub/WWW/TheProject.html HTTP/1.1
μΌλΆ λ―Έλμ HTTP λ²μ μμ λͺ¨λ μμ²μ μν absolute-formμΌλ‘ λ³ννλ €λ©΄, HTTP/1.1 ν΄λΌμ΄μΈνΈκ° νλ‘μμλ§ μμ²μΌλ‘ absolute-formμ μ μ‘νλλΌλ, μλ²λ μμ²μμ absolute-formλ₯Ό μμ©ν΄μΌ νλ€.(MUST)
5.3.3 authority-form
νλ λλ κ·Έ μ΄μμ νλ‘μλ€μ ν΅ν΄ ν°λκ³Ό μ€λ¦½νκΈ° μν΄ CONNECT μμ²μ ν λ, ν΄λΌμ΄μΈνΈλ λ°λμ λμ URIμ κΆν ꡬμ±μμλ§ request-targetμΌλ‘ 보λ΄μΌ νλ€. (MUST)(μ΄λ€ userinfoλ β@β κΈ°νΈλ₯Ό μ μΈνκ³ )
CONNECT www.example.com:80 HTTP/1.1
5.3.4 asterisk-form
request-targetμ asterisk-formμ μλ² μ 체 OPTIONS μμ²μμλ§ μ¬μ©λλ€.
ν΄λΌμ΄μΈνΈκ° μλ² μ 체μ λν΄ OPTIONS μμ²μ νκ³ μ ν λ, μλ²μ νΉμ ν λͺ λͺ λ 리μμ€μλ λ°λλ‘, ν΄λΌμ΄μΈνΈλ λ°λμ β*β (%x2A)λ§ request-targetμΌλ‘ 보λ΄μΌ νλ€.(MUST)
OPTIONS * HTTP/1.1
νλ‘μκ° URIμ λΉ κ²½λ‘κ° μκ³ μΏΌλ¦¬ κ΅¬μ± μμκ° μλ request-targetμ absolute-formκ³Ό OPTIONS μμ²μ μμ νλ κ²½μ°, μμ² μ²΄μΈμ λ§μ§λ§ νλ‘μκ° μμ²μ μ§μ λ μμλ²λ‘ μ λ¬ ν λ "*"μ request-targetμ λ°λμ 보λ΄μΌ νλ€.(MUST)
μλ₯Όλ€μ΄, μμ²μμ
OPTIONS http://www.example.org:8001 HTTP/1.1
μ λ€μκ³Όκ°μ΄ host βwww.example.org"μ 8001 ν¬νΈμ μ°κ²°λ ν λ§μ§λ§ νλ‘μμ μν΄μ μ μ‘λμ κ²μ΄λ€.
OPTIONS * HTTP/1.1 Host: www.example.org:8001
5.4 Host
μμ²μ βHostβ ν€λ νλλ λμ URIλ‘ λΆν° νΈμ€νΈ λ° ν¬νΈ μ 보λ₯Ό μ 곡νλ―λ‘ μμλ²κ° λ¨μΌ IPμ£Όμμμ λ€μ€ νΈμ€νΈ μ΄λ¦μ λν μμ²μ μ²λ¦¬νλ λμ 리μμ€λ₯Ό ꡬλΆν μ μλ€.
Host = uri-host [ ":" port ] ; Section 2.7.1
ν΄λΌμ΄μΈνΈλ λͺ¨λ HTTP/1.1 μμ² λ©μμ§μμ Host ν€λ νλλ₯Ό λ°λμ 보λ΄μΌ νλ€.(MUST)
λμ URIμ κΆν κ΅¬μ± μμκ° ν¬ν¨λ κ²½μ°, μ΄λ€ userinfoλ β@β κΈ°νΈλ₯Ό μ μΈνκ³ , ν΄λΌμ΄μΈνΈλ ν΄λΉ κΆν κ΅¬μ± μμμ νΈμ€νΈμ λν field-valueλ₯Ό λ°λμ 보λ΄μΌ νλ€. (MUST)
λμ URI μ λν κΆν κ΅¬μ± μμκ° μκ±°λ μ μλμ§ μμ κ²½μ° ν΄λΌμ΄μΈνΈλ λΉ field-valueκ° ν¬ν¨λ Host ν€λ νλλ₯Ό λ°λμ 보λ΄μΌ νλ€.(MUST)
Hostμ field-valueλ μμ²μ μ²λ¦¬νλ λ° μ€μν μ 보μ΄λ―λ‘ μ¬μ©μ μμ΄μ νΈλ request-line λ€μμ 첫 λ²μ§Έ ν€λ νλλ‘ Hostλ₯Ό μμ±ν΄μΌ νλ€.(SHOULD)
μλ₯Ό λ€μ΄, μμλ²μ λν <http://www.example.org/pub/WWW/>μ GET μμ²μ λ€μκ³Ό κ°μ΄ μμλλ€.
GET /pub/WWW/ HTTP/1.1 Host: www.example.org
request-targetμ΄ absoluted-formμΈ κ²½μ°λΌλ ν΄λΌμ΄μΈνΈλ HTTP/1.1 μμ²μμ Host ν€ λ νλλ₯Ό λ°λμ μ μ‘ν΄μΌ νλ€.(MUST)
νλ‘μκ° request-targetμ absolute-formμ κ°μ§ μμ²μ μμ νλ κ²½μ°, νλ‘μλ μμ λ Host ν€λ νλ(μλ κ²½μ°)λ₯Ό 무μνκ³ request-targetμ νΈμ€νΈ μ λ³΄λ‘ λ체ν΄μΌ νλ€. (MUST)
μλ²λ Host ν€λ νλκ° μλ HTTP/1.1 μμ² λ©μμ§μ Host ν€λ νλμ μ ν¨νμ§ μμ field-value λλ λ κ° μ΄μμ Host ν€λ νλλ₯Ό ν¬ν¨νλ μμ² λ©μμ§μ 400 (Bad Request) μν μ½λλ‘ λ°λμ μλ΅ν΄μΌ νλ€.(MUST)
5.5 Effective Request URI
request-targetμ΄ μ’ μ’ μ¬μ©μ μμ΄μ νΈμ λμ URIμ μΌλΆλ§ ν¬ν¨ν μ΄λλ‘, μλ²λ μμ²μ μ μ νκ² μ²λ¦¬νκΈ° μν΄ μνλ λμμ βeffcetive request URIβλ‘ μ¬κ΅¬μ±νλ€. μ¬κ΅¬μ±μλ μλ²μ λ‘컬 ꡬμ±κ³Ό request-targetμ μλ ν΅μ μ 보, Host ν€λ νλ λ° μ»€λ₯μ 컨ν μ€νΈμ μ μ λ¬λλ μ 보λ₯Ό λͺ¨λ ν¬ν¨νλ€.
5.6 Associating a Response to Request
컀λ₯μ μ λν΄ λκ° μ΄μμ κ²°μ λμ§ λͺ»ν μμ²μ΄ μλ ν΄λΌμ΄μΈνΈλ λ³΄λΈ μμλλ‘ λ―Έκ²°μ μμ² λͺ©λ‘μ λ°λμ μ μ§ν΄μΌ νλ©°(MUST)
ν΄λΉ 컀λ₯μ μ λν΄ μμ λ κ° μλ΅ λ©μμ§λ₯Ό μμ§ μ΅μ’ (non-1xx) μλ΅μ λ°μ§ μμ κ°μ₯ μ°μ μμκ° λμ μμ²κ³Ό λ°λμ μ°κ²°ν΄μΌ νλ€.(MUST)
5.7 Message Forwarding
ν°λ μν μ νμ§ μλ μ€κ°μλ Section 6.1μ μ§μ λ Connection ν€λ νλλ₯Ό λ°λμ ꡬνν΄μΌ νλ©°, λ€μ΄μ€λ 컀λ₯μ μ μν΄ μ λ¬λλ νλλ λ°λμ μ μΈν΄μΌ νλ€.(MUST)
λ©μμ§κ° 무ν μμ² λ£¨νλ‘λΆν° 보νΈλμ§ μλ ν, μ€κ°μλ λ©μμ§λ₯Ό μκΈ° μμ μκ² μ λ¬ν΄μλ μ λλ€.(MUST NOT)
5.7.1 Via
βViaβ ν€λ νλλ μ΄λ©μΌμ βReceived" ν€λ νλμ μ μ¬νκ² μ¬μ©μ μμ΄μ νΈμ μλ²(μμ² μ)λλ μμλ²μ ν΄λΌμ΄μΈνΈ(μλ΅ μ)μ¬μ΄μ μ€κ°μ νλ‘ν μ½κ³Ό μμ μκ° μμμ λνλΈλ€.([RFC5322]μ Section 3.6.7).
νλ‘μλ μ λ¬λλ κ° λ©μμ§μμ μλ μ€λͺ λ λλ‘ μ μ ν Via ν€λ νλλ₯Ό 보λ΄μΌ νλ€. (MUST)
HTTP-to-HTTP κ²μ΄νΈ μ¨μ΄λ κ° μΈλ°μ΄λ μμ² λ©μμ§μμ μ μ ν Via ν€λ νλλ₯Ό 보λ΄μΌ νλ©°(MUST)
μ λ¬λ μλ΅ λ©μμ§λ‘ Via ν€λ νλλ₯Ό λ³΄λΌ μ μλ€.(MAY)
λ°μ μλ received-protocol κ°μ΄ λ€λ₯Έ νλͺ©μ κ²°ν©ν΄ μλ μ λλ€.(MUST) (e.g,. 1.0κ³Ό 1.1μ κ²°ν©νλ©΄ μ λλ€)
5.7.2 Transformations
μΌλΆ μ€κ°μλ λ©μμ§μ νμ΄ λ‘λλ₯Ό λ³ννκΈ° μν κΈ°λ₯μ ν¬ν¨νλ€. μλ₯Ό λ€μ΄ νλ‘μλ μΊμ 곡κ°μ μ μ½νκ±°λ λλ¦° λ§ν¬μ νΈλν½ μμ μ€μ΄κΈ° μν΄ μ΄λ―Έμ§ νμ κ°μ λ³νν μ μλ€.
μλ―Έλ‘ μ μΌλ‘ μλ―Έ μλ λ°©μμΌλ‘ λ©μμ§λ₯Ό μμ νλλ‘ μ€κ³λκ±°λ ꡬμ±λ HTTP-to-HTTP νλ½μλ₯Ό βtransforming proxy"λΌκ³ νλ€.
request- targetμ fully-qualified λλ©μΈ μ΄λ¦μ΄ ν¬ν¨λ κ²½μ° νλ½μλ νΈμ€νΈ μ΄λ¦μ λ³κ²½ν΄μλ μ λλ€.(MUST NOT)
νλ‘μλ μμ λ request-targetμ λ€μ μΈλ°μ΄λ μλ²λ‘ μ λ¬ν λ λΉ κ²½λ‘λ₯Ό β/"λλ β*" λ‘ λ°κΎΈκΈ° μν΄ μμμ μ€λͺ ν κ²½μ°λ₯Ό μ μΈνκ³ μμ λ request-targetμ βabsolute-pathβ λ° βquery" λΆλΆμ μμ ν΄μλ μλλ€.(MUST NOT)
νλ½μλ no-trasnform cache-control μ§μμ΄λ₯Ό ν¬ν¨ν λ©μμ§μ νμ΄ λ‘λ([RFC7231]μ Section 3.3)λ₯Ό λ³νν΄μλ μλλ€.(MUST NOT) ([RFC7234]μ Section 5.2).
νμ΄ λ‘λλ₯Ό λ³ννλ νλ½μλ 214 warn-code (βTransformation Appliedβ)κ° μμ§ λ©μμ§μ μλ κ²½μ° Warning ν€λ νλμ μΆκ°ν΄μΌ νλ€.(MUST)
νλ½μλ νλμ μ μκ° μ΄λ¬ν μμ μ νΉλ³ν νμ©νκ±°λ μμ μ΄ κ°μΈ μ 보 λλ 보μμ μν΄ νμν κ²μΌλ‘ κ°μ£Όλμ§ μλ ν ν΅μ 체μΈμ μλ ν¬μΈνΈ, 리μμ€ μν λλ μ νλ νν(νμ΄ λ‘λ μ μΈ)μ λν μ 보λ₯Ό μ 곡νλ ν€λ νλλ₯Ό μμ νλ©΄ μ λλ€.(SHOULD NOT)
Last updated