Appendix A. HTTP Version History

HTTPλŠ” 1990λ…„λΆ€ν„° μ‚¬μš©λ˜κ³  μžˆλ‹€. λ‚˜μ€‘μ— HTTP/0.9 라고 λΆˆλ¦¬λŠ” 첫 번째 버전은 단일 μš”μ²­ λ©”μ„œλ“œ(GET)만 μ‚¬μš©ν•˜κ³  λ©”νƒ€λ°μ΄ν„°λŠ” μ‚¬μš©ν•˜μ§€ μ•ŠλŠ” 인터넷을 ν†΅ν•œ ν•˜μ΄νΌν…μŠ€νŠΈ 데이터 전솑을 μœ„ν•œ κ°„λ‹¨ν•œ ν”„λ‘œν† μ½œμ΄μ—ˆλ‹€. [RFC1945]μ—μ„œ μ •μ˜ν•œ λŒ€λ‘œ HTTP/1.0은 λ‹€μ–‘ν•œ μš”μ²­ λ©”μ„œλ“œμ™€ MIME μœ μ‚¬ λ©”μ‹œμ§€λ₯Ό μΆ”κ°€ν•˜μ—¬ 메타데이터λ₯Ό μ „μ†‘ν•˜κ³  μš”μ²­/응닡 μ˜λ―Έλ‘ μ— μˆ˜μ • 자λ₯Ό λ°°μΉ˜ν•  수 μžˆλ„λ‘ ν–ˆλ‹€. κ·ΈλŸ¬λ‚˜ HTTP/1.0은 계측 ν”„λ½μ‹œ, 캐싱, μ˜μ†μ  컀λ„₯μ…˜μ˜ ν•„μš”μ„± λ˜λŠ” 이름 기반 가상 호슀트의 영ν–₯을 μΆ©λΆ„νžˆ κ³ λ €ν•˜μ§€ μ•Šμ•˜λ‹€.

HTTP/1.1은 μ‹ λ’°ν•  수 μžˆλŠ” κ΅¬ν˜„μ„ κ°€λŠ₯ν•˜κ²Œ ν•˜λŠ” 보닀 μ—„κ²©ν•œ μš”κ΅¬μ‚¬ν•­μ„ ν¬ν•¨ν•˜λ―€λ‘œμ¨ HTTP/1.0κ³Ό ν˜Έν™˜μ„±μ„ μœ μ§€ν•˜λ©°, HTTP/1.0 μˆ˜μ‹ μžκ°€ μ•ˆμ „ν•˜κ²Œ λ¬΄μ‹œν•˜κ±°λ‚˜ HTTP/1.1κ³Ό 톡신할 λ•Œμ—λ§Œ 전솑할 수 μžˆλŠ” κΈ°λŠ₯만 μΆ”κ°€ν•œλ‹€.

HTTP/0.9λŠ” μš”μ²­μ—μ„œ 헀더 ν•„λ“œλ₯Ό μ§€μ›ν•˜μ§€ μ•Šμ•˜κΈ° λ•Œλ¬Έμ— 이름 기반 가상 호슀트(Host ν—€ 더 ν•„λ“œμ˜ 검사에 μ˜ν•œ λ¦¬μ†ŒμŠ€ 선택)λ₯Ό μ§€μ›ν•˜λŠ” λ©”μ»€λ‹ˆμ¦˜μ΄ μ—†λ‹€. 이름 기반 가상 호슀트λ₯Ό κ΅¬ν˜„ν•˜λŠ” λͺ¨λ“  μ„œλ²„λŠ” HTTP/0.9에 λŒ€ν•œ 지원을 λΉ„ν™œμ„±ν™”ν•΄μ•Ό ν•œλ‹€. HTTP/0.9둜 λ³΄μ΄λŠ” λŒ€λΆ€λΆ„μ˜ μš”μ²­μ€ μ‹€μ œλ‘œ ν΄λΌμ΄μ–ΈνŠΈκ°€ μš”μ²­ λŒ€μƒμ„ μ œλŒ€λ‘œ μΈμ½”λ”©ν•˜μ§€ λͺ»ν•΄ λ°œμƒν•˜λŠ” 잘λͺ» κ΅¬μ„±λœ HTTP/1.x μš”μ²­μ΄λ‹€.

A.1 Changes HTTP/1.0

이 μ„Ήμ…˜μ€ 버전 HTTP/1.0κ³Ό HTTP/1.1 μ‚¬μ΄μ˜ μ£Όμš” 차이점을 μš”μ•½ν•œλ‹€.

A.1.1 Multihomed Web Servers

ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„κ°€ Host 헀더 ν•„λ“œλ₯Ό μ§€μ›ν•˜κ³ (Section 5.4), HTTP/1.1 μš”μ²­μ— λˆ„λ½λœ κ²½ 우 였λ₯˜λ₯Ό λ³΄κ³ ν•˜κ³ , μ ˆλŒ€ URIλ₯Ό 수락(Section 5.3)ν•˜λŠ” μš”κ±΄μ€ HTTP/1.1μ—μ„œ μ •μ˜ν•œ κ°€μž₯ μ€‘μš”ν•œ λ³€κ²½ 사항 쀑 ν•˜λ‚˜μ΄λ‹€.

A.1.2 Keep-Alive Connections

HTTP/1.0μ—μ„œ 각 컀λ„₯μ…˜μ€ μš”μ²­ 전에 ν΄λΌμ΄μ–ΈνŠΈμ— μ˜ν•΄ μ„€μ •λ˜κ³  응닡 전솑 ν›„ μ„œλ²„μ— μ˜ν•΄ μ’…λ£Œλœλ‹€. κ·ΈλŸ¬λ‚˜ 일뢀 κ΅¬ν˜„μ—μ„œλŠ” λͺ…μ‹œμ μœΌλ‘œ ν˜‘μƒλœ [RFC2068] Section 19.7.1에 μ„€λͺ…ν•œ μ˜μ†μ  컀λ„₯μ…˜(β€œKeep-Alive”) 버전을 κ΅¬ν˜„ν•œλ‹€.

일뢀 ν΄λΌμ΄μ–ΈνŠΈμ™€ μ„œλ²„λŠ” "Connection: keep-alive" μš”μ²­ 헀더 ν•„λ“œμ™€ λͺ…μ‹œμ μœΌλ‘œ ν˜‘μƒν•¨μœΌλ‘œμ¨ μ˜μ†μ  컀λ„₯μ…˜μ— λŒ€ν•œ μ΄λŸ¬ν•œ 이전 접근방식과 ν˜Έν™˜λ˜κΈ°λ₯Ό 원할 수 μžˆλ‹€. κ·ΈλŸ¬λ‚˜ HTTP/1.0 μ˜μ†μ  컀λ„₯μ…˜μ˜ 일뢀 μ‹€ν—˜μ  κ΅¬ν˜„μ€ 결함이 μžˆλ‹€. 예λ₯Ό λ“€μ–΄ HTTP/1.0 ν”„λ½μ‹œ μ„œλ²„κ°€ Connection을 μ΄ν•΄ν•˜μ§€ λͺ»ν•˜λ©΄ 헀더 ν•„λ“œλ₯Ό λ‹€μŒ μΈλ°”μš΄λ“œ μ„œλ²„λ‘œ 잘λͺ» μ „λ‹¬ν•˜μ—¬ 컀λ„₯μ…˜μ΄ λŠμ–΄μ§ˆ 수 μžˆλ‹€.

ν΄λΌμ΄μ–ΈνŠΈλŠ” λ˜ν•œ μš”μ²­μ—μ„œ keep-alive 컀λ„₯μ…˜μ„ 주의깊게 μ‚¬μš©ν•˜λ„λ‘ ꢌμž₯λœλ‹€: 그듀은 HTTP/1.0 μ„œλ²„μ™€μ˜ μ˜μ†μ  컀λ„₯μ…˜μ„ κ°€λŠ₯ν•˜κ²Œ ν•  수 μžˆμ§€λ§Œ, ν΄λΌμ΄μ–ΈνŠΈκ°€ β€œhung” μš”μ²­μ˜ 컀λ„₯μ…˜μ„ κ°μ‹œν•΄μ•Ό ν•  ν•„μš”κ°€ μžˆμ„ 것이닀.(헀더 ν•„λ“œ 전솑을 쀑단해야 ν•œλ‹€λŠ” 것을 λ‚˜νƒ€λ‚΄λŠ”) 그리고 ν”„λ½μ‹œλ₯Ό μ‚¬μš©ν•  λ•Œ 이 λ©”μ»€λ‹ˆμ¦˜μ€ ν΄λΌμ΄μ–ΈνŠΈμ— μ˜ν•΄ μ‚¬μš©λ˜μ–΄μ„œλŠ” μ•ˆ λœλ‹€.

A.1.3 Introduction of Transfer-Encoding

HTTP/1.1μ—λŠ” Transfer-Encoding 헀더 ν•„λ“œκ°€ λ„μž…λœλ‹€(Section 3.3.1). 전솑 코딩은 MIME ν˜Έν™˜ ν”„λ‘œν† μ½œμ„ 톡해 HTTP λ©”μ‹œμ§€λ₯Ό μ „λ‹¬ν•˜κΈ° 전에 ν•΄λ…λ˜μ–΄μ•Ό ν•œλ‹€.

A.2 Changes from RFC 2616

였λ₯˜ μ²˜λ¦¬μ— λŒ€ν•œ HTTP의 접근방식이 μ„€λͺ…λ˜μ—ˆλ‹€. (Section 2.5)

HTTP-version ABNF은 λŒ€μ†Œλ¬Έμžλ₯Ό κ΅¬λΆ„ν•˜λŠ” κ²ƒμœΌλ‘œ λͺ…ν™•ν•΄μ‘Œλ‹€. λ˜ν•œ 버전 λ²ˆν˜ΈλŠ” κ΅¬ν˜„ μ‹œ μ—¬λŸ¬ 자릿수의 버전 번호λ₯Ό 잘λͺ» μ·¨κΈ‰ν•˜λŠ” κ²ƒμœΌλ‘œ μ•Œλ €μ Έ 있기 λ•Œλ¬Έμ— ν•œ 자릿수둜 μ œν•œλ˜μ–΄ μ™”λ‹€. (Section 2.6)

Userinfo(즉, μ‚¬μš©μž 이름 및 μ•”ν˜Έ)λŠ” ν˜„μž¬ 유/λ¬΄μ„ μƒμ˜ 전솑과 κ΄€λ ¨λœ λ³΄μ•ˆ 문제둜 인해 HTTP 및 HTTPS URIsμ—μ„œ ν—ˆμš©λ˜μ§€ μ•ŠλŠ”λ‹€. (Section 2.7.1)

HTTPS URI schemeλŠ” 이제 이 λͺ…세에 μ˜ν•΄ μ •μ˜λœλ‹€. μ΄μ „μ—λŠ” [RFC2818]의 Section 2.4μ—μ„œ μˆ˜ν–‰λ˜μ—ˆλ‹€. μΆ”κ°€λ‘œ, 그것은 end-to-end λ³΄μ•ˆμ„ μ˜λ―Έν•œλ‹€. (Section 2.7.2)

HTTP λ©”μ‹œμ§€λŠ” κ΅¬ν˜„μ— μ˜ν•΄ 버퍼링될 수 있으며(그리고 μ’…μ’…) 슀트림으둜 이용 κ°€λŠ₯함에도 뢈 κ΅¬ν•˜κ³  HTTPλŠ” κ·Όλ³Έμ μœΌλ‘œλŠ” λ©”μ‹œμ§€ 지ν–₯ ν”„λ‘œν† μ½œμ΄λ‹€. μƒν˜Έμš΄μš©μ„±μ„ κ°œμ„ ν•˜κΈ° μœ„ν•΄ λ‹€μ–‘ν•œ ν”„λ‘œν† μ½œ μš”μ†Œμ— λŒ€ν•΄ μ§€μ›λ˜λŠ” μ΅œμ†Œ 크기가 μ œμ•ˆλ˜μ—ˆλ‹€. (Section 3)

field-names μ£Όλ³€μ˜ 잘λͺ»λœ 곡백을 μˆ˜λ½ν•˜λ©΄ λ³΄μ•ˆ 취약성을 λ‚˜νƒ€λ‚΄κΈ° λ•Œλ¬Έμ— 잘λͺ»λœ 곡백은 κ±°λΆ€λ˜μ–΄μ•Ό ν•œλ‹€. 헀더 ν•„λ“œλ₯Ό μ •μ˜ν•˜λŠ” ABNF은 이제 ν•„λ“œ κ°’λ§Œ λ‚˜μ—΄ν•œλ‹€. (Section 3.2)

νŠΉμ • 문법 μ œμž‘ μ‚¬μ΄μ˜ μ•”μ‹œμ  μ„ ν˜• 곡백에 λŒ€ν•œ κ·œμΉ™μ€ μ œκ±°λ˜μ—ˆλ‹€. 이제 곡백은 ABNF에 νŠΉλ³„νžˆ μ •μ˜λœ κ²½μš°μ—λ§Œ ν—ˆμš©λœλ‹€. (Section 3.2.3)

μ—¬λŸ¬ 라인에 걸쳐 μžˆλŠ”(β€œline folding”) 헀더 ν•„λ“œλŠ” 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠλŠ”λ‹€. (Section 3.2.4)

μ •ν™•νžˆ μ–Έμ œ β€œclose” 컀λ„₯μ…˜ μ˜΅μ…˜μ„ 보내야 ν•˜λŠ”μ§€κ°€ λͺ…ν™•ν•΄μ‘Œλ‹€. λ˜ν•œ β€œhop-by-hop”헀더 ν•„λ“œλŠ” Connection 헀더 ν•„λ“œμ— λ‚˜νƒ€λ‚˜μ•Ό ν•œλ‹€. 단지 이 ν•­λͺ©μ—μ„œ hop-by-hop으둜 μ •μ˜λœλ‹€κ³  ν•΄μ„œ μ œμ™Έλ˜λŠ” 것은 μ•„λ‹ˆλ‹€. (Section 6.1)

μ„œλ²„λ‹Ή 두 개의 컀λ„₯μ…˜ ν•œλ„κ°€ μ œκ±°λ˜μ—ˆλ‹€. 멱등성인 μš”μ²­ μ‹œν€€μŠ€λŠ” 더 이상 μž¬μ‹œλ„ν•  ν•„μš”κ°€ μ—†λ‹€. μ„œλ²„κ°€ 컀λ„₯μ…˜μ„ 쑰기에 μ’…λ£Œν•  λ•Œ νŠΉμ • μƒν™©μ—μ„œ μš”μ²­μ„ λ‹€μ‹œ μ‹œλ„ν•΄μ•Ό ν•˜λŠ” μš”κ΅¬ 사항이 제거됨. λ˜ν•œ, μ„œλ²„κ°€ μ–Έμ œ 쑰기에 컀λ„₯μ…˜μ„ 닫을 수 μžˆλŠ”μ§€μ— λŒ€ν•œ 일뢀 κ΄€λ ¨ μš”κ΅¬μ‚¬ν•­μ΄ μ œκ±°λ˜μ—ˆλ‹€. (Section 6.3)

Upgrade 헀더 ν•„λ“œμ˜ μ˜λ―Έλ‘ μ€ 이제 101이 μ•„λ‹Œ λ‹€λ₯Έ μ‘λ‹΅μœΌλ‘œ μ •μ˜λœλ‹€(이것은 [RFC2817]μ—μ„œ ν†΅ν•©λ˜μ—ˆλ‹€). κ²Œλ‹€κ°€, ν•„λ“œ κ°’μ˜ μˆœμ„œλŠ” 이제 μ€‘μš”ν•˜λ‹€. (Section 6.7)

HTTP/0.9 μš”μ²­μ„ μ§€μ›ν•˜λ €λŠ” κΈ°λŒ€κ°€ μ œκ±°λ˜μ—ˆλ‹€. (Appendix A)

μš”μ²­μ—μ„œ Keep-Alive 및 Proxy-Connection 헀더 ν•„λ“œμ˜ λ¬Έμ œκ°€ μ§€μ λ˜λ©°, ν›„μžμ˜ μ‚¬μš©μ€ μ „νžˆ μ€‘λ‹¨λœλ‹€. (Appendix.A 1.2)

Last updated