最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java與Http協(xié)議的詳細(xì)介紹

 更新時(shí)間:2017年09月07日 14:51:50   投稿:lqh  
這篇文章主要介紹了Java與Http協(xié)議的詳細(xì)介紹的相關(guān)資料,這里提供實(shí)例來(lái)幫助大家學(xué)習(xí)理解這部分內(nèi)容,需要的朋友可以參考下

Java與Http協(xié)議的詳細(xì)介紹

引言                                       

      http(超文本傳輸協(xié)議)是一個(gè)基于請(qǐng)求與響應(yīng)模式的、無(wú)狀態(tài)的、應(yīng)用層的協(xié)議,?;赥CP的連接方式。HTTP協(xié)議的主要特點(diǎn)是:
     1.支持客戶(hù)/服務(wù)器模式。
     2.簡(jiǎn)單快速:客戶(hù)向服務(wù)器請(qǐng)求服務(wù)時(shí),只需傳送請(qǐng)求方法和路徑。由于HTTP協(xié)議簡(jiǎn)單,通信速度很快。
     3.靈活:HTTP允許傳輸任意類(lèi)型的數(shù)據(jù)對(duì)象。類(lèi)型由Content-Type加以標(biāo)記。
     4.無(wú)連接:即每次連接只處理一個(gè)請(qǐng)求,處理完客戶(hù)的請(qǐng)求,并收到客戶(hù)的應(yīng)答后,即斷開(kāi)連接。采用這種方式可以節(jié)省傳輸時(shí)間。
     5.無(wú)狀態(tài):無(wú)狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒(méi)有記憶能力。

     http1.0協(xié)議默認(rèn)的是非持久連接, HTTP1.1默認(rèn)的連接方式為持久連接。

非持久連接:每次服務(wù)器發(fā)出一個(gè)對(duì)象后,相應(yīng)的TCP連接就被關(guān)閉,也就是說(shuō)每個(gè)連接都沒(méi)有持續(xù)到可用于傳送其他對(duì)象。每個(gè)TCP連接只用于傳輸一個(gè)請(qǐng)求消息和一個(gè)響應(yīng)消息。

持久連接:服務(wù)器在發(fā)出響應(yīng)后讓TCP連接繼續(xù)打開(kāi)著。同一對(duì)客戶(hù)/服務(wù)器之間的后續(xù)請(qǐng)求和響應(yīng)可以通過(guò)這個(gè)連接發(fā)送。HTTP/1.1的默認(rèn)模式使用帶流水線(xiàn)的持久連接。

 一、HTTP協(xié)議詳解之請(qǐng)求

//請(qǐng)求行
POST /reg.jsp HTTP/ (CRLF)    

//消息報(bào)頭
Accept:image/gif,image/x-xbitmap,image/jpeg,application/x-shockwave-flash,application/vnd.ms-excel,application/vnd.ms-powerpoint,application/msword,*/* (CRLF)
Accept-Language:zh-cn (CRLF)
Accept-Encoding:gzip,deflate (CRLF)
If-Modified-Since:Wed,05 Jan 2007 11:21:25 GMT (CRLF)
If-None-Match:W/"80b1a4c018f3c41:8317" (CRLF)
User-Agent:Mozilla/4.0(compatible;MSIE6.0;Windows NT 5.0) (CRLF)
Host:www.guet.edu.cn (CRLF)
Connection:Keep-Alive (CRLF)
(CRLF)

//請(qǐng)求正文
user=jeffrey&pwd=1234 

     以上是http請(qǐng)求的三部:請(qǐng)求行、消息報(bào)頭、請(qǐng)求正文。

     請(qǐng)求行以一個(gè)方法符號(hào)開(kāi)頭,以空格分開(kāi),后面跟著請(qǐng)求的URI和協(xié)議的版本,格式如下:

Method Request-URI HTTP-Version CRLF 
     其中 Method表示請(qǐng)求方法(如POST、GET、PUT、DELETE等);Request-URI是一個(gè)統(tǒng)一資源標(biāo)識(shí)符;HTTP-Version表示請(qǐng)求的HTTP協(xié)議版本;CRLF表示回車(chē)和換行。

二、HTTP協(xié)議詳解之響應(yīng)篇

//狀態(tài)行
HTTP/1.1 200 OK (CRLF)

//消息報(bào)頭
Cache-Control: private, max-age=30
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Expires: Mon, 25 May 2009 03:20:33 GMT
Last-Modified: Mon, 25 May 2009 03:20:03 GMT
Vary: Accept-Encoding
Server: Microsoft-IIS/7.0
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Mon, 25 May 2009 03:20:02 GMT
Content-Length: 12173

//響應(yīng)正文
略

     HTTP響應(yīng)也是由三個(gè)部分組成,分別是:狀態(tài)行、消息報(bào)頭、響應(yīng)正文

     狀態(tài)行格式如下:

  HTTP-Version Status-Code Reason-Phrase CRLF

     其中,HTTP-Version表示服務(wù)器HTTP協(xié)議的版本;Status-Code表示服務(wù)器發(fā)回的響應(yīng)狀態(tài)代碼;Reason-Phrase表示狀態(tài)代碼的文本描述。

常見(jiàn)狀態(tài)代碼、狀態(tài)描述、說(shuō)明:

200 OK      //客戶(hù)端請(qǐng)求成功
400 Bad Request  //客戶(hù)端請(qǐng)求有語(yǔ)法錯(cuò)誤,不能被服務(wù)器所理解
401 Unauthorized //請(qǐng)求未經(jīng)授權(quán),這個(gè)狀態(tài)代碼必須和WWW-Authenticate報(bào)頭域一起使用
403 Forbidden  //服務(wù)器收到請(qǐng)求,但是拒絕提供服務(wù)
404 Not Found  //請(qǐng)求資源不存在,eg:輸入了錯(cuò)誤的URL
500 Internal Server Error //服務(wù)器發(fā)生不可預(yù)期的錯(cuò)誤
503 Server Unavailable  //服務(wù)器當(dāng)前不能處理客戶(hù)端的請(qǐng)求,一段時(shí)間后可能恢復(fù)正常 

三、HTTP協(xié)議詳解之消息報(bào)頭

        HTTP消息由客戶(hù)端到服務(wù)器的請(qǐng)求和服務(wù)器到客戶(hù)端的響應(yīng)組成。請(qǐng)求消息和響應(yīng)消息都是由開(kāi)始行(對(duì)于請(qǐng)求消息,開(kāi)始行就是請(qǐng)求行;對(duì)于響應(yīng)消息,開(kāi)始行就是狀態(tài)行),消息報(bào)頭(可選),空行(只有CRLF的行),消息正文(可選)組成。

        HTTP消息報(bào)頭包括普通報(bào)頭、請(qǐng)求報(bào)頭、響應(yīng)報(bào)頭、實(shí)體報(bào)頭。每一個(gè)報(bào)頭域都是由名字+“:”+空格+值 組成,消息報(bào)頭域的名字是大小寫(xiě)無(wú)關(guān)的。

1、請(qǐng)求報(bào)頭

     請(qǐng)求報(bào)頭允許客戶(hù)端向服務(wù)器端傳遞請(qǐng)求的附加信息以及客戶(hù)端自身的信息。

常用的請(qǐng)求報(bào)頭

Accept請(qǐng)求報(bào)頭域用于指定客戶(hù)端接受哪些類(lèi)型的信息。
Accept-Charset請(qǐng)求報(bào)頭域用于指定客戶(hù)端接受的字符集。
Accept-Encoding請(qǐng)求報(bào)頭域類(lèi)似于Accept,但是它是用于指定可接受的內(nèi)容編碼。
Accept-Language請(qǐng)求報(bào)頭域類(lèi)似于Accept,但是它是用于指定一種自然語(yǔ)言。
Authorization請(qǐng)求報(bào)頭域主要用于證明客戶(hù)端有權(quán)查看某個(gè)資源。

Host請(qǐng)求報(bào)頭域主要用于指定被請(qǐng)求資源的Internet主機(jī)和端口號(hào),它通常從HTTP URL中提取出來(lái)的。User-Agent請(qǐng)求報(bào)頭域允許客戶(hù)端將它的操作系統(tǒng)、瀏覽器和其它屬性告訴服務(wù)器。

2、響應(yīng)報(bào)頭

     響應(yīng)報(bào)頭允許服務(wù)器傳遞不能放在狀態(tài)行中的附加響應(yīng)信息,以及關(guān)于服務(wù)器的信息和對(duì)Request-URI所標(biāo)識(shí)的資源進(jìn)行下一步訪(fǎng)問(wèn)的信息。

常用的響應(yīng)報(bào)頭

Location響應(yīng)報(bào)頭域用于重定向接受者到一個(gè)新的位置。Location響應(yīng)報(bào)頭域常用在更換域名的時(shí)候。
Server響應(yīng)報(bào)頭域包含了服務(wù)器用來(lái)處理請(qǐng)求的軟件信息

3. 實(shí)體報(bào)頭

請(qǐng)求和響應(yīng)消息都可以傳送一個(gè)實(shí)體。

常用的實(shí)體報(bào)頭

Content-Encoding指示已經(jīng)被應(yīng)用到實(shí)體正文的附加內(nèi)容的編碼。

Content-Language實(shí)體報(bào)頭域描述了資源所用的自然語(yǔ)言。

Content-Length實(shí)體報(bào)頭域用于指明實(shí)體正文的長(zhǎng)度,以字節(jié)方式存儲(chǔ)的十進(jìn)制數(shù)字來(lái)表示。
Content-Type實(shí)體報(bào)頭域用語(yǔ)指明發(fā)送給接收者的實(shí)體正文的媒體類(lèi)型。
Last-Modified實(shí)體報(bào)頭域用于指示資源的最后修改日期和時(shí)間。
Expires實(shí)體報(bào)頭域給出響應(yīng)過(guò)期的日期和時(shí)間。

 四、補(bǔ)充

1、HTTP協(xié)議Content Lenth限制漏洞導(dǎo)致拒絕服務(wù)攻擊

使用POST方法時(shí),可以設(shè)置ContentLenth來(lái)定義需要傳送的數(shù)據(jù)長(zhǎng)度,例如ContentLenth:999999999,在傳送完成前,內(nèi) 存不會(huì)釋放,攻擊者可以利用這個(gè)缺陷,連續(xù)向WEB服務(wù)器發(fā)送垃圾數(shù)據(jù)直至WEB服務(wù)器內(nèi)存耗盡。這種攻擊方法基本不會(huì)留下痕跡。

2、為了提高用戶(hù)使用瀏覽器時(shí)的性能,現(xiàn)代瀏覽器還支持并發(fā)的訪(fǎng)問(wèn)方式,瀏覽一個(gè)網(wǎng)頁(yè)時(shí)同時(shí)建立多個(gè)連接,以迅速獲得一個(gè)網(wǎng)頁(yè)上的多個(gè)圖標(biāo),這樣能更快速完成整個(gè)網(wǎng)頁(yè)的傳輸。HTTP1.1中提供了這種持續(xù)連接的方式,而下一代HTTP協(xié)議:HTTP-NG更增加了有關(guān)會(huì)話(huà)控制、豐富的內(nèi)容協(xié)商等方式的支持,來(lái)提供更高效率的連接。

 五.Java利用HTTP協(xié)議實(shí)現(xiàn)聯(lián)網(wǎng)和下載

Url的請(qǐng)求連接(Get方式)

String currentUrl=“http://www.myWeb.com/login.jsp?userName='Devin'&passWord='mypassword'”; //URL ?后面的內(nèi)容為HTTP請(qǐng)求的正文
URL url = new URL(currentUrl);
 
HttpURLConnection httpurlconnection = url.openConnection();
//下面的設(shè)置對(duì)應(yīng)HTTP請(qǐng)求中的消息報(bào)頭
httpurlconnection.setRequestProperty("User-Agent",CommonValues.User_Agent);
httpurlconnection.setRequestProperty("Accept",CommonValues.Accept);
httpurlconnection.setRequestProperty("Accept-Charset",CommonValues.Accept_Charset);
httpurlconnection.setRequestProperty("Accept-Language",CommonValues.Accept_Language);
httpurlconnection.setRequestProperty("Connection",CommonValues.Connection);
httpurlconnection.setRequestProperty("Keep-Alive",CommonValues.Keep_Alive);
httpurlconnection.setConnectTimeout(CommonValues.ConnectionTimeOut);
httpurlconnection.setReadTimeout(CommonValues.ReadTimeOut);
       
httpurlconnection.connect();
      
int responsecode = httpurlconnection.getResponseCode();
       
if(responsecode == HttpURLConnection.HTTP_OK) //對(duì)應(yīng)HTTP響應(yīng)中狀態(tài)行的響應(yīng)碼
{
  //操作請(qǐng)求流,這里對(duì)應(yīng)HTTP響應(yīng)中的響應(yīng)正文
}
       
if (httpurlconnection != null) 
{
  httpurlconnection.disconnect();
}

如有疑問(wèn)請(qǐng)留言或者到本站社區(qū)交流討論,感謝閱讀,希望能幫助到大家,謝謝大家對(duì)本站的支持!

相關(guān)文章

  • Spring整合Redis完整實(shí)例代碼

    Spring整合Redis完整實(shí)例代碼

    這篇文章主要介紹了Spring整合Redis完整實(shí)例代碼,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-04-04
  • Java異常跟蹤棧定義與用法示例

    Java異常跟蹤棧定義與用法示例

    這篇文章主要介紹了Java異常跟蹤棧定義與用法,結(jié)合具體實(shí)例形式分析了異常處理?xiàng)5母拍?、原理及相關(guān)使用技巧,需要的朋友可以參考下
    2018-05-05
  • Java Socket通信(一)之客戶(hù)端程序 發(fā)送和接收數(shù)據(jù)

    Java Socket通信(一)之客戶(hù)端程序 發(fā)送和接收數(shù)據(jù)

    對(duì)于Socket通信簡(jiǎn)述,服務(wù)端往Socket的輸出流里面寫(xiě)東西,客戶(hù)端就可以通過(guò)Socket的輸入流讀取對(duì)應(yīng)的內(nèi)容,Socket與Socket之間是雙向連通的,所以客戶(hù)端也可以往對(duì)應(yīng)的Socket輸出流里面寫(xiě)東西,然后服務(wù)端對(duì)應(yīng)的Socket的輸入流就可以讀出對(duì)應(yīng)的內(nèi)容
    2016-03-03
  • Java?實(shí)現(xiàn)字符串SHA1加密方法

    Java?實(shí)現(xiàn)字符串SHA1加密方法

    這篇文章主要介紹了Java?實(shí)現(xiàn)字符串SHA1加密方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-11-11
  • 詳解 Corba開(kāi)發(fā)之Java實(shí)現(xiàn)Service與Client

    詳解 Corba開(kāi)發(fā)之Java實(shí)現(xiàn)Service與Client

    這篇文章主要介紹了詳解 Corba開(kāi)發(fā)之Java實(shí)現(xiàn)Service與Client的相關(guān)資料,希望通過(guò)本文能幫助到大家,需要的朋友可以參考下
    2017-10-10
  • SpringBoot2.x 集成 Thymeleaf的詳細(xì)教程

    SpringBoot2.x 集成 Thymeleaf的詳細(xì)教程

    本文主要對(duì)SpringBoot2.x集成Thymeleaf及其常用語(yǔ)法進(jìn)行簡(jiǎn)單總結(jié),其中SpringBoot使用的2.4.5版本。對(duì)SpringBoot2.x 集成 Thymeleaf知識(shí)感興趣的朋友跟隨小編一起看看吧
    2021-07-07
  • java8中的HashMap原理詳解

    java8中的HashMap原理詳解

    這篇文章主要介紹了java8中的HashMap原理詳解,HashMap是日常開(kāi)發(fā)中非常常用的容器,HashMap實(shí)現(xiàn)了Map接口,底層的實(shí)現(xiàn)原理是哈希表,HashMap不是一個(gè)線(xiàn)程安全的容器,需要的朋友可以參考下
    2023-09-09
  • Java中JSONObject與JSONArray的使用區(qū)別詳解

    Java中JSONObject與JSONArray的使用區(qū)別詳解

    這篇文章主要介紹了Java中JSONObject與JSONArray的使用區(qū)別詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-11-11
  • java實(shí)現(xiàn)連接mysql數(shù)據(jù)庫(kù)單元測(cè)試查詢(xún)數(shù)據(jù)的實(shí)例代碼

    java實(shí)現(xiàn)連接mysql數(shù)據(jù)庫(kù)單元測(cè)試查詢(xún)數(shù)據(jù)的實(shí)例代碼

    下面小編就為大家?guī)?lái)一篇java實(shí)現(xiàn)連接mysql數(shù)據(jù)庫(kù)單元測(cè)試查詢(xún)數(shù)據(jù)的實(shí)例代碼。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2016-10-10
  • java拼接字符串時(shí)去掉最后一個(gè)多余逗號(hào)的方法

    java拼接字符串時(shí)去掉最后一個(gè)多余逗號(hào)的方法

    這篇文章主要介紹了java拼接字符串時(shí)去掉最后一個(gè)多余逗號(hào)的方法,實(shí)例分析了java操作字符串的技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下
    2015-03-03

最新評(píng)論

香河县| 崇左市| 灵璧县| 长春市| 澄江县| 稻城县| 综艺| 石门县| 寻甸| 泌阳县| 陇川县| 新巴尔虎右旗| 武邑县| 视频| 平安县| 西城区| 鄂尔多斯市| 屏东县| 西藏| 穆棱市| 元江| 资源县| 荔浦县| 庆元县| 台州市| 海安县| 田林县| 济源市| 静宁县| 广元市| 绥阳县| 浠水县| 繁昌县| 丹棱县| 资溪县| 铜山县| 聂拉木县| 贵定县| 锡林郭勒盟| 酒泉市| 临漳县|