天天看點

HTTP相關知識

          Http請求當請求逾時時底層會預設進行重發,預設重發次數為3次,在某些情況下為了防止重複的請求,需要将自動重發覆寫。

是以當我們為滿足某種需求隻需要Http發出一次請求的時候需要設定:httpClient.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, new DefaultHttpMethodRetryHandler(0,false));

HTTP生命周期解釋,簡單來說:當jsp送出請求時,表明request生命周期的開始,請求結束,表明表明request生命周期的結束。

當從一個JSP發出一個request,表明request周期的開始,當到達action之後一般有兩種處理request的方式,一種為request.getDispatcher.forward,一種是response.sendRedirect。

對于request的forward,該request的生命周期将會繼續延續下去,當采用forward如果到達JSP頁面,那麼之前從第一個JSP頁面中發送出來的request的消息将仍然存在,新的頁面同樣能夠取得該request裡所包含的一些資訊,比如之前的JSP發送request中所包含的參數資訊.事實上,它們是同一個request。對于request,對資訊的傳遞,隻有setAttribute()這一個方法,該方法将設定一個Object對象到request中,如果當一個request是從jsp從發出,包含的資訊段為parameter=param這樣的方式,那麼隻能通過getParameter()得到,getAttribute()是得不到parameter的value的。于JSP的EL表達式,${}這中方式隻能得到setAttribute中的值,是以當從一個JSP發送request到達action并且被forward到新的JSP中時,如果想在該JSP中取得JSP發送時的參數資訊需要寫為這種形式:${parameter.parameter}.

Http配置了一些基本參數和逾時設定:

有時使用httpclient的時候,需要等待N長時間,可能此時你決定放棄或者重試。實作上非常簡單添加一個參數就可以。

//這裡的逾時機關是毫秒。這裡的http.socket.timeout相當于SO_TIMEOUT  

httpClient.getParams().setIntParameter("http.socket.timeout",3000);

HttpConnectionManagerParams managerParams = httpClient.getHttpConnectionManager().getParams();

// 設定連接配接逾時時間(機關毫秒)  

 managerParams.setConnectionTimeout(30000); 

// 設定讀資料逾時時間(機關毫秒)  

 managerParams.setSoTimeout(120000);

//設定get方法請求逾時為3 秒

GetMethod getMethod= new  GetMethod(url);  

getMethod.getParams().setParameter(HttpMethodParams.SO_TIMEOUT,3000 );

//設定 Http 連接配接逾時為 3 秒

HttpClient httpClient= new  HttpClient();    

httpClient.getHttpConnectionManager().getParams().setConnectionTimeout(3000 );

//設定連接配接逾時和請求逾時,這兩個逾時的意義不同,需要分别設定。

Http請求頭詳解:

Accept 指定用戶端能夠接收的内容類型Accept: text/plain, text/html

Accept-Charset 浏覽器可以接受的字元編碼集。Accept-Charset: iso-8859-5

Accept-Encoding 指定浏覽器可以支援的web伺服器傳回内容壓縮編碼類型。Accept-Encoding: compress, gzip

Accept-Language 浏覽器可接受的語言Accept-Language: en,zh

Accept-Ranges 可以請求網頁實體的一個或者多個子範圍字段Accept-Ranges: bytes

Authorization HTTP授權的授權證書Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Cache-Control 指定請求和響應遵循的緩存機制Cache-Control: no-cache

Connection 表示是否需要持久連接配接。(HTTP 1.1預設進行持久連接配接)Connection: close

Cookie HTTP請求發送時,會把儲存在該請求域名下的所有cookie值一起發送給web伺服器。Cookie: $Version=1; Skin=new;

Content-Length 請求的内容長度Content-Length: 348

Content-Type 請求的與實體對應的MIME資訊Content-Type: application/x-www-form-urlencoded

Date 請求發送的日期和時間Date: Tue, 15 Nov 2010 08:12:31 GMT

Expect 請求的特定的伺服器行為Expect: 100-continue

From 送出請求的使用者的EmailFrom: [email protected]

Host 指定請求的伺服器的域名和端口号Host: www.zcmhi.com

If-Match 隻有請求内容與實體相比對才有效If-Match: “737060cd8c284d8af7ad3082f209582d”

If-Modified-Since 如果請求的部分在指定時間之後被修改則請求成功,未被修改則傳回304代碼If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT

If-None-Match 如果内容未改變傳回304代碼,參數為伺服器先前發送的Etag,與伺服器回應的Etag比較判斷是否改變If-None-Match: “737060cd8c284d8af7ad3082f209582d”

If-Range 如果實體未改變,伺服器發送用戶端丢失的部分,否則發送整個實體。參數也為EtagIf-Range: “737060cd8c284d8af7ad3082f209582d”

If-Unmodified-Since 隻在實體在指定時間之後未被修改才請求成功If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT

Max-Forwards 限制資訊通過代理和網關傳送的時間Max-Forwards: 10

Pragma 用來包含實作特定的指令Pragma: no-cache

Proxy-Authorization 連接配接到代理的授權證書Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==

Range 隻請求實體的一部分,指定範圍Range: bytes=500-999

Referer 先前網頁的位址,目前請求網頁緊随其後,即來路Referer: http://www.zcmhi.com/archives/71.html

TE 用戶端願意接受的傳輸編碼,并通知伺服器接受接受尾加頭資訊TE: trailers,deflate;q=0.5

Upgrade 向伺服器指定某種傳輸協定以便伺服器進行轉換(如果支援)Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11

User-Agent User-Agent的内容包含送出請求的使用者資訊User-Agent: Mozilla/5.0 (Linux; X11)

Via 通知中間網關或代理伺服器位址,通信協定Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)

Warning 關于消息實體的警告資訊Warn: 199 Miscellaneous warning

//Http響應頭詳解

Accept-Ranges表明伺服器是否支援指定範圍請求及哪種類型的分段請求Accept-Ranges: bytes

Age 從原始伺服器到代理緩存形成的估算時間(以秒計,非負)Age: 12

Allow 對某網絡資源的有效的請求行為,不允許則傳回405Allow: GET, HEAD

Cache-Control 告訴所有的緩存機制是否可以緩存及哪種類型 Cache-Control: no-cache

Content-Encodingweb伺服器支援的傳回内容壓縮編碼類型。Content-Encoding: gzip

Content-Language響應體的語言Content-Language: en,zh

Content-Length響應體的長度Content-Length: 348

Content-Location請求資源可替代的備用的另一位址Content-Location: /index.htm

Content-MD5 傳回資源的MD5校驗值 Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==

Content-Range 在整個傳回體中本部分的位元組位置 Content-Range: bytes 21010-47021/47022

Content-Type 傳回内容的MIME類型 Content-Type: text/html; charset=utf-8

Date 原始伺服器消息發出的時間Date: Tue, 15 Nov 2010 08:12:31 GMT

ETag 請求變量的實體标簽的目前值ETag: “737060cd8c284d8af7ad3082f209582d”

Expires 響應過期的日期和時間 Expires: Thu, 01 Dec 2010 16:00:00 GMT

Last-Modified 請求資源的最後修改時間 Last-Modified: Tue, 15 Nov 2010 12:45:26 GMT

Location 用來重定向接收方到非請求URL的位置來完成請求或辨別新的資源 Location: http://www.zcmhi.com/archives/94.html

Pragma 包括實作特定的指令,它可應用到響應鍊上的任何接收方 Pragma: no-cache

Proxy-Authenticate它指出認證方案和可應用到代理的該URL上的參數Proxy-Authenticate: Basic

refresh 應用于重定向或一個新的資源被創造,在5秒之後重定向(由網景提出,被大部分浏覽器支援)

Refresh: 5; url=http://www.zcmhi.com/archives/94.html

Retry-After 如果實體暫時不可取,通知用戶端在指定時間之後再次嘗試 Retry-After: 120

Server web伺服器軟體名稱 Server: Apache/1.3.27 (Unix) (Red-Hat/Linux)

Set-Cookie 設定Http Cookie Set-Cookie: UserID=JohnDoe; Max-Age=3600; Version=1

Trailer 指出頭域在分塊傳輸編碼的尾部存在 Trailer: Max-Forwards

Transfer-Encoding檔案傳輸編碼Transfer-Encoding:chunked

Vary 告訴下遊代理是使用緩存響應還是從原始伺服器請求Vary: *

Via 告知代理用戶端響應是通過哪裡發送的Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)

Warning 警告實體可能存在的問題 Warning: 199 Miscellaneous warning

WWW-Authenticate表明用戶端請求實體應該使用的授權方案WWW-Authenticate: Basic

樣例:

  Accept-Language: zh-cn,zh;q=0.5

  Accept-Charset: GB2312,utf-8;q=0.7,*;q=0.7

  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,**;q=0.8

  意思:浏覽器支援的 MIME 類型分别是 text/html、application/xhtml+xml、application/xml 和 */*,優先順序是它們從左到右的排列順序。

  詳解:

  Accept表示浏覽器支援的 MIME 類型;

  MIME的英文全稱是 Multipurpose Internet Mail Extensions(多功能 Internet 郵件擴充服務),它是一種多用途網際郵件擴充協定,

在1992年最早應用于電子郵件系統,但後來也應用到浏覽器。

  text/html,application/xhtml+xml,application/xml 都是 MIME 類型,也可以稱為媒體類型和内容類型,斜杠前面的是 type(類型),

斜杠後面的是 subtype(子類型);type 指定大的範圍,subtype 是 type 中範圍更明确的類型,即大類中的小類。

  Text:用于标準化地表示的文本資訊,文本消息可以是多種字元集和或者多種格式的;

  text/html表示 html 文檔;

  Application:用于傳輸應用程式資料或者二進制資料;

  application/xhtml+xml表示 xhtml 文檔;

  application/xml表示 xml 文檔。

Accept-Encoding: gzip, deflate

  意思:浏覽器支援的壓縮編碼是 gzip 和 deflate。

  詳解:

  Accept-Encoding表示浏覽器有能力解碼的編碼類型;

  gzip是 GNU zip 的縮寫,它是一個 GNU 自由軟體的檔案壓縮程式,也經常用來表示 gzip 這種檔案格式。

  deflate是同時使用了 LZ77 算法與哈夫曼編碼(Huffman Coding)的一個無損資料壓縮算法。

  User-Agent: Mozilla/5.0 (compatible;域名)

  意思:使用的使用者代理是 Mozilla/5.0 (compatible; 域名)。

  詳解:

  User-Agent(使用者代理),簡稱 UA,它是一個特殊字元串頭,使得伺服器能夠識别用戶端使用的作業系統及版本、CPU 類型、浏覽器及版本、

浏覽器渲染引擎、浏覽器語言、浏覽器插件等。

  Mozilla/5.0:Mozilla 是浏覽器名,版本是 5.0;

  compatible(相容的)表示平台是相容模式;

  Host: 域名

  Host表示請求的伺服器網址;

  Connection: Keep-Alive

  Connection表示用戶端與服務連接配接類型;

  Keep-Alive表示持久連接配接;

繼續閱讀