Java web基礎總結二之—— http協議

Java web基礎總結之二——http協議

 

       由於java web是基於B/S的,所以http協議是java web 最基礎,也非常重要的知識。HTTP協議用於定義客戶端與web服務器之間進行通信的格式。從web服務器中獲得某個web資源或者web 服務器接受客戶端的請求都需要遵守一定的通訊格式,就是http協議。

 

 

一.HTTP協議是什麼?

        HTTP協議是學習java web的基石,同時也是管理和維護一些複雜的WEB站點的必備的基礎,如果你想要深入的理解java web的服務器的實現,就更需要掌握它。

        HTTP是hypertext transfer protocol(超文本傳輸協議)的簡寫,它是在TCP/IP協議之上的一個應用層協議,默認的端口是80,用於定義WEB瀏覽器與WEB服務器之間交換數據的格式和規範。

        HTTP協議是無狀態的協議,是因爲一個web服務器並不會保存關於客戶機的任何的信息。在B/S架構中,web服務器總是打開的,具有固定的IP地址,同時服務成千上萬的不同的瀏覽器。

        HTTP協議有兩個版本:HTTP/1.0、HTTP/1.1。現在基本使用的都是HTTP/1.1。他們之間有一個重要的區別:在HTTP1.0協議中,客戶端與web服務器建立連接後,只能獲得一個web資源。HTTP1.1協議,允許客戶端與web服務器建立連接後,在一個連接上獲取多個web資源。也就是常說的持久連接。

二.持久連接和非持久連接的區別

          一個web頁面,也被稱爲文檔。是由對象組成的,簡單的說,對象就是文件,比如html文件,圖片文件等等。大部分的web頁面含有一個基本html文件以及多個引用對象。比如一個web頁面含有一個基本的html文件和2個圖片文件,那麼這個web頁面就有3個對象。基本html文件通過對象的URL地址對對象進行引用。URL地址由兩部分組成:存放對象的服務器的主機名和對象相對於主機的路徑名。例如:

http://c.csdnimg.cn/www/images/pic_foot_BNIA.png  中的 c.csdnimg.cn就是主機名,

/www/images/pic_foot_BNIA.png就是路徑名。

        非持久連接就是當客戶端請求一個web頁面時,對每一個對象的請求/響應都是經過一個單獨的TCP連接發送。例如,如果一個web頁面包含一個基本html文件和5個JPEG的圖片文件。則使用非持久連接時,用戶請求這個頁面,會建立6個TCP連接。

        持久連接則是對一個頁面的請求,甚至在同一個服務器上的多個web時,都可以在單個的持久TCP連接上進行傳送。比如上面的例子中,可能只需要一個持久的TCP連接。一般來說,如果一個連接經過一定的時間間隔沒有被使用,HTTP服務器就會關閉這個連接。

 

 

三.HTTP的請求

    客戶端的瀏覽器連上web服務器後,會向服務器請求某個web資源,稱之爲客戶端向服務器發送了一個HTTP請求。一個完整的HTTP請求包括:一個請求行、一些消息頭、和實體內容,其中的一些消息頭和實體內容都是可選的,消息頭和實體內容之間要用空行隔開。

 

1. 請求行

    請求行中需要注意的是請求方式,主要有:

         POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT

         我們常用的有:POST、GET 。其他的比較少遇到,這裏就不多敘述了。

       POST或GET,都是用於客戶端向服務器請求某個WEB資源,他們都可以帶一些數據給服務器,但是他們有一定的區別:

如請求方式爲GET方式,則可以在請求的URL地址後以?的形式帶上交給服務器的數據,多個數據之間以&進行分隔,例如:

                  GET/aaa/bbb?name=ccc&password=ddd HTTP/1.1

         GET方式的特點:在URL地址後附帶的參數是有限制的,其數據容量不能超過1K。可以看到,使用GET請求方式時,參數是顯示在瀏覽器的輸入框裏的,所以是可見的。

當請求方式爲POST方式,則可以在請求的實體內容中向服務器發送數據,例如:

         POST /user/loginHTTP/1.1

         Host:

         Content-Type:application/x-www-form-urlencoded

         Content-Length:28

 

         name=aaa&password=bbb

         Post方式的特點:傳送的數據量沒有大小的限制,而且參數不會在瀏覽器的地址框裏顯示。

 

2. 消息頭

   http請求頭是必須存在的,它攜帶了很多的重要的信息,比如客戶端的瀏覽器的標識,下面是HTTP請求中的常用頭:

Accept: text/html,image/*   

Accept-Charset: ISO-8859-1

Accept-Encoding: gzip,compress

Accept-Language: en-us,zh-cn

Host: http://www.csdn.net:80

If-Modified-Since: Tue, 11 Jul 2010 18:23:51 GMT

Referer: http:// http://www.csdn.net

User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)

Cookie

Connection: close/Keep-Alive  

Date: Tue, 11 Jul 2010 18:23:51 GMT

 

 

四.HTTP的響應

        和HTTP的請求相對應,一個HTTP響應表示服務器向客戶端回送的數據,它也包括三個部分:一個狀態行、若干消息頭、以及實體內容,其中的一些消息頭和實體內容都是可選的,消息頭和實體內容之間要用一個空行作爲間隔。

        狀態行中需要知道的就是狀態碼,狀態碼錶示服務器對請求的處理結果,它是一個三位的十進制數。響應狀態碼總共分爲5類,如下所示:

 

100~199

表示成功接收請求,要求客戶端繼續提交下一次請求才能完成整個處理過程

200~299

表示成功接收請求並已完成整個處理過程,常用200

300~399

爲完成請求,客戶需進一步細化請求。例如,請求的資源已經移動一個新地址,常用302、307和304。比如304的重定向

400~499

客戶端的請求有錯誤,常用如403的禁止訪問和404的找不到資源

500~599

服務器出現錯誤,比如服務器端程序拋出了異常,常用 500。

 

 

 和 HTTP請求頭一樣,HTTP也有一些常用的響應頭,如下所示:

Location: http:// www.csdn.net

Server:apache tomcat

Content-Encoding: gzip

Content-Length: 80

Content-Language: zh-cn

Content-Type: text/html; charset=GB2312

Last-Modified: Tue, 11 Jul 2010 18:23:51 GMT

Refresh: 1;url=http://www.csdn.net

Content-Disposition: attachment; filename=aaa.zip

Transfer-Encoding: chunked 

Set-Cookie:SS=Q0=5Lb_nQ; path=/aaa

Expires: -1

Cache-Control: no-cache 

Pragma: no-cache  

Connection: close/Keep-Alive  

Date: Tue, 11 Jul 2000 18:23:51 GMT

 

   需要注意的是,有一些通用的消息頭,既可以用於請求,也可以用於響應,比如:

  Cache-Control:no-cache    用於指定是否需要緩存

  Pragma:no-cache   Pragma: no-cache兼容http 1.0 ,Cache-Control:no-cache是http 1.1新加的消息頭。

  Connection:close/Keep-Alive   這個就是控制是持久連接還是非持久連接。

  Date: Tue, 11Jul 2000 18:23:51 GMT 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章