超文本传输协议及HTTP包
HTTP協議用于在Internet上發送和接收消息。HTTP協議是一種請求-應答式的協議 ——客戶端發送一個請求,服務器返回該請求的應答,所有的請求與應答都是HTTP包。HTTP協議使用可靠的TCP連接,默認端口是80。HTTP的第一 個版本是HTTP/0.9,后來發展到了HTTP/1.0,現在最新的版本是HTTP/1.1。HTTP/1.1由RFC 2616 定義。
在HTTP 中,Client/Server之間的會話總是由客戶端通過建立連接和發送HTTP請求包初始化,服務器不會主動聯系客戶端或要求與客戶端建立連接。瀏覽 器和服務器都可以隨時中斷連接,例如,在瀏覽網頁時你可以隨時點擊"停止"按鈕中斷當前的文件下載過程,關閉與Web服務器的HTTP連接。
1 HTTP請求包
HTTP請求包(GET、POST等請求方法)由三個部分構成,分別是:方法-URI-協議/版本,請求頭,請求正文。下面是一個HTTP請求包(GET)的例子:
Accept-Language: zh-cn
Connection: Keep-Alive
Host: 192.168.0.106
Content-Length: 37
userName=new_andy&password=new_andy
請求包的第一行是方法-URI-協議/版本:
GET就是請求方法,根據HTTP標準,HTTP請求可以使用多種請求方法。HTTP 1.1支持七種請求方法:GET、POST、HEAD、OPTIONS、PUT、delete和TRACE等,常用的為請求方法是GET和POST。
/index.jsp 表示URI。URI指定了要訪問的網絡資源。
HTTP/1.1是協議和協議的版本。
最 后一行userName=new_andy&password=new_andy為正文,正文與HTTP頭部有一個空行(\r\n)分隔。這里需 要說明的一點,其中Content-Length說明正文的長度,有的正文長度沒有在頭部說明,只是標明Transfer-Encoding: chunked。關于chunked類型的長度計算方法,見RFC 1626。
請求包的頭部還會包含許多有關客戶端環境和請求正文的有用信息,這里不再描述。
2 HTTP應答包
和HTTP請求包相似,由三個部分構成,分別是:協議-狀態代碼-描述,應答頭,應答正文。下面是一個HTTP應答的例子:
Server: Microsoft-IIS/4.0
Date: Mon, 3 Jan 2005 13:13:33 GMT
Content-Type: text/html
Last-Modified: Mon, 11 Jan 2004 13:23:42 GMT
Content-Length: 90
<html>
<head>
<title> 解讀HTTP包示例</title></head><body>
Hello WORLD!
</body>
</html>
HTTP應答包的第一行類似于HTTP請求的第一行,表示所用的協議是HTTP 1.1,服務器處理請求的狀態碼200。
應答頭也和請求頭一樣包含許多有用的信息,例如服務器類型、日期時間、內容類型和長度等。應答的正文就是服務器返回的HTML頁面。應答頭和正文之間也用 CRLF分隔。
wiki中的解釋
超文本傳輸協議(HTTP,HyperText Transfer Protocol)是互聯網上應用最為廣泛的一種網絡傳輸協議。所有的WWW文件都必須遵守這個標準。設計HTTP最初的目的是為了提供一種發布和接收HTML頁面的方法。
概述
HTTP的發展是萬維網協會和Internet工作小組合作的結果,在一系列的RFC發布中確定了最終版本,其中最著名的是RFC 2616。在RFC 2616中定義了HTTP/1.1這個今天普遍使用的版本。
HTTP是一個用于在客戶端和服務器間請求和應答的協議。一個HTTP的客戶端,諸如一個web瀏覽器,通過建立一個到遠程主機特殊端口(默認端口為80)的連接,初始化一個請求。一個HTTP服務器通過監聽特殊端口等待客戶端發送一個請求序列, 就像“GET / HTTP/1.1”(用來請求網頁服務器的默認頁面),有選擇的接收像email一樣的MIME消 息,此消息中包含了大量用來描述請求各個方面的信息頭序列,響應一個選擇的保留數據主體。接收到一個請求序列后(如果要的話,還有消息),服務器會發回一 個應答消息,諸如“200 OK”,同時發回一個它自己的消息,此消息的主體可能是被請求的文件、錯誤消息或者其他的一些信息。
HTTP不同于其他基于TCP的協議,諸如FTP。 在HTTP中,一旦一個特殊的請求(或者請求的相關序列)完成,連接通常被中斷。這個設計使得對于當前頁面有規則連接到另一臺服務器頁面的萬維網來說, HTTP是完美的。當持久連接的缺乏成為保持用戶狀態的必需選擇的方法時,對網頁設計者來說,會偶然產生一些問題。而大部分這些方法包括了對“cookies”的使用。
這里有一個HTTP的安全版本稱為HTTPS,HTTPS支持任何的加密算法,只要此加密算法能被頁面雙方所理解。
HTTP(和HTTPS)由唯一資源定位器或者簡稱URLs定位。創造這種地址定位的語法為了HTML的鏈接。
例子
下面是一個HTTP客戶端與服務器之間會話的例子,運行于www.google.com,端口80
客戶端請求:
GET / HTTP/1.1 Host:www.google.com(緊跟著一個換行,通過敲入回車實現)
服務器應答:
HTTP/1.1 200 OK Content-Length: 3059 Server: GWS/2.0 Date: Sat, 11 Jan 2003 02:44:04 GMT Content-Type: text/html Cache-control: private Set-Cookie: PREF=ID=73d4aef52e57bae9:TM=1042253044:LM=1042253044:S=SMCc_HRPCQiqy X9j; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com Connection: keep-alive(緊跟著一個空行,并且由HTML格式的文本組成了Google的主頁)
在HTTP1.0中,客戶端發送一個請求至服務器,服務器發送一個應答至客戶端。之后,連接將被釋放。另一方面,HTTP1.1支持持久連接。這使 得客戶端可以發送請求并且接收應答,然后迅速的發送另一個請求和接收另一個應答。因為多個額外的請求,TCP連接并沒有被釋放,而每個請求中關于TCP的 負載相對較少。同時,在得到上一個請求的應答之前發送多個請求(通常是兩個)也成為可能。這個技術被稱為“流水線”。
總結
以上是生活随笔為你收集整理的超文本传输协议及HTTP包的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 存定期哪个银行利息高?聪明的存钱法
- 下一篇: STM32移植UCGUI3.90笔记