3. Message Format
HTTP-message = start-line *( header-field CRLF ) CRLF [ message-body ]
HTTP λ©μμ§λ₯Ό λΆμνλ μΌλ°μ μΈ μ μ°¨λ start-lineμ μ½κ³ , κ° ν€λ νλλ₯Ό λΉ νκΉμ§ νλ μ΄λ¦μΌλ‘ ν΄μ ν μ΄λΈλ‘ μ½μ λ€μ λΆμλ λ°μ΄ν°λ₯Ό μ¬μ©νμ¬ λ©μμ§ λ³Έλ¬Έμ΄ νμνμ§ μ¬λΆλ₯Ό νμΈνλ κ²μ΄λ€. λ©μμ§ λ³Έλ¬Έμ΄ νμλ κ²½μ°, λ©μμ§ λ³Έλ¬Έ κΈΈμ΄μ λμΌν octetμ μμ μ½κ±°λ 컀λ₯μ μ λ«μ λκΉμ§ μ€νΈλ¦ΌμΌλ‘ μ½λλ€.
μμ μλ λ°λμ HTTP λ©μμ§λ₯Ό US-ASCII [USASCII]μ μμ μ§ν©μΈ μΈμ½λ©μμ octetλ‘ κ΅¬ λ¬Έ λΆμν΄μΌ νλ€.(MUST)
λ°μ μλ start-lineκ³Ό 첫 λ²μ§Έ ν€λ νλ μ¬μ΄μ 곡백μ 보λ΄λ©΄ μ λλ€.(MUST NOT)
start-line κ³Ό 첫 λ²μ§Έ ν€λ νλ μ¬μ΄μ 곡백μ μμ νλ μμ μλ λ©μμ§λ₯Ό μ ν¨νμ§ μμ κ²μΌλ‘ κ±°λΆ νκ±°λ λ©μμ§λ₯Ό λ μ΄μ μ²λ¦¬νμ§ μκ³ κ° κ³΅λ°±μ΄ μ§μ λ μ€μ μλΉν΄μΌ νλ€.(MUST) (i.e., 곡 λ°±μ΄μ€λλͺ¨λ νμμ€κ³Όν¨κ», μ¬λ°λ₯΄κ²νμ±λν€λνλκ°μμ λκ±°λν€λλΆλ¬Έμ΄λλ λκΉμ§, μ 체 λΌμΈμ 무μνλ€)
3.1 Start Line
μμ²κ³Ό μλ΅ λ©μΈμ§μ μ μΌν μ°¨μ΄λ start line κ³Ό λ©μΈμ§ bodyμ κΈΈμ΄λ₯Ό κ²°μ νκΈ° μν μκ³ λ¦¬μ¦μ΄λ€. μ€μ§μ μΌλ‘λ start lineμΌλ‘ ꡬλΆμ ν μ μμ§λ§, μλ²λ μμ²λ§ λ°λλ‘ κ΅¬νλκ³ ν΄λΌμ΄μΈνΈλ μλ΅λ§ λ°λλ‘ κ΅¬νλλ€.
start-line = request-line / status-line
3.1.1 Request Line
μμ² λ©μμ§μ 첫 λ²μ§Έ μ€μ request-line μ΄λ€.
request-line = method SP request-target SP HTTP-version CRLF
method ν ν°μ λμ 리μμ€λ₯Ό μ€ννκΈ° μν μμ² λ©μλλ₯Ό νμνλ€. μμ² λ©μλλ λμλ¬Έμλ₯Ό ꡬλΆνλ€.
request-targetμ Section 5.3μ μ μλ λλ‘ μμ²μ μ μ©ν λμ 리μμ€λ₯Ό μλ³νλ€.
μ ν¨νμ§ μμ request-lineμ μμ μλ 400(Bad Request) μ€λ₯ λλ 301(Moved Permanently) 리λ€μ΄λ νΈλ‘ μλ΅ν΄μΌ νλ©°, request-targetμ μ μ ν μΈμ½λ©λμ΄μΌ νλ€.(SHOULD)
μ ν¨νμ§ μμ request-lineμ μμ² μ²΄μΈμ λ°λΌ 보μ νν°λ₯Ό μ°ννλλ‘ μλμ μΌ λ‘ μ‘°μλ μ μμΌλ―λ‘ μμ μλ 리λ€μ΄λ νΈ μμ΄ μμ²μ μλ μμ νκ³ μ²λ¦¬ν΄μλ μλλ€.(SHOULD NOT)
HTTPλ Section 2.5μμ μ€λͺ ν κ²μ²λΌ request-lineμ κΈΈμ΄μ λν΄ λ―Έλ¦¬ μ μλ μ νμ λ μ§ μλλ€.
ꡬνν κ²λ³΄λ€ λ κΈ΄ λ©μλλ₯Ό μμ ν μλ²λ 501(Not Implemented)μν μ½λ λ‘ μλ΅ν΄μΌ νλ€.(SHOULD)
request-targetμ ꡬ문 λΆμνλ €λ URIλ³΄λ€ κΈ΄ 414(URI Too Long)μν μ½λλ‘ μλ΅ν΄μΌ νλ€.(MUST)([RFC95231]μ Section 6.5.12 μ°Έμ‘°)
λͺ¨λ HTTP λ°μ μμ μμ μλ, μ΅μ 8000 octet κΈΈμ΄μ request-lineμ, μ§μνλ κ²μ κΆμ₯ν λ€.(RECOMMENDED)
3.1.2 Status Line
μλ΅ λ©μμ§μ 첫 λ²μ§Έ μ€μ status-line μ΄λ€.
status-line = HTTP-version SP status-code SP reason-phrase CRLF
reason-phrase μμλ μ«μ μν μ½λμ κ΄λ ¨λ ν μ€νΈ μ€λͺ μ μ 곡νλ μ μΌν λͺ©μ μΌλ‘ μ‘΄μ¬νλ€.
ν΄λΌμ΄μΈνΈλ reason-phase λ΄μ©μ 무μν΄μΌ νλ€.(SHOULD)
reason-phrase = *( HTAB / SP / VCHAR / obs-text )
3.2 Header Fields
κ° ν€λ νλλ λμλ¬Έμλ₯Ό ꡬλΆνμ§ μλ νλ μ΄λ¦ λ€μ μ½λ‘ (":"), μ νμ μμ 곡백 (OWS), νλ κ°, μ νμ λ€μ 곡백(OWS)μΌλ‘ ꡬμ±λλ€.
header-field = field-name ":" OWS field-value OWS
3.2.1 Field Extensibility
μ§μ λ λ©μμ§μ μ¬μ©λλ ν€λ νλμ κ°μμλ μ νμ΄ μλ€.
field-nameμ΄ Connection ν€λ νλ(Section 6.1)μ λμ΄λμ΄ μμ§ μκ±°λ νμκ° μ΄λ¬ ν νλλ₯Ό μ°¨λ¨νκ±°λ λ³ννλλ‘ νΉλ³ν ꡬμ±λμ΄ μμ§ μλ κ²½μ°, νλ‘λ μΈμνμ§ λͺ»νλ ν€λ νλλ₯Ό μ λ¬ν΄μΌ νλ€.(MUST)
λ€λ₯Έ μμ μλ μΈμν μ μλ ν€λ νλλ₯Ό 무μν΄μΌ ν λ€.(SHOULD)
μ μλ λͺ¨λ ν€λ νλλ [RFC7131] Section 8.3μ μ€λͺ λ λλ‘ "Message Headers" λ μ§μ€νΈλ¦¬μ IANAμ λ±λ‘λμ΄μΌ νλ€.
3.2.2 Field Order
ν€λ νλμ μμλ μ€μνμ§ μμΌλ μμ² μ Host, μλ΅ μ Date λ± μ μ΄ λ°μ΄ν°κ° ν¬ν¨λ ν€λ νλλ₯Ό λ¨Όμ λ³΄λ΄ κ΅¬ν μ λ©μμ§λ₯Ό μ²λ¦¬νμ§ μμ μκΈ°λ₯Ό κ²°μ νλ κ²μ΄ μ’λ€.
μλ²λ ν€λ νλμλ 쑰건, μΈμ¦ μ격 μ¦λͺ λλ μμ² μ²λ¦¬μ μν₯μ λ―ΈμΉ μ μλ μλμ μΌλ‘ μλͺ»λ μ€λ³΅ ν€λ νλκ° ν¬ν¨λ μ μμΌλ―λ‘ μ 체 μμ² ν€λ λΆλ¬Έμ λ°μ λκΉμ§ λμ 리μμ€μ μμ²μ μ μ©νλ©΄ μ λλ€.(MUST NOT)
λ°μ μλ ν€λ νλμ μ 체 νλ κ°μ΄ μΌνλ‘ κ΅¬λΆλ λͺ©λ‘ [i.e., #(values)]μΌλ‘ μ μλμ΄ μκ±°λ ν€λ νλκ° μ μλ €μ§ μμΈ(μλ μ€λͺ μ°Έμ‘°)κ° μλ ν, λ©μμ§μ λμΌν νλ μ΄λ¦μ κ°μ§ ν€λ νλλ₯Ό μ¬λ¬κ° μμ±ν΄μλ μ λλ€.(MUST NOT)
μμ μλ κ° νμ νλ κ°μ μΌνλ‘ κ΅¬λΆνμ¬ κ²°ν©λ νλ κ°μ μμλλ‘ μΆκ°νμ¬ λ©μμ§μ μλ―Έλ‘ μ λ³κ²½νμ§ μκ³ λμΌν νλ μ΄λ¦μ κ°μ§ μ¬λ¬ ν€λ νλλ₯Ό νλμ βfield-name: field-valueβ μμΌλ‘ κ²°ν©ν μ μλ€.(MAY)
λ©μμ§λ₯Ό μ λ¬ν λ νλ½μλ μ΄λ¬ν νλ κ°μ μμλ₯Ό λ³κ²½ν΄μλ μ λλ€.(MUST NOT)
μ°Έκ³ : μ€μ λ‘ "Set-Cookie" ν€λ νλ([RFC6065])λ μλ΅ λ©μμ§μ μ¬λ¬λ² λνλλ©° λͺ©λ‘ ꡬ문μ μ¬μ©νμ§ μμ λμΌν μ΄λ¦μ μ¬λ¬ ν€λ νλμμ μμ μꡬ μ¬νμ μλ°νλ€. νλ κ°μ νλμ νλ κ°μΌλ‘ κ²°ν©ν μ μμΌλ―λ‘, μμ μλ ν€λ νλλ₯Ό μ²λ¦¬νλ λμ "Set-Cookie"λ₯Ό νΉλ³ν κ²½μ°λ‘ μ²λ¦¬ν΄μΌ νλ€. (μμΈν λ΄μ©μ [Kri2001]μ Appendix A.2.3 μ λ΄λΌ.)
3.2.3 Whitespace
μ΄ λͺ μΈλ OWS(optional whitespace μ νμ 곡백), RWD(required whitespace νμ 곡백)λ° BWS(bad whitespace "λΆλ" 곡백)μ μ¬μ©μ λνλ΄λ μΈ κ°μ§ κ·μΉμ μ¬μ©νλ€.
κ°λ μ±μ ν₯μμν€κΈ° μν΄ μ νμ μΈ κ³΅λ°±(OWS)μ μ νΈνλ νλ‘ν μ½ μμμ κ²½μ°, λ°μ μλ λ¨μΌ SPλ‘μ μ νμ μΈ κ³΅λ°±(OWS)λ₯Ό μμ±ν΄μΌ νλ€. (SHOULD)
κ·Έλ μ§ μμκ²½μ°, λ°μ μλ λ΄λΆ λ©μμ§ νν°λ§ μ€μ μ ν¨νμ§ μκ±°λ μνμ§ μλ νλ‘ν μ½ μμλ₯Ό νμ΄νΈ μμνλλ° νμν κ²½μ°λ₯Ό μ μΈνκ³ μ νμ 곡백μ μμ±ν΄μλ μ λλ€.(SHOULD NOT)
RWS κ·μΉμ νλ ν ν°μ λΆλ¦¬νκΈ° μν΄ νλ μ΄μμ μ ν 곡백 octetsμ΄ νμν κ²½μ°μ μ¬μ©λλ€.
λ°μ μλ λ¨μΌ SPλ‘μ RWSλ₯Ό μμ±ν΄μΌ νλ€.(SHOULD)
BWS κ·μΉμ μ€μ§ μμ¬μ μΈ μ΄μ λ‘ μ νμ μΈ κ³΅λ°±(OWS)μ νλ½νλ λ¬Έλ²μμ μ¬μ©λλ€.
λ°μ μλ λ©μμ§μμ BWSλ₯Ό μμ±ν΄μλ μλλ€.(MUST NOT)
μμ μλ μ΄λ¬ν μλͺ»λ 곡백μ ꡬ문 λΆμν ν νλ‘ν μ½ μμλ₯Ό ν΄μνκΈ° μ μ μ κ±°ν΄μΌ νλ€.(MUST)
3.2.4 Field Parsing
λ©μμ§λ κ°λ³ ν€λ νλ μ΄λ¦κ³Ό λ 립μ μΌλ‘ μΌλ°μ μΈ μκ³ λ¦¬μ¦μ μ¬μ©νμ¬ κ΅¬λ¬Έ λΆμλλ€.
ν€λ field-nameκ³Ό μ½λ‘ μ¬μ΄μλ κ³΅λ°±μ΄ νμ©λμ§ μλλ€.
μλ²λ μλ΅ μ½λκ° 400(Bad Request)κ³Ό ν¨κ» ν€λ νλ μ΄λ¦κ³Ό μ½λ‘ μ¬μ΄μ κ³΅λ°±μ΄ ν¬ν¨λ μμ λ μμ² λ©μμ§ λ₯Ό κ±°λΆν΄μΌ νλ€.(MUST)
νλ½μλ λ©μμ§λ₯Ό λ€μ΄ μ€νΈλ¦ΌμΌλ‘ μ λ¬νκΈ° μ μ μλ΅ λ©μμ§μμ μ΄λ¬ν 곡백μ λͺ¨λ μ κ±°ν΄μΌ νλ€.(MUST)
μμ¬μ μΌλ‘, HTTP ν€λ νλ κ°μ κ° μ¬λ¬ μ€ μμ μ΅μ νλ μ΄μμ 곡백 λλ μν ν(obs- fold)μ λμ΄ μ¬λ¬μ€λ‘ νμ₯ν μ μμλ€.
λ°μ μλ λ©μμ§κ° λΌμΈ ν΄λ©(μ¦, obs-fold κ·μΉκ³Ό μΌμΉνλ field- value ν¬ν¨)μ ν¬ν¨νλ λ©μμ§λ₯Ό μμ±ν΄μλ μλλ€. λ¨, message/http λ―Έλμ΄ νμ λ΄μμ ν¨ν€μ§ λλλ‘ μλλκ²λ€μ νμ©νλ€. (MUST NOT)
message/http 컨ν μ΄λ λ΄μ μλ μμ² λ©μμ§μμ obs-foldλ₯Ό μμ νλ μλ²λ 400(Bad Request)μ λ°μ‘νμ¬ λ©μμ§λ₯Ό κ±°λΆν΄μΌ νλ€.(MUST)
message/http 컨ν μ΄λ λ΄μ μλ μλ΅ λ©μμ§μμ obs-foldλ₯Ό μμ νλ νλ½μ λλ κ²μ΄νΈμ¨μ΄λ λ©μμ§λ₯Ό μμ νκ³ 502(Bad Gateway) μλ΅μΌλ‘ λ체ν΄μΌ νλ€. (MUST)
message/http 컨ν μ΄λ λ΄μ μλ μλ΅ λ©μμ§μμ obs-foldλ₯Ό μμ νλ μ¬μ©μ μμ΄μ νΈλ νλ κ°μ ν΄μνκΈ° μ μ, μμ λ κ° obs-foldλ₯Ό νλ λλ λ λ§μ SP octets μΌλ‘ λμ²΄ν΄ μΌ νλ€.(MUST)
μλ‘ μ μλ ν€λ νλλ νλ κ°μ US-ASCII octetμΌλ‘ μ νν΄μΌ νλ€.(SHOULD)
μμ μλ νλ λ΄μ©(obs-text)μ λ€λ₯Έ octetμ λΆν¬λͺ λ°μ΄ν°λ‘ μ²λ¦¬ν΄μΌ νλ€.(SHOULD)
3.2.5 Field Limits
μ²λ¦¬νλ €λ κ²λ³΄λ€ ν° μμ² ν€λ νλ λλ νλ μ§ν©μ μμ νλ μλ²λ μ μ ν 4xx(Client Error)μν μ½λλ‘ μλ΅ν΄μΌ νλ€.(MUST)
μ΄λ¬ν ν€λ νλλ₯Ό 무μνλ©΄ μλ²μ smuggling 곡격 μ·¨μ½μ±μ΄ μ¦κ°νλ€(Section 9.5).
3.2.6 Field Value Components
λλΆλΆμ HTTP ν€λ νλ κ°μ 곡백 λλ νΉμ κ΅¬λΆ λ¬Έμλ‘ κ΅¬λΆλ μΌλ° ꡬ문 κ΅¬μ± μμ (token, quoted-string λ° comment)λ₯Ό μ¬μ©νμ¬ μ μλλ€. κ΅¬λΆ κΈ°νΈλ ν ν° (DQUOTE and β(),/:;<=>?@[\]{}")μ νμ©λμ§ μλ US-ASCII μκ°μ λ¬Έμ μ§ν©μμ μ νλλ€.
ν μ€νΈ λ¬Έμλ double-quoteλ‘ λ¬Άμ¬ μμΌλ©΄ νλμ κ°μΌλ‘ λΆμλλ€.
quoted-string κ°μ μ²λ¦¬νλ μμ μλ quoted-pairλ₯Ό λ°±μ¬λμλ‘ octetμ μν΄ λ체λ κ² μ²λΌ μ²λ¦¬ν΄μΌ νλ€.(MUST)
λ°μ μλ DQUOTEμ λ°±μ¬λμ octetsμ ν΄λΉ λ¬Έμμ μΈμ©ν΄μΌ νλ κ²½μ°λ₯Ό μ μΈνκ³ quoted-stringμμ quoted-pairλ₯Ό μμ±λ©΄ μ λλ€.(SHOULD NOT)
λ°μ μλ κ΄νΈ[β(βandβ)β]μ backslash octetsλ₯Ό ν΄λΉ μ£Όμμ μΈμ©ν΄μΌ νλ κ²½μ°λ₯Ό μ μΈνκ³ comment λ΄μ quoted-pairλ₯Ό μμ±νλ©΄ μ λλ€.(SHOULD NOT)
3.3 Message Body
HTTP λ©μμ§μ λ©μμ§ λ³Έλ¬Έ(μλ κ²½μ°)μ ν΄λΉ μμ² λλ μλ΅μ νμ΄λ‘λ λ³Έλ¬Έμ μ λ¬νλλ° μ¬μ©λλ€.
λ©μμ§μμ λ©μμ§ λ³Έλ¬Έμ΄ νμ©λλ μκΈ°μ λν κ·μΉμ μμ²κ³Ό μλ΅μ λ°λΌ λ€λ₯΄λ€.
μμ²μμ λ©μμ§ λ³Έλ¬Έμ΄ μμΌλ©΄ Content-Length λλ Transfer-Encoding ν€λ νλλ‘ νμλλ€. μλ΅μμ λ©μμ§ λ³Έλ¬Έμ μ‘΄μ¬ μ¬λΆλ μλ΅νλ μμ² λ©μλμ μλ΅ μν μ½λ(Section 3.1.2)μ λ°λΌ λ¬λΌμ§λ€.
HEAD μμ² λ©μλ([RFC7231]μ Section 4.3.2)μ λν μλ΅μ κ΄λ ¨ μλ΅ ν€λ νλ(μ:Transfer-Encoding, Content-Length, λ±)κ° μλ κ²½μ° μμ² λ©μλκ° GET([RFC7231]μ Section 4.3.1) λμμ λμ κ°λ§ λνλ΄λ―λ‘ λ©μμ§ λ³Έλ¬Έμ ν¬ν¨νμ§ μλλ€.
CONNECT μμ² λ©μλ([RFC7231]μ Section 4.3.6)μ 2xx (Successful) μλ΅μ λ©μμ§ λ³Έλ¬Έ λμ ν°λ λͺ¨λλ‘ μ ννλ€.
λͺ¨λ 1xx (informational), 204 (No Content) λ° 304 (Not Modified) μλ΅μλ λ©μμ§ λ³Έλ¬Έμ΄ ν¬ν¨λμ§ μλλ€.
λ€λ₯Έ λͺ¨λ μλ΅μλ λ©μμ§ λ³Έλ¬Έμ΄ ν¬ν¨λμ§λ§, λ³Έλ¬Έμ κΈΈμ΄λ 0μΌ μ μλ€.
3.3.1 Transfer-Encoding
Transfer-Encoding ν€λ νλμλ λ©μμ§ λ³Έλ¬Έμ νμ±νκΈ° μν΄ νμ΄ λ‘λ λ³Έλ¬Έμ μ μ©λ(λ λ μ μ©λ ) μ μ‘ μ½λ© μμμ ν΄λΉνλ μ μ‘ μ½λ© μ΄λ¦μ λμ΄νλ€.
Transfer-Encoding = 1#transfer-coding
HTTPμ κ²½μ°, Transfer-Encodingμ μ£Όλ‘ λμ μΌλ‘ μμ±λλ νμ΄ λ‘λλ₯Ό μ ννκ² μ§μ νκ³ μ μ‘ ν¨μ¨μ± λλ 보μμ μν΄μλ§ μ μ©λλ νμ΄ λ‘λ μΈμ½λ©κ³Ό, μ νλ 리μμ€μ νΉμ§μΈ νμ΄ λ‘λ λ‘ κ΅¬λΆνκΈ° μν κ²μ΄λ€.
νμ΄ λ‘λ λ³Έλ¬Έ ν¬κΈ°λ₯Ό 미리 μμ§ λͺ»ν λ λ©μμ§ νλ μμ μ€μν μν μ νκΈ° λλ¬Έμ μμ μλ μ² μ μ‘ μ½λ©(Section 4.1)μ ꡬ문 λΆμν μ μμ΄μΌ νλ€. (MUST)
λ°μ μλ λ©μμ§ λ³Έλ¬Έ μ λλ² μ΄μ μ²ν¬ λΆν λ λ©μμ§λ₯Ό μ μ©ν΄μλ μ λλ€.(MUST NOT) (i.e., μ΄λ―Έ μ²ν¬ λΆν λ λ© μμ§λ νμ©λμ§ μλλ€).
μ²ν¬ λΆν μ΄μΈμ μ μ‘ μ½λ©μ΄ μμ² νμ΄ λ‘λ λ³Έλ¬Έμ μ μ©λλ κ²½ μ°, λ°μ μλ λ©μμ§κ° μ¬λ°λ₯΄κ² νλ μ λμλμ§ νμΈνκΈ° μν΄ μ΅μ’ μ μ‘ μ½λ©μΌλ‘ μ²ν¬ λΆ ν μ μ μ©ν΄μΌ νλ€.(MUST)
λ€μ
Transfer-Encoding: gzip, chunked
λ©μμ§ λ³Έλ¬Έμ ꡬμ±νλ λμ νμ΄ λ‘λ λ³Έλ¬Έμ΄ gzip μ½λ©μ μ¬μ©νμ¬ μμΆλ λ€μ chunked μ½λλ₯Ό μ¬μ©νμ¬ λΆν λ κ²μ λνλΈλ€.
HEAD μμ²μ μλ΅ νκ±°λ λλ 304(Not Modified) μλ΅ ([RFC7232]μ Section 4.1)μ ν΅ν΄ GET μμ²μ μλ΅ νκ±°λ, λ©μμ§ λ³Έλ¬Έμ ν¬ν¨νκ±°λ 쑰건 μλ GET μμ²μΈ κ²½μ° μμλ²κ° λ©μμ§ λ³Έλ¬Έμ μ μ‘ μ½λ©μ μ μ© νμκ±°λΌκ³ νμνκΈ° μν΄ Transfer-Encodingμ΄ λ³΄λ΄μ§ μ μλ€.(MAY)
μλ²λ μν μ½λκ° 1xx (Informational) λλ 204 (No Content) μλ΅μμ Transfer- Encoding ν€λ νλλ₯Ό 보λ΄λ©΄ μ λλ€.(MUST NOT)
μλ²λ CONNECT μμ²μ 2xx (Successful) μλ΅μμ Transfer-Encoding ν€λ νλλ₯Ό λ³΄λ΄ λ©΄ μ λλ€.(MUST NOT) ([RFC7131]μ Section 4.3.6).
HTTP/1.1μ Transfer-Encodingμ΄ μΆκ°λμλ€.
ν΄λΌμ΄μΈνΈλ μλ²κ° HTTP/1.1(μ΄μ)μμ²μ μ²λ¦¬ ν μ μμ κ²μ΄λΌκ³ μμ§ λͺ»νλ ν Transfer-Encodingμ ν¬ν¨νλ μμ²μ 보λ΄λ©΄ μ λλ€.(MUST NOT)
ν΄λΉ μμ²μ΄ HTTP/1.1(λλ κ·Έ μ΄μ)μ λνλ΄μ§ μλ ν μλ²λ Transfer-Encodingμ ν¬ν¨νλ μλ΅μ 보λ΄λ©΄ μ λλ€.(MUST NOT)
μ΄ν΄νμ§ λͺ»νλ μ μ‘ μ½λ©κ³Ό ν¨κ» μμ² λ©μμ§λ₯Ό λ°λ μλ²λ 501 (Not Implemented)λ‘ μλ΅ν΄μΌ νλ€.(SHOULD)
3.3.2 Content-Length
λ©μμ§μ Transfer-Encoding ν€λ νλκ° μλ κ²½μ°, Content-Length ν€λ νλλ μ μ¬μ νμ΄ λ‘λ λ³Έλ¬Έμ λν΄ μμλλ ν¬κΈ°λ₯Ό 10μ§μλ‘ μ 곡ν μ μλ€.
Content-Length = 1*DIGIT
λ°μ μλ Transfer-Encoding ν€λ νλλ₯Ό ν¬ν¨νλ λ©μμ§μμ Content-Length ν€λ νλλ₯Ό 보λ΄λ©΄ μ λλ€.(MUST NOT)
Transfer-Encoding μμ΄ μ μ‘νκ³ μμ² λ©μλκ° λλ΄λ νμ΄ λ‘λ λ³Έλ¬Έμ λν μλ―Έλ₯Ό μ μ ν λ μ¬μ©μ μμ΄μ νΈλ μμ² λ©μμ§μ Content-Lengthλ₯Ό 보λ΄μΌ νλ€.(SHOULD)
μμ² λ©μμ§μ νμ΄ λ‘λ λ³Έλ¬Έμ΄ ν¬ν¨λμ΄ μμ§ μκ³ λ©μλ μλ―Έλ‘ μ΄ μ΄λ¬ν λ³Έλ¬Έμ μμνμ§ μλ κ²½μ° μ¬μ©μ μμ΄μ νΈλ Content-length ν€λ νλλ₯Ό λ°μ‘ν΄λ μ λλ€.(SHOULD NOT)
μλ²λ HEAD μμ²μ λν μλ΅μΌλ‘ Content-Length ν€λ νλλ₯Ό μ μ‘ν μ μλ€. (MAY)
μλ²λ λμΌν μμ²μμ GET λ©μλλ₯Ό μ¬μ©ν κ²½μ° μλ΅μ νμ΄λ‘λ λ³Έλ¬Έμ μ μ‘ λ 10μ§μμ Content-Lengthμ field-valueκ° κ°μ§ μλ ν, μλ²λ μλ΅μΌλ‘ Content-Lengthλ₯Ό 보λ΄μλ μ λλ€.(MUST NOT)
μλ²λ μ‘°κ±΄λΆ GET μμ²μ λν΄ 304 (Not Modified) μλ΅μ Content-Length ν€λ νλλ₯Ό λ³΄λΌ μ μλ€.
νλ κ°μ΄ λμΌν μμ²μ λν 200 (OK) μλ΅μ νμ΄λ‘λ λ³Έλ¬Έμμ μ μ‘λ 10μ§μμ Content-Lengthμ field-valueκ° κ°μ§ μλ ν, μλ²λ μλ΅μΌλ‘ Content-Lengthλ₯Ό 보λ΄μλ μ λλ€.(MUST NOT)
μλ²λ μν μ½λκ° 1xx (Informational) λλ 204 (No Content)μΈ μλ΅μμ Content- Lengthν€λ νλλ₯Ό 보λ΄λ©΄ μ λλ€.(MUST NOT)
μλ²λ CONNECT μμ²μ λν 2xx (Successful) μλ΅μμ Content-Length ν€λ νλλ₯Ό 보 λ΄μλ μ λλ€.(MUST NOT) ([RFC7231]μ Section 4.3.6)
μμ μ μλ κ²½μ°μ λ³λλ‘, Transfer-Encodingμ΄ μλ κ²½μ°, μ 체 ν€λ λΆλ¬Έμ 보λ΄κΈ° μ μ νμ΄ λ‘λ λ³Έλ¬Έ ν¬κΈ°λ₯Ό μκ³ μλ μμλ²λ Content-Length ν€λ νλλ₯Ό 보λ΄μΌ νλ€. (SHOULD)
Content-Length νλ κ°μ΄ 0λ³΄λ€ ν¬κ±°λ κ°μΌλ©΄ μ ν¨νλ€.
νμ΄ λ‘λ κΈΈμ΄μ λν μ¬μ μ μ λ μ νμ΄ μμΌλ―λ‘ μμ μλ μ μ¬μ μΌλ‘ ν° 10μ§μ μ«μλ₯Ό μμΈ‘νκ³ μ μ λ³ν μ€λ² νλ‘μ° λ‘ μΈν ꡬ문 λΆμ μ€λ₯λ₯Ό λ°©μ§ν΄μΌ νλ€.(MUST)
μ¬λ¬ Content-Length ν€λ νλμ ν¨κ» λμΌν 10μ§μλ‘ κ΅¬μ±νλ field-valueλ₯Ό κ°μ§κ³ μκ±°λ, λλ λ¨λ Content-Length ν€λ νλμ ν¨κ» λμΌν 10μ§μμ 리μ€νΈλ‘ ꡬμ±νλ field-valueλ₯Ό κ°μ§κ³ μκ±°λ(μ: βContent-length:42, 42β), μ€λ³΅λ Content-Length ν€λ νλκ° μμ±λκ±°λ μ μ€νΈλ¦Ό λ©μμ§ μ²λ¦¬κΈ°μ μν΄ κ²°ν©λ κ²μΌλ‘ λνλλ λ©μμ§λ₯Ό λ°μ κ²½μ°, κ·Έλ μμ μλ μ ν¨νμ§ μμ λ©μμ§λ₯Ό κ±°λΆνκ±°λ, λ©μμ§ λ³Έλ¬Έ κΈΈμ΄λ₯Ό κ²°μ νλκ² λλ μ μ‘λκΈ° μ μ 10μ§μλ₯Ό ν¬ν¨νλ μ ν¨ν λ¨λ Content-Lengthμ ν¨κ» μ€λ³΅λ field-value λ₯Ό λ체ν΄μΌ νλ€.(MUST)
3.3.3 Message Body Length
λ©μμ§ λ³Έλ¬Έμ κΈΈμ΄λ λ€μ μ€ νλμ μν΄ κ²°μ λλ€(μ°μ μμ μμλλ‘):
λ³Έλ¬Έ μ°Έμ‘°.
3.4 Handling Imcomplete Messages
μΌλ°μ μΌλ‘ μ·¨μλ μμ² λλ νΈλ¦¬κ±° λ μκ° μ΄κ³Ό μμΈ λλ¬Έμ λ°μνλ λΆμμ ν μμ² λ©μμ§λ₯Ό μμ νλ μλ²λ 컀λ₯μ μ λ«κΈ° μ μ μ€λ₯ μλ΅μ λ³΄λΌ μ μλ€.(MAY)
컀λ₯μ μ΄ μ‘°κΈ°μ λ«νκ±°λ μ²ν¬ λΆν λ μ μ‘ μ½λ©μ λμ½λ© νλ λ° μ€ν¨ν λ λ°μν μ μλ λΆμμ ν μλ΅ λ©μμ§λ₯Ό μμ νλ ν΄λΌμ΄μΈνΈλ λ©μμ§λ₯Ό λ°λμ λΆμμ ν λ©μμ§λ‘ κΈ°λ‘ν΄μΌ νλ€.(MUST)
RFC 7230 αα ₯α«αα §α¨ pdf
μΈμ½λ©μ μ’ λ£νλ zero-sized(0)μ μ²ν¬κ° μμ λμ§ μμΌλ©΄ μ²ν¬ μ μ‘ μ½λ©μ μ¬μ©νλ λ©μμ§ λ³Έλ¬Έμ λΆμμ νλ€.
μμ λ λ©μμ§ λ³Έλ¬Έμ ν¬κΈ°(in octets)κ° Content-Lengthμμ μ§μ ν κ°λ³΄λ€ μμ κ²½μ° μ ν¨ν Content-Lengthλ₯Ό μ¬μ©νλ λ©μμ§λ λΆμμ νλ€.
3.5 Message Parsing Robustness
HTTP/1.1 μ¬μ©μ μμ΄μ νΈλ μΆκ° CRLFλ‘ μμνκ±°λ μμ²μ λ°λμ λ°λ₯΄λ©΄ μ λλ€.(MUST NOT)
line-endingμΌλ‘ μμ² λ©μμ§ λ³Έλ¬Έμ μ’ λ£ν΄μΌ νλ κ²½μ°, μ¬μ©μ μμ΄μ νΈλ λ©μμ§ λ³Έλ¬Έ κΈΈμ΄μ λΆλΆμΌλ‘μ μ’ λ£ CRLF octetμ μΈμ΄μΌ νλ€.(MUST)
HTTP μμ² λ©μμ§λ§ μ²μ·¨νκ±°λ, HTTP μμ² λ©μμ§μ΄κΈ° μν΄ start-lineμμ λνλλ λ΄μ©μ μ²λ¦¬νλ μλ²κ° μμ λμ΄λ μκ²©ν¨ μμΈ μΈμλ HTTP-message λ¬Έλ²κ³Ό μΌμΉνμ§ μλ octetsμ μνΈμ€λ₯Ό μμ νλ κ²½μ°, μλ²λ 400 (Bad Request)μλ΅μΌλ‘ μλ΅ν΄μΌ νλ€. (SHOULD)
Last updated
Was this helpful?