HTTP協議初步解析
HTTP協議初步解析
一、什麼是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
本文永久更新鏈接地址:
http://xxxxxx/Linuxjc/1141021.html TechArticle