HTTP 協議 學習筆記一

衣舞晨風發表於2016-07-23

一、什麼是HTTP 協議?

超文字傳輸協議(HTTP,HyperText Transfer Protocol)是網際網路上應用最為廣泛的一種網路協議。是工作在tcp/ip協議基礎上的,所有的WWW檔案都必須遵守這個標準。設計HTTP最初的目的是為了提供一種釋出和接收HTML頁面的方法。
通過httpwatch外掛來抓取http請求內容。
http1.0 短連線 http1.1 長連線.
http是TCP/IP協議的一個應用層協議,http也是我們web開發的基礎.

看一個test.html頁面

<html>
<head>

</head>
<body>
<h1>abc</h1>
<img src="/resource/images/baby.png"/>
<img src="/resource/images/cat.png"/>
</body>
</html>

該頁面會向瀏覽器發出幾次http請求?
答案是:3次(第一次獲取html頁面,第2、3分別是獲取對應的圖片)
具體資訊如下:
這裡寫圖片描述

演示demo下載:http://download.csdn.net/detail/xunzaosiyecao/9584009

二、HTTP請求

客戶端連上伺服器後,向伺服器請求某個web資源,稱之為客戶端向伺服器傳送了一個HTTP請求。一個完整的HTTP請求包括如下內容: 一個請求行、若干訊息頭、以及實體內容,其中的一些訊息頭和實體內容都是可選的,訊息頭和實體內容之間要用空行隔開。如下所示 :
該圖來自韓順平老師的講義

1、HTTP請求的細節——請求行

請求行中的GET稱之為請求方式,請求方式有:
POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT
常用的有:POST、GET

POST、GET有以下區別.

  1. POST、GET在http請求中出現位置不一樣

    GET提交:請求的資料會跟在URL之後例如:login.php?name=abc&password=kkk

    POST提交:把提交的資料放置在是HTTP包的包體中。比如:
    POST /test/reg.php HTTP/1.1
    Host:
    Content-Type:
    Content-Length:

    name=abc&password=xyz

    因此,GET提交的資料會在位址列中顯示出來,而POST提交,位址列不會改變。

  2. 傳輸資料的大小
    首先宣告:
    HTTP協議沒有對傳輸的資料大小進行限制,HTTP協議規範也沒有對URL長度進行限制。
    而在實際開發中存在的限制主要有:
    GET:特定瀏覽器和伺服器對URL長度有限制,例如IE對URL長度的限制是2083位元組(2K+35)。對於其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於作業系統的支援。
    因此對於GET提交時,傳輸資料就會受到URL長度的限制。
    POST:由於不是通過URL傳值,理論上資料不受限。

  3. 安全性
    相對而言post提交,安全高.

  4. Get提交 更利於新增到我的收藏夾

2、HTTP請求的細節——訊息頭

用於HTTP請求中的常用頭

Accept: text/html,image/*   [告訴伺服器,我可以接受 文字,網頁,圖片]
Accept-Charset: ISO-8859-1 [接受字元編碼 iso-8859-1]
Accept-Encoding: gzip,compress [可以接受 gzip,compress壓縮後資料.]
Accept-Language: en-us,zh-cn [瀏覽器支援中,英文]
Host: www.sohu.com:80 [我要找主機是 www.sohu.com:80]
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT [ 告訴伺服器,我的緩衝中有這個資原始檔,該檔案的時間是 。。。]
Referer: http://www.sohu.com/index.jsp  [告訴伺服器,我來自哪裡,該訊息頭,常用於防止盜鏈]
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)[告訴伺服器,瀏覽器核心]
Cookie [cookie??]
Connection: close/Keep-Alive   [保持連線,發完資料後,我不關閉連線]
Date: Tue, 11 Jul 2000 18:23:51 GMT [瀏覽器傳送該http請求的時間]

獲取Referer:

//獲取使用者瀏覽器Referer
String referer=request.getHeader("Referer");

當伺服器需要知道請求是來自哪個ip等資訊,就可通過程式獲得相應的資訊。

3、HTTP響應

一個HTTP響應代表伺服器向客戶端回送的資料,它包括:
一個狀態行、若干訊息頭、以及實體內容 ,其中的一些訊息頭和實體內容都是可選的,訊息頭和實體內容之間要用空行隔開。
該圖來自韓順平老師的講義

4、HTTP響應的細節——狀態行

基本結構:
格式: HTTP版本號 狀態碼 原因敘述
舉例:HTTP/1.1 200 OK
狀態碼用於表示伺服器對請求的處理結果,它是一個三位的十進位制數。響應狀態碼分為5類,如下所示:

狀態碼 含義
100~199 表示成功接收請求,要求客戶端繼續提交下一次請求才能完成整個處理過程
200~299 表示成功接收請求並已完成整個處理過程,常用200
300~399 為完成請求,客戶需進一步細化請求。例如,請求的資源已經移動一個新地址,常用302、304
400~499 客戶端的請求有錯誤,常用404
500~599 伺服器端出現錯誤,常用 500

5、HTTP響應細節——常用響應頭

Location: http://www.baidu.org/index.jsp  【讓瀏覽器重新定位到url】
Server:apache tomcat 【告訴瀏覽器我是tomcat】
Content-Encoding: gzip 【告訴瀏覽器我使用 gzip】
Content-Length: 80  【告訴瀏覽器會送的資料大小80節】
Content-Language: zh-cn 【支援中文】
Content-Type: text/html; charset=GB2312 [內容格式text/html; 編碼gab2312]
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT 【告訴瀏覽器,該資源上次更新時間】
Refresh: 1;url=http://www.baidu.com 【過多久去,重新整理到 http://www.baidu.com】
Content-Disposition: attachment; filename=aaa.zip 【告訴瀏覽器,有檔案下載】
Transfer-Encoding: chunked  [傳輸的編碼]
Set-Cookie:SS=Q0=5Lb_nQ; path=/search[後面詳講]
Expires: -1[告訴瀏覽器如何快取頁面IE]
Cache-Control: no-cache  [告訴瀏覽器如何快取頁面火狐]
Pragma: no-cache   [告訴瀏覽器如何快取頁面]
Connection: close/Keep-Alive   [保持連線 1.1是Keep-Alive]
Date: Tue, 11 Jul 2000 18:23:51 GMT

Expires: -1
Cache-Control: no-cache
Pragma: no-cache
是用來防止瀏覽器進行快取的。

作者:jiankunking 出處:http://blog.csdn.net/jiankunking
本文部分內容整理自網路

相關文章