HTTP/1.1協議更新:RFC 2616遭廢棄

infoq發表於2014-06-09

 HTTP/1.1協議更新:RFC2616遭廢棄

  近日,IETF更新了HTTP/1.1協議,這是10多年來HTTP/1.1協議的首次重大更新。組織者將原來的RFC 2616拆分為六個單獨的協議說明,並重點對原來語義模糊的部分進行了解釋,新的協議說明更易懂、易讀。新的協議說明包括以下六部分:

  • RFC7230 - HTTP/1.1: Message Syntax and Routing - low-level message parsing and connection management
  • RFC7231 - HTTP/1.1: Semantics and Content - methods, status codes and headers
  • RFC7232 - HTTP/1.1: Conditional Requests - e.g., If-Modified-Since
  • RFC7233 - HTTP/1.1: Range Requests - getting partial content
  • RFC7234 - HTTP/1.1: Caching - browser and intermediary caches
  • RFC7235 - HTTP/1.1: Authentication - a framework for HTTP authentication

  早在2007年,IETF內部就成立了名為HTTPbis的工作小組來完成對HTTP/1.1的修訂,他們的目標是讓HTTP/1.1協議規範更加清晰易讀,而不是新增新特性或者升級協議。在整個協議的修訂過程中,小組成員共釋出了26個草稿版本,修改次數超過2600次,處理了550多個問題。在文件整理過程中,HTTPbis也對HTTP/1.1協議的一些不合理或者不安全的地方進行了改進,Evert在其部落格上總結了此次更新中的一些重大變化:

  1. 對如何處理不應該出現的空格進行了規定,將修復HTTP Response Splitting漏洞
  2. 移除每個伺服器兩個連線的限制
  3. 不再支援HTTP/0.9
  4. 預設編碼不再是ISO-8859-1
  5. 伺服器不再被強制要求處理所有Content-*請求頭內容
  6. PUT請求頭禁止使用Content-Range
  7. 如果請求頭中Referer不存在,建議使用about:blank,以便對“沒有Referer”和“我不想傳送Referer”加以區別
  8. 狀態碼204, 404, 405, 414 和501現在可以快取了(cachable)
  9. 狀態碼301和302現在允許使用者代理(user-agent)將請求方式從POST改為GET。雖然原標準不允許,但其實人們早就在這樣做了,標準迎合現實,這就是個很好的例子。
  10. 請求頭的Location現在可以包含相對URI和片段識別符號(fragment identifiers)
  11. Content-MD5被移除

  更多詳細的改進內容請讀者閱讀RFC中的Changes from RFC 2616部分。

相關文章