RFC 7230 (HTTP/1.1)
Hypertext Transfer Protocol (HTTP/1.1) : Message Syntax and Routing
Last updated
Was this helpful?
Hypertext Transfer Protocol (HTTP/1.1) : Message Syntax and Routing
Last updated
Was this helpful?
The Hypertext Transfer Protocol (HTTP) is a stateless application-level protocol for distributed, collaborative, hypertext information systems.
1. βMessage Syntax and Routingβ (ν΄λΉ λ¬Έμ)
2. βSemantics and Contentβ [RFC7231]
3. βConditional Requestsβ [RFC7232]
4. βRange Requestsβ [RFC7233]
5. βCachingβ [RFC7234]
6. βAuthenticationβ [RFC7235]
HTTPλ World Wide Web (WWW) μν€ν μ²λ₯Ό μν΄ λ§λ€μ΄ μ‘κ³ , μκ°μ΄ μ§λ¨μ λ°λΌ μλ μμ΄λ νμ΄νΌν μ€νΈ μμ€ν μ νμ₯μ±μ λν μꡬλ€μ μ§μνκΈ° μν΄ λ°μ νλ€. μν€ν μ²μ λλΆλΆμ΄ μ©μ΄μ HTTP μ μλ₯Ό μν΄ μ¬μ©λλ ꡬ문λ€μ λ°μλμλ€.
HTTPλ μ λ’°μ± μλ μ μ‘ κ³μΈ΅ λλ μΈμ κ³μΈ΅ βconnectionβμ (Section 6) λ©μμ§ κ΅ν (Section 3)μ μν΄ μλλλ μνμλ μμ²/μλ΅ νλ‘ν μ½μ΄λ€. HTTP βclient(μ΄ν ν΄λΌμ΄μΈ νΈ)β λ νλ μ΄μμ HTTP μμ²λ€μ μ μ‘νκΈ° μν λͺ©μ μΌλ‘ 컀λ₯μ μ μλ²μ μ€λ¦½νλ νλ‘ κ·Έλ¨μ΄λ€. HTTP βserver(μ΄ν μλ²)βλ HTTP μμ²μ μ²λ¦¬νκ³ HTTP μλ΅μ 보λ΄κΈ° μν΄ μ»€λ₯μ μ νμ©νλ νλ‘κ·Έλ¨μ΄λ€.
user agent(μ΄ν μ¬μ©μ μμ΄μ νΈ)
μμ²μ μμνλ λ€μν ν΄λΌμ΄μΈνΈ νλ‘κ·Έλ¨ (λΈλΌμ°μ , μ€νμ΄λ (μΉ κΈ°λ° λ‘λ΄), 컀맨λ λΌμΈ ν΄, λͺ¨λ°μΌ μ±)
origin server(μ΄ν μμλ²)
νΉμ λμ 리μμ€μ λ ν κΆν μλ μλ΅μ μμ±ν μ μλ νλ‘κ·Έλ¨
λ€μ μμλ URI μμ GET μμ²μ μν μΌλ°μ μΈ λ©μμ§ κ΅νμ 보μ¬μ€λ€.
"http://www.example.com/hello.txt":
ν΄λΌμ΄μΈνΈ μμ²:
GET /hello.txt HTTP/1.1 User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.71 zlib/1.2.3 Host: www.example.com Accept-Lanuage: en, mi
μλ² μλ΅:
HTTP/1.1 200 OK Date: Mon, 27 Jul 2009 12:28:53 GMT Server: Apache Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT ETag: "34aa387-d-1568eb00" Accept-Ranges: bytes Content-Length: 51 Vary: Accept-Encoding Content-Type: text/plain Hello World! My payload includes a trailing CRLF.
보ν΅μ HTTP μ¬μ©μ μμ΄μ νΈλ κ°μ μ ν리μΌμ΄μ , μν₯κΈ°κΈ°, 체μ€κ³, μ€ν¬λ¦½νΈλ₯Ό κ°±μ νλ firmware, command-line νλ‘κ·Έλ¨, λͺ¨λ°μΌ μ±, κ·Έλ¦¬κ³ λ€μν λͺ¨μκ³Ό ν¬κΈ°μ ν΅μ κΈ°κΈ°λ₯Ό ν¬ν¨νλ€. λ§μ°¬κ°μ§λ‘, 보ν΅μ HTTP μ μλ²λ ν μλν μ₯μΉ, λ€νΈμνΉμ ꡬμ±νλ λΆν, μ¬λ¬΄μ© κΈ°κ³, μμ¨ λ‘λ΄, λ΄μ€ νΌλ, νΈλν½ μΉ΄λ©λΌ, κ΄κ³ μ νμ, κ·Έλ¦¬κ³ λΉλμ€-λ°°μ‘ νλ«νΌμ ν¬ν¨νλ€.
μ€κ°μμ 3κ°μ§ νν
Proxy
Gateway (reverse proxy)
Tunnel: λ©μμ§ λ³κ²½μμ΄ 2κ°μ 컀λ₯μ μ μ¨κ²¨μ§ μ€κ°μλ‘μ¨ μν (ex, TLS)
μ©μ΄: upstream, downstream, inbound, outbound
μλ²λ 컀λ₯μ μ΄ λ³΄μλμ΄ μκ³ ν΄λΉ μμ΄μ νΈμ νΉμ λμ΄ μμ§ μλν λμΌν 컀λ₯μ μ λν λκ°μ μμ² μ΄ λμΌν μ¬μ©μ μμ΄μ νΈμμ μ¨ κ²μΌλ‘ κ°μ ν΄μλ μ λλ€. (MUST NOT)
"cache"λ μ΄μ μλ΅ λ©μμ§μ λ‘컬 보κ΄μμ΄κ³ λ©μμ§μ μ μ₯, κ²μ, μμ λ₯Ό κ΄λ¦¬ νλ μλΈ μμ€ν μ΄λ€. μΊμλ μΊμ κ°λ₯ν μλ΅μ μ μ₯νμ¬ ν₯ν λμΌν μμ²μ λν μλ΅ μ κ°κ³Ό λ€νΈμν¬ λμν μ¬μ©μ μ€μΈλ€. μΊμλ μλ²κ° ν°λ μν μ νλ λμμλ μ¬μ©λ μ μμ§λ§ κ·Έκ²μ μ μΈνκ³ λ ν΄λΌμ΄μΈνΈ, μλ² λͺ¨λμμ μ¬μ© κ°λ₯νλ€.
λ°μ μλ λ°μ μκ° κ±°μ§μ΄λΌλ μλ―Έλ₯Ό μ λ¬νλ νλ‘ν μ½ μμλ₯Ό μμ±νλ©΄ μ λλ€.(MUST NOT)
λ°μ μλ ABNF κ·μΉμ λμνλ μ μλ λ¬Έλ²μ λ§μ§ μλ νλ‘ν μ½ μμλ₯Ό μμ±νλ©΄ μ λλ€.(MUST NOT)
μ§μ λ λ©μ μ§ λ΄μμ, λ°μ μλ λ€λ₯Έ μν (i.e., ν΄λΉ λ©μμ§μ λ°μ μμκ² μλ μν )μ μ°Έκ°μλ§ μμ±ν μ μλ νλ‘ν μ½ μμλ ꡬ문 λμμ μμ±νλ©΄ μ λλ€.(MUST NOT)
μμ λ νλ‘ν μ½ μμκ° λΆμλμμ λ, μμ μλ μμ μμ μν μ ν΄λΉνλ μ μ ν κΈΈμ΄μ κ°κ³Ό λΆμν μ μμ΄μΌ νλ©° ABNF κ·μΉλ€μ λμνλ μ μλ λ¬Έλ²μ μΌμΉν΄μΌ νλ€.(MUST)
μ΅μν, μμ μλ λ€λ₯Έ λ©μμ§μ λμΌν νλ‘ν μ½ μμμ λν΄ μμ±ν κ°λ§νΌ νλ‘ν μ½ μμ κΈΈμ΄λ₯Ό ꡬ문λΆμνκ³ μ²λ¦¬ν μ μμ΄μΌνλ€.(MUST)
μμ μλ μμ μκ° ν΄λΉ μλ―Έλ‘ μ μν΄ μμλ κ²μ μλͺ» ꡬννλ€κ³ (κ²½νμ΄λ ꡬμ±μ ν΅ν΄) νλ¨νμ§ μλ ν, μμ μλ μ΄ λͺ μΈμ μ μλ μλ―Έλ‘ μ λ°λΌ μμ λ νλ‘ν μ½ μμλ₯Ό ν΄μν΄μΌ νλ€.(MUST)
λ¬λ¦¬ λͺ μλμ§ μμ ν, μμ μλ μλͺ»λ ꡬ쑰μμ μ¬μ© κ°λ₯ν νλ‘ν μ½ μμλ₯Ό 볡ꡬνλ €κ³ μλν μ μλ€.(MAY)
HTTPλ ꡬνμ λ¬Έλ§₯ λ°°μΉμ λͺ©μ μ λ°λΌ μ μ ν κΈΈμ΄κ° λ§€μ° λ€μνκΈ° λλ¬Έμ λλΆλΆμ νλ‘ν μ½ μμμ λν΄ νΉμ ν κΈΈμ΄ μ νμ κ°μ§κ³ μμ§ μλλ€.
λν, HTTPλ 보μμ μ§μ μ μΈ μν₯μ λ―ΈμΉλ κ²½μ°λ₯Ό μ μΈνκ³ νΉμ μ€λ₯ μ²λ¦¬ λ©μ»€λμ¦μ μ μνμ§ μλλ°, νλ‘ν μ½μ μλ‘ λ€λ₯Έ μμ© νλ‘κ·Έλ¨μλ λ€λ₯Έ μ€λ₯ μ²λ¦¬ μ λ΅ μ΄ νμνκΈ° λλ¬Έμ΄λ€.
μλ₯Ό λ€μ΄, μΉ λΈλΌμ°μ λ Location ν€λ νλκ° ABNFμ λ°λΌ ꡬ문 λΆμλμ§ μλ μλ΅μμ ν¬λͺ νκ² λ³΅κ΅¬νκΈ°λ₯Ό μνλ λ°λ©΄, μμ€ν μ μ΄ ν΄λΌμ΄μΈνΈλ μ΄λ€ ν νμ μ€λ₯ 볡ꡬλ μννλ€κ³ κ°μ£Όν μ μλ€.
Hostμ Connection ν€λ νλλ HTTP/1.1μ€μ μ¬λΆμ κ΄κ³ μμ΄ λͺ¨λ HTTP/1.xꡬνμ μν΄ κ΅¬νλμ΄μΌ νλ€.
HTTP λ©μμ§λ₯Ό μ²λ¦¬νλ μ€κ°μ(μ¦, ν°λ μν μ νλ μ€κ°μλ₯Ό μ μΈν λͺ¨λ μ€κ°μ)λ μ λ¬ λ λ©μμ§λ‘ μμ μ HTTP-versionμ μ μ‘ν΄μΌ νλ€.(MUST)
ν΄λΌμ΄μΈνΈμ major λ²μ μ΄ μλ²μ μν΄ μ§μνλ κ°μ₯ λμ λ²μ λ³΄λ€ λμ§ μκ³ ν΄λΌμ΄μΈνΈκ° κ°μ₯ λμ λ²μ μ νΈννλ κ²μΌλ‘ μλ €μ Έ μλ€λ©΄ ν΄λΌμ΄μΈνΈλ κ°μ₯ λμ λ²μ κ³Ό λμΌν μμ²λ²μ μ μ μ‘ν΄μΌ νλ€.(SHOULD) ν΄λΌμ΄μΈνΈλ μ ν©νμ§ μμ λ²μ μ 보λ΄λ©΄ μλλ€.(MUST NOT)
μλ²κ° HTTP κ·κ²©μ μλͺ» ꡬνν κ²μΌλ‘ μλ €μ§ κ²½μ°, κ·Έλ¬λ ν΄λΌμ΄μΈνΈκ° μ μ΄λ νλμ μ μμ μΈ μμ²μ μλνκ³ μλ²κ° μμ μμ² λ²μ μ μλͺ» μ²λ¦¬νλ μλ΅ μν μ½λ λλ ν€λ νλλ₯Ό ν΅ν΄ νμΈν νμλ§ ν΄λΌμ΄μΈνΈκ° νμ μμ² λ²μ μ λ³΄λΌ μ μλ€.(MAY)
μλ²λ μλ²κ° ꡬμ±λ κ°μ₯ λμ λ²μ κ³Ό λμΌν μλ΅ λ²μ μ μ μ‘ν΄μΌ νλ©° major λ²μ μ μμ²μ μμ λ λ²μ λ³΄λ€ μκ±°λ κ°μμΌ νλ€.(SHOULD) μλ²λ νΈνλμ§ μλ λ²μ μ 보λ΄λ©΄ μ λ λ€.(MUST NOT)
ν΄λΌμ΄μΈνΈκ° HTTP μ¬μμ μλͺ» ꡬνν κ²μΌλ‘ μλ €μ§κ±°λ μμ¬λλ κ²½μ°(μ:ν΄λΌμ΄μΈνΈκ° λ²μ λ²νΈλ₯Ό μ¬λ°λ₯΄κ² ꡬ문 λΆμνμ§ λͺ»νκ±°λ μ€κ°μκ° νλ‘ν μ½μ minor λ²μ μ΄ μ£Όμ΄μ§ κ²μ λ°λ₯΄μ§ μμ λ HTTP λ²μ μ λ§Ήλͺ©μ μΌλ‘ μ λ¬νλ κ²μΌλ‘ μλ €μ§ κ²½μ°) μλ²κ° μμ²μ λν΄ HTTP/ 1.0 μλ΅μ λ³΄λΌ μ μλ€.(MAY) νλ μ΄μμ μμ² ν€λ νλ(e.g., User-Agent)κ° μ€λ₯κ° μλ κ²μΌλ‘ μλ €μ§ ν΄λΌμ΄μΈνΈκ° μ μ‘ν κ°κ³Ό κ³ μ νκ² μΌμΉνλ κ²½μ°μ κ°μ νΉμ ν΄λΌμ΄μΈνΈ μμ±μ μν΄ νΈλ¦¬κ±° λμ§ μλ ν μ΄λ¬ν νλ‘ν μ½ λ€μ΄κ·Έλ μ΄λλ₯Ό μνν΄μλ μ λλ€.(SHOULD NOT)
μ΄λ€ μ΄μ λ‘λ μλ²λ ν΄λΌμ΄μΈνΈμ μ£Όμ νλ‘ν μ½ λ²μ μλΉμ€λ₯Ό κ±°λΆνκ³ μ ν λ κ²½μ° 505(HTTP Version Not Supported)μ μλ΅μ λ³΄λΌ μ μλ€.
Uniform Resource Identifiers (URIs) [RFC3986]μ 리μμ€λ₯Ό μλ³νλ μλ¨μΌλ‘ HTTP μ 체μμ μ¬μ©λλ€.
"URI-reference", "absolute-URI", βrelative-part", "scheme", "authority", "port", "host", "path-abempty", βsegment", "query", βfragment" μ μλ URI μΌλ° ꡬ문μμ μ±νλμλ€.
λ°μ μ(sender)λ νΈμ€νΈ μλ³μκ° λΉμ΄μλ μνλ‘ βhttp" URIλ₯Ό μμ±ν΄μλ μ λλ€.(MUST NOT)
μ΄λ¬ ν URI μ°Έμ‘°λ₯Ό μ²λ¦¬νλ μμ μλ μ ν¨νμ§ μμ κ²μΌλ‘ κ±°λΆν΄μΌ νλ€.(MUST)
HTTPλ μ μ‘ νλ‘ν μ½κ³Ό λ 립μ μ΄μ§λ§, μ΄λ¦ μμ νλ‘μΈμ€λ κΆνμ μ€μ νλ TCPμ μμ‘΄νκΈ° λλ¬Έμ βhttpβ schemeμ TCPκΈ°λ° μλΉμ€μλ§ νμ λλ€.
βhttpsβ URI schemeλ μ μ¬μ μΌλ‘ HTTP μμλ²κ° μ£Όμ΄μ§ TLS-보μ 컀λ₯μ μ μν TCP ν¬νΈλ₯Ό μ²μ·¨νλ κ²μΌλ‘ κ³μΈ΅μ μΌλ‘ κ΄λ¦¬λ λ€μ μ€νμ΄μ€μ μ°κ³μ λ°λΌ μλ³μλ₯Ό μ£Όμ‘°νλ λͺ©μ μΌλ‘ μ μ λλ€.
TCP ν¬νΈ 443μ ν¬νΈ νμ κ΅¬μ± μμκ° λΉμ΄ μκ±°λ μ§μ λμ§ μμ κ²½μ°λ₯Ό μ μΈνκ³ κΈ°λ³Έκ°μ΄λ€. μ¬μ©μ μμ΄μ νΈλ 첫 λ²μ§Έ HTTP μμ²μ 보λ΄κΈ° μ μ end-to-endμ κ°λ ₯ν μνΈν ν΅ν΄ μμλ²μ λν 컀λ₯μ μ΄ μμ νμ§ νμΈν΄μΌ νλ€.(MUST)
ν¬νΈκ° schemeμ κΈ°λ³Έν¬νΈμ κ°λ€λ©΄, μΌλ°μ μΈ ννλ ν¬νΈ νμ ꡬμ±μ μλ΅νλ κ²μ΄.
OPTIONS μμ²μ μμ² λμμΌλ‘ absolute νμμΌλ‘ μ¬μ©νμ§ μμ κ²½μ°, λΉ κ²½λ‘ κ΅¬μ± μμ "/"μ μ λ κ²½λ‘μ κ°μΌλ―λ‘, μΌλ°μ μΈ νμμ β/" κ²½λ‘λ₯Ό λμ μ 곡νλ κ²μ΄λ€.
scheme κ³Ό νΈμ€νΈλ λμλ¬Έμλ₯Ό ꡬλΆνμ§ μμΌλ©° μΌλ°μ μΌλ‘ μλ¬Έμλ‘ μ 곡λλ€.
βreserved" μ§ν©μ μλ λ¬Έμ μ΄μΈμ λ¬Έμλ λ°±λΆμ¨λ‘ μΈμ½λ©λ octetsμ λμΌνλ€. μΌλ°μ μΈ νμμ ν΄λΉ λ¬Έμλ₯Ό μΈμ½λ©νμ§ μλλ€.([RFC3986])
λ€μ μΈκ°μ URIλ λλ±νλ€.
http://example.com:80/~smith/home.html
http://EXAMPLE.com/%7Esmith/home.html
http://EXAMPLE.com:/%7esmith/home.html