2021-05-12 14:32:11
HTTP協定初步解析
2020-06-16 17:38:56
一、什麼是HTTP協定
HTTP是hypertext transfer protocol(超文字傳輸協定)的簡寫,它是TCP/IP協定的一個應用層協定,定義了Web用戶端向Web伺服器請求Web頁面的方式,以及伺服器向用戶端傳送Web頁面的方式。
定義中的名詞解釋:
什麼是超文字?
超文字是用超連結的方法,將各種不同空間的文字資訊組織在一起的網狀文字。
什麼是應用層協定?
網路的設計者使用分層的方式組織網路協定以及實現這些協定的硬體和軟體,歷史上比較重要的一個協定組織模型是五層因特網協定棧,從頂層到底層,分別為應用層、運輸層、網路層、鏈路層、物理層。其中應用層常見的協定有HTTP、SMTP、FTP等,運輸層協定有TCP、UDP等,網路層有IP等。
二、HTTP協定特點
1. HTTP使用TCP作為它的運輸層協定,TCP為HTTP提供可靠資料傳輸服務。使用了分層結構,HTTP協定不用擔心資料丟失,也不用關注TCP從網路的資料丟失和亂序故障中恢復的細節。
2. HTTP是一個無狀態協定,伺服器向用戶端傳送被請求的檔案,而不儲存任何關於該客戶的資訊,(需要儲存則應當使用cookie)。
3. HTTP/1.0使用非持續連線,HTTP/1.1使用持續連線。使用持續連線,在客戶和伺服器中不用多次分配TCP的緩衝區和保持TCP變數,同時避免了每一個傳輸物件的兩倍RTT交付時延。HTTP的預設模式是使用帶流水線的持續連線。
三、HTTP報文格式
1. 請求報文
舉例如下:
GET /somedir/page.html HTTP/1.1
Host: www.someschool.edu
Connection: close
User-agent: Mozilla/5.0
Accept-language: fr
-------------------------------------------------------
First line: request line
Other lines: header line
請求行: 方法欄位 - URL欄位 - HTTP版本欄位
其中,方法欄位可取GET, POST, HEAD, PUT, DELETE等
預設為GET請求,在URL後附帶引數,有大小限制,不超過1K
表單提交中指明用POST時用POST,在實體中傳遞,無大小限制
HEAD方法常用於偵錯,只返回HTTP報文,不返回請求物件
Connection: close表示不使用持續連線
常見的請求頭:
Accept: text/html,image/* 客戶可接受的資料型別
Accept-Charset: ISO-8859-1 接受資料需要使用的字元集編碼
Accept-Encoding: gzip,compress 接受的資料壓縮格式
Accept-Language: en-us,zh-cn 接受的語言環境
Host: www.it315.org:80 虛擬主機名
If-Modified-Since: Tue, 11 Jul 2000 18:23:51 GMT 快取資源的最後獲取時間
Referer: http://www.it315.org/index.jsp 當前的請求來自哪個連結
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0) 用戶端的資訊
Cookie
Connection: close/Keep-Alive 指定是否保持連線
Date: Tue, 11 Jul 2000 18:23:51 GMT 當前時間
2. 響應報文
舉例如下:
HTTP/1.1 200 ok
Connection: close
Date: Tue, 09 Aug 2011 15:44:04 GMT
Server: Apache/2.2.3 (CentOS)
Last-Modified: Tue, 09 Aug 2011 15:11:03 GMT
Content-Length: 6821
Content-Type: text/html
(Data, Data, Data ...)
-------------------------------------------------------
First line: status line
Last line: entity body
Other lines: header line
狀態行:協定版本 - 狀態碼 - 狀態資訊
狀態碼和狀態資訊常見的有:
200 OK
301 Moved Permanently
400 Bad Request
404 Not found
505 HTTP Version Not Supported
-------------------------------------------------------
100 ~ 199 表示成功接收,用戶端需要繼續提交才能完成整個過程,200 ~ 299 表示成功接收並已完成整個過程
300 ~ 399 為完成請求,客戶需要進一步細化請求,如302請求重定向,304, 307 通知使用快取
400 ~ 499 用戶端請求有錯誤
500 ~ 599 伺服器端出現錯誤
常見的響應頭:
Location: http://www.it315.org/index.jsp 配合302實現請求重定向
Server:apache tomcat 伺服器的基本資訊
Content-Encoding: gzip 伺服器傳送資料時使用的壓縮格式
Content-Length: 80 傳送資料的大小
Content-Language: zh-cn 傳送資料使用的語言環境
Content-Type: text/html; charset=GB2312 當前所傳送的資料的基本資訊
Last-Modified: Tue, 11 Jul 2000 18:23:51 GMT 快取相關
Refresh: 1;url=http://www.it315.org 定時重新整理到某個URL
Content-Disposition: attachment;filename=aaa.zip 與下載有關的頭
Transfer-Encoding: chunked 資料傳輸型別,資料一塊塊傳輸
Set-Cookie:SS=Q0=5Lb_nQ; path=/search 設定cookie
ETag: W/"83794-1208174400000" 和快取相關
Expires: -1 指定資源快取的時間,如果取值為0或-1瀏覽就不快取資源
Cache-Control: no-cache 如果為no-cache則通知瀏覽器不快取
Pragma: no-cache 如果為no-cache則通知瀏覽器不快取
由於歷史原因,以上三個都用來控制快取,同時使用
Connection: close/Keep-Alive 是否保持連線
Date: Tue, 11 Jul 2000 18:23:51 GMT 當前時間
三、Telnet演示
telnet cis.poly.edu 80
相關文章