熱點推薦:
您现在的位置: 電腦知識網 >> 編程 >> Java編程 >> Java核心技術 >> 正文

Java網絡編程從入門到精通(23):HTTP消息頭字段

2013-11-23 19:31:54  來源: Java核心技術 

  專題推薦網絡編程基礎到進階教程

  通用頭字段

   Connection

  這個字段只在HTTP協議中存在它決定了客戶端和服務器進行了一次會話後服務器是否立即關閉網絡連接在客戶端最直接的表現是使用read方法(readLine方法也是一樣)讀完客戶端請求的Web資源後是否立即返回(readLine返回null)Connection有兩個值Close和KeepAlive當使用ConnectionClose時和HTTP協議是一樣的當read方法讀完數據時立即返回而使用ConnectionKeepAlive時read方法在讀完數據後還要被阻塞一段時間直接讀取數據超時時間過後還繼續往下執行在上一篇文章中討論的readHttpResponse(……)方法實現的第行可以驗證Connection的作用下面讓我們來使用HTTP模擬器來做一個實驗

  ()在HTTP模擬器中輸入如下的域名

  

  ()HTTP模擬器中輸入如下的HTTP請求信息

   GET / HTTP/   
Host: 

  ()按兩下回車(輸入一個空行)後發送請求消息並得到如圖如示的HTTP響應消息頭




  ()輸入y或Y後(在顯示http響應頭後要立刻輸入Y或y)顯示響應消息的內容在顯示完內容後大約過了秒鐘才進入hostport>提示符(因為在sendHttpRequest()的實現代碼中的行設置了讀取數據超時)

  ()在hostport>提示符下直接按回車輸入最近一次使用的域名和端口再次輸入如下的HTTP請求

   GET / HTTP/    
Host: 
Connection: close

  輸入完以上的HTTP請求後重新執行第步操作最後在顯示HTTP響應消息內容後直接直入了hostport>提示符除了這種方法將請求的第一行改為GET / HTTP/這樣也可以無需等待直接結束

  通過設置Connection可以在下載Web資源(如多線程下載工具Web浏覽器等)後立即斷開網絡連接這樣可以有效地降低客戶機的資源消耗

   Date

  這個Date頭字段描述了請求消息和響應消息被創建的時間這個字段值是一個HTTPdate類型它的格式必須是GMT(格林尼治)時間GMT時間是就是北京時間減小時下面是Date字段的一個例子

   Date: Tue  Nov  :: GMT

   ContentLength

  指定消息實體的字節數在請求消息中POST方法必須使用ContentLength來指定請求消息的實體內容的字節數在響應消息中這個字段值指定了當前HTTP響應所返回的Web資源的字節數

  HTTP請求消息頭字段

   Host

  Host字段用於指定客戶端所訪問的資源所在的主機名和端口號如果端口號等於連接服務器時所使用的端口號則端口號可以省略下面是一個使用Host字段的一個例子

   Host: 

  這個字段是必須的如果HTTP請求不包含這個字段服務器將返回(Bad Request)響應狀態

   Accept

  Accept字段頭確定客戶端可以接收的媒體類型一般的格式是*/*類型/子類型這個子段頭可以傳遞多個媒體類型中間用隔開如下面是一個Accept的例子

   Accept:image/gifimage/jpg

  如果請求頭使用上述的Accept字段值則服務器端在動態生成網頁的IMG頭時將首先包含gif格式的圖像如果gif圖象不存在則包含jpg格式的圖象

   UserAgent

  這個字段頭用於指定客戶端是用什麼訪問的服務器如果是IE浏覽器並且本機安裝了net 則UserAgent會有如下的值

   UserAgent: Mozilla/ (compatible; MSIE ; Windows NT ; SV; Maxthon; NET CLR NET CLR ; InfoPath; InfoPath)

  服務器可以通過這個字段檢查客戶機的浏覽器版本並根據不同的版本來確定向客戶端發送的數據

   Range

  Range字段頭通過服務器只傳輸一部分Web資源這個字段頭可以用來實現斷點續傳功能有很多下載工具就是通過這個字段頭進行斷點續傳的Range字段可以通過三種格式設置要傳輸的字節范圍

  ()Range bytes=

  傳輸范圍從字節

  ()Range bytes=

  傳輸Web資源中第個字節以後的所有內容

  ()Range bytes=

  傳輸最後個字節

  HTTP響應消息頭字段

   AcceptRanges

  這個字段說明Web服務器是否支持Range(是否支持斷點續傳功能)如果支持則返回AcceptRanges bytes如果不支持則返回AcceptRanges none

   ContentRange

  指定了返回的Web資源的字節范圍這個字段值的格式是

  開始字節位置—結束字節位置/Web資源的總字節數

  下面是一個使用ContentRange的例子

  ContentRange/

  測試

  在HTTP模擬器中連接服務器並輸入如下的HTTP請求消息

   GET /nokiaguy/HttpSimulatorrar HTTP/
Host:
Range: bytes=

  返回的響應消息頭如圖所示



  從上圖可以看出服務器支持斷點繼傳功能而且還可以驗證ContentLength的值是當前會話傳過來的字節數並不是Web資源的總的字節數而ContentRange字段值中/後面的數才是Web資源總的字節數

    Location

  這個字段指定了上哪個新地址獲得新的Web資源當Web資源更換URL後而一些老用戶不能及時得知這個新的URL因此在老用戶訪問原來的URL時使用Location將這個新的URL返回給客戶端這個地址轉換對用戶來說是完全透明


From:http://tw.wingwit.com/Article/program/Java/hx/201311/27047.html
    推薦文章
    Copyright © 2005-2013 電腦知識網 Computer Knowledge   All rights reserved.