亚洲日本永久一区二区_国产精品k频道网址导航_首页aⅴ色老汉中文字幕_免费深夜全片观看_9久久9毛片又大又硬又粗_国产精品成亚洲电影_日韩不用播放器的av_欧美特色特黄视频

前端開發必須詳細了解的HTTP頭信息

前端開發者雖然大部分時間都在做頁面制作、交互設計及性能優化等與客戶端工作,而實際上交互設計不單單是客戶端的交互,還必須實現數據上的交互,即數據通訊。WEB上的數據通訊基本上都是以HTTP的形式來實現的,因此對于前端開發者來說就必須對HTTP有足夠的認識,HTTP頭信息基本都可以通過Firebug的控制臺來查看。

http頭

現在就來說說HTTP。HTTP是一種客戶端與服務端的通訊協議,由請求和響應構成。

瀏覽器向一個URL發送HTTP請求的時候,URL對應的宿主服務器就必須做出響應并發回。和很多Internet服務一樣,HTTP協議使用簡單的純文本格式。請求的類型包括GET、POST、HEAD、PUT、DELETE、OPTIONS和TRACE,最應用最多的就是GET和POST請求。

GET請求包含一個URL,然后是頭。HTTP響應包括狀態碼、頭和響應體。下圖是使用firebug獲取到的HTTP請求。

響應頭信息

Date:

消息發送的時間,時間的描述格式由rfc822定義。例如,Fri,21 Jan 2011 10:55:14 GMT。Date描述的時間表示世界標準時,換算成本地時間,需要知道用戶所在的時區。

Server:

處理請求的服務器軟件信息,包含多個產品標識和注釋,產品標識一般按照重要性排序。

Cache-Control:

控制HTTP緩存(在HTTP/1.0中可能部分沒實現,僅僅實現了Pragma: no-cache),包括“no-cache”、“no-store”、“max-age”、“private”、“must-revalidate”、“max-stale”、“public”、“min-fresh”、“min-fresh”。

  1. max-age=31536000:指打開新窗口或者在地址欄回車的時候,如果在這個時間內不會重新訪問服務器,上面表示緩存時間為1年。若按后退按扭則不會重新訪問服務器,無論過沒過期,按刷新按鈕的話,無論過沒過期都會重新訪問。
  2. no-cache:請求或響應消息不能緩存(HTTP/1.0用Pragma的no-cache替換)。
  3. private:指打開新窗口以及刷新的時候會訪問服務器,在地址欄輸入的時候則只有第一次訪問時會訪問服務器,以后就不再訪問,按后退按鈕也不會訪問服務器。
  4. must-revalidate:和private一樣。
  5. no-store:用于防止重要的信息被無意的發布,在請求消息中發送將使得請求和響應消息都不使用緩存,根據緩存超時。
  6. max-stale:指客戶端可以接收超出超時期間的響應消息,如果指定max-stale消息的值,那么客戶端可以 接收超出超時期指定值之內的響應消息。
  7. public:指響應可以被任何緩存區緩存。
  8. min-fresh:指客戶端可以接收響應時間小于當前時間加上指定時間的響應。
  9. min-fresh:指客戶端可以接收響應時間小于當前時間加上指定時間的響應。
Expires:

用于控制請求文件的有效時間,當請求數據在有效期內時客戶端瀏覽器從緩存請求數據而不是服務器端;當緩存中數據失效或過期,才決定從服務器更新數據。可以使用Apache的mod_expires 模塊來設置,可以控制應答時的Expires頭內容和Cache-Control頭的max-age指令,當設置了expires后,會自動輸出Cache-Control 的max-age 信息,這個數值是expires有效期內的秒數。

Pragma:

用來包含實現特定的指令,最常用的是Pragma:no-cache。在HTTP/1.1協議中,它的含義和Cache- Control:no-cache相同。

Last-Modified:

指在瀏覽器第一次請求一個URL時,服務器端的返回狀態會是200,內容是你請求的資源,同時有一個Last-Modified的屬性標記此文件在服務期端最后被修改的時間,客戶端第二次請求此URL時,根據 HTTP 協議的規定,瀏覽器會向服務器傳送 If-Modified-Since 報頭,詢問該時間之后文件是否有被修改過,如果服務器端的資源沒有變化,則自動返回HTTP/1.x 304 Not Modified狀態碼,內容為空,這樣就節省了傳輸數據量。

Content-Encoding:

文檔的編碼(Encode)方法,只有在解碼之后才可以得到Content-Type頭指定的內容類型。利用gzip壓縮文檔能夠顯著地減少HTML文檔的下載時間。通俗點就是WEB服務器表明自己使用了什么壓縮方法(gzip,deflate)壓縮響應中的對象。

Content-Length:

表示內容長度,只有當瀏覽器使用持久HTTP連接時才需要這個數據。如果你想要利用持久連接的優勢,可以把輸出文檔寫入ByteArrayOutputStram,完成后查看其大小,然后把該值放入Content-Length頭,最后通過byteArrayStream.writeTo(response.getOutputStream()發送內容。

Content-Type:

服務器告訴瀏覽器響應的對象的類型。

Connection:

指當客戶端和服務器端通信時對于長鏈接如何進行處理,在http1.1中,客戶端和服務器端都是默認對方支持長鏈接的, 如果客戶端使用http1.1協議,但又不希望使用長鏈接,則需要在header中指明connection的值為close。close(告訴WEB服務器或者代理服務器,在完成本次請求的響應后,斷開連接,不要等待本次連接的后續請求了)。keep-alive(告訴WEB服務器或者代理服務器,在完成本次請求的響應后,保持連接,等待本次連接的后續請求)。

Vary:

指定了一些請求頭域,這些請求頭域用來決定當緩存中存在一個響應,并且該緩存沒有過期失效,是否被允許去利用此響應去回復后續請求而不需要重驗證(revalidation)。對于一個不能被緩存或失效的響應緩存,Vary頭域值用于告訴用戶代理選擇表現形式(reprentation)的標準。例如源WEB服務器在接到第一個請求消息時,其響應消息的頭部為:Content-Encoding: gzip; Vary: Content-Encoding,那么Cache 服務器會分析后續請求消息的頭部,檢查其 Accept-Encoding,是否跟先前響應的 Vary 頭部值一致,即是否使用相同的內容編碼方法,這樣就可以防止 Cache 服務器用自己 Cache 里面壓縮后的實體響應給不具備解壓能力的瀏覽器。

請求頭信息
  1. Host:客戶端指定訪問的WEB服務器的域名或者IP地址和端口號。
  2. User-Agent:發起請求瀏覽器信息,如瀏覽器版本號。
  3. Accept:告訴WEB服務器自己接受什么介質類型,*/* 表示任何類型,type/* 表示該 類型下的所有子類型,type/sub-type。
  4. Accept-Charset:瀏覽器申明自己接收的字符集。
  5. Accept-Encoding:瀏覽器申明自己接收的編碼方法,通常指定壓縮方法,是否支持壓縮,支持什么壓縮方法(gzip,deflate)。
  6. Accept-Language:瀏覽器申明自己接收的語言,語言跟字符集的區別:中文是語言,中文有多種字符集,比如big5,gb2312,gbk等等。
  7. Keep-Alive:如果瀏覽器請求保持連接,表明希望 WEB 服務器保持連接多長時間(秒)。
  8. Connection:close(連接已經關閉),keep-alive(連接保持著,在等待本次連接的后續請求)。
  9. Content-Type:WEB 服務器告訴瀏覽器自己響應的對象的類型。
  10. Content-Language:WEB 服務器告訴瀏覽器自己響應的對象的語言。
  11. Content-Length: WEB 服務器告訴瀏覽器自己響應的對象的長度。
  12. Content-Range: WEB 服務器表明該響應包含的部分對象為整個對象的哪個部分。
  13. Referer:瀏覽器向 WEB 服務器表明是從哪個網頁(URL)發起的當前請求。
  14. Proxy-Authenticate: 代理服務器響應瀏覽器,要求其提供代理身份驗證信息。
  15. Proxy-Authorization:瀏覽器響應代理服務器的身份驗證請求,提供自己的身份信息。
  16. Range:瀏覽器告訴 WEB 服務器自己想取對象的哪部分。
  17. If-Range:瀏覽器告訴 WEB 服務器,如果我請求的對象沒有改變,就把缺少的部分給我,如果對象改變了,就把整個對象給我。瀏覽器通過發送請求對象的ETag或者自己所知道的最后修改時間給 WEB 服務器,讓其判斷對象是否改變了,一般總是跟 Range 頭部一起使用。
  18. Last-Modified:WEB 服務器認為對象的最后修改時間,比如文件的最后修改時間,動態頁面的最后產生時間等等。
  19. Expired:WEB服務器表明該實體將在什么時候過期,對于過期了的對象,只有在跟WEB服務器驗證了其有效性后,才能用來響應客戶請求。
  20. ETag:就是一個對象(比如URL)的標志值,就一個對象而言,比如一個 html 文件,如果被修改了,其 Etag 也會別修改,所以ETag 的作用跟Last-Modified的作用差不多,主要供WEB服務器判斷一個對象是否改變了。比如前一次請求某個 html 文件時,獲得了其 ETag,當這次又請求這個文件時,瀏覽器就會把先前獲得的 ETag 值發送給 WEB 服務器,然后 WEB 服務器會把這個 ETag 跟該文件的當前 ETag 進行對比,然后就知道這個文件有沒有改變了。合理的配置ETag將能夠提高WEB的性能。
  21. Authorization:當客戶端接收到來自WEB服務器的WWW-Authenticate響應時,用該頭部來回應自己的身份驗證信息給WEB服務器。
  22. Age:當代理服務器用自己緩存的實體去響應請求時,用該頭部表明該實體從產生到現在經過多長時間了。
  23. If-Modified-Since:如果請求的對象在該頭部指定的時間之后修改了,才執行請求的動作(比如返回對象),否則返回代碼304,告訴瀏覽器該對象沒有修改。
  24. Location:WEB 服務器告訴瀏覽器,試圖訪問的對象已經被移到別的位置了,到該頭部指定的位置去取。