1. 程式人生 > >javascript —— HTTP標頭檔案詳解

javascript —— HTTP標頭檔案詳解

HTTP(超文字傳輸協議:HyperText Transfer Protocol)是瀏覽器和伺服器通過internet進行相互通訊的協議,也是網路上應用最為廣泛的一種網路協議。HTTP規範由World Wide Web Consortium(W3C)和Internet Engineering Task Force(IETF)進行編制,文件是RFC2616。HTTP1.1是如今比較常用的版本,但是有些瀏覽器和伺服器仍在使用老版本1.0。

HTTP協議由請求和響應構成。瀏覽器端向特定的URL傳送HTTP請求,URL對應的伺服器經過處理請求,然後返回HTTP響應。和許多Internet服務一樣,HTTP協議同樣使用的是簡單的純文字格式。請求的型別比較多:GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE,注意為符合HTTP協議規範,請儘量使用大寫。我們經常使用到的型別,GET、POST請求,REST規範使用到了GET、PUT、DELETE、POST型別。

Get請求包含一個URL,還有headers也就是頭資訊。HTTP響應包含狀態碼、頭和響應主體。下面是Firxbug中抓取的HTTP頭資訊。

壓縮

先來看看request headers部分,accept-encoding表示可以使用壓縮來減小響應的大小,前提是瀏覽器和伺服器支援。這也是web優化最有效的技巧之一,HTML檔案通過compressor格式化,再通過gzip進行壓縮,通常都能減少50%-60%的大小,別小看這50%,對於高訪問量的入口網站來說,這可是白花花的銀子。另外,服務端進行了GZIP壓縮,可以通過響應的content-encoding進行確認。上述圖片中的響應,並不存在這個欄位,也就說明服務端並沒喲執行相應格式的壓縮。

快取

目前,不論是前端還是後端,還是資料庫,隨處可見快取技術,GET請求也使用了這技巧。而檢測快取中的副本是否有效,通常是對比最後的修改時間。基於響應中的Last-Modified頭資訊,可以知道檔案的最後的修改時間,請求端使用If-Modified-Since頭將最後修改時間傳送給伺服器。伺服器端便會進行比較判斷,如果日期相同,就不會再發送響應主體,否則傳送最新的響應主體,如此便可達到更快響應的效能優化效果。

過期

說到了快取,不得不說說快取副本過期時間,顧名思義,副本的過期時間小於當下時間,也就是它已經過期,不能再使用,必須獲取伺服器端最新的版本;否則,服務端返回狀態碼304,也即是沒有修改,並且快取沒有過期,可以正常使用,那麼瀏覽器將不會發出http請求,體現在firebug的樣式是,timeline是綠色的時間條。

在response headers中,expires代表要過期的具體時間,Cache-Control表示快取可以儲存的時間,圖1為21600秒。

connection

HTTP構建在Transmission Control Protocol(TCP)之上,通常,由HTTP客戶端發起一個請求,建立一個到伺服器指定埠(預設是80埠)的TCP連線。HTTP伺服器則在那個埠監聽客戶端的請求。一旦收到請求,伺服器會向客戶端返回響應資訊。在HTTP的早期實現中,每個HTTP請求都要開啟一個socket連線,這樣做的效率非常低下,因為一個web頁面中有許多HTTP請求指向同一個伺服器。比較常見的,請求許多圖片一般指向同一個圖片伺服器。這個時候,引入了持久連線來解決多對一請求伺服器導致的socket連線效率低下的問題。它可以使瀏覽器再一個單獨的連線上進行多個請求。瀏覽器和伺服器使用Connection頭資訊來表示Keep-Alive的支援。

當然Connection:Keep-Alive並不是必需的,但大部分瀏覽器和伺服器都包含它。

這裡只是對HTTP進行一個簡單的概述,如果需要深入學習,可以閱讀本文參詳的文章或書籍。

參詳資訊:

1、HTTP規範:http://www.ietf.org/rfc/rfc2616.txt

2、MDN:https://developer.mozilla.org/en-US/docs/HTTP/Headers

3、重點推薦:《HTTP:The Definitive Guide》