http協議之版本差異(2)
—————————————HTTP1.0/HTTP1.1——————————————
建立連接方面
HTTP/1.0 每次請求都需要建立新的TCP連接,連接不能復用。HTTP/1.1 新的請求可以在上次請求建立的
TCP連接之上發送,連接可以復用。優點是減少重復進行TCP三次握手的開銷,提高效率。註意:在同一個TCP連
接中,新的請求需要等上次請求收到響應後,才能發送。
HTTP請求方法
根據HTTP標準,HTTP請求可以使用多種請求方法。
HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
請求頭信息
請求頭信息是由一個個頭域組成。
每個頭域由一個域名、冒號(:)和域值三部分組成。域名是大小寫無關的,域值前可以添加任何數量的空格
符,頭域可以被擴展為多行,在每行開始處,使用至少一個空格或制表符。
例如:
Host: 192.168.1.104:8888
下面實例是一點典型的使用GET來傳遞數據的實例:
客戶端請求:
GET /hello.txt HTTP/1.1
User‐Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept‐Language: en, mi
服務器響應消息
HTTP響應也由四個部分組成,分別是:狀態行、消息報頭、空行和響應正文。
狀態碼
當瀏覽者訪問一個網頁時,瀏覽者的瀏覽器會向網頁所在服務器發出請求。當瀏覽器接收並顯示網頁前,此網頁所
在的服務器會返回一個包含HTTP狀態碼的信息頭(server header)用以響應瀏覽器的請求。
HTTP狀態碼的英文為HTTP Status Code。
下面是常見的HTTP狀態碼:
- 200 - 請求成功
- 301 - 資源(網頁等)被永久轉移到其它URL
- 404 - 請求的資源(網頁等)不存在
- 500 - 內部服務器錯誤
HTTP狀態碼分類:
HTTP狀態碼由三個十進制數字組成,第一個十進制數字定義了狀態碼的類型,後兩個數字沒有分類的作用。
HTTP狀態碼共分為5種類型:
HTTP狀態碼列表:
響應頭信息
HTTP請求頭提供了關於請求,響應或者其他的發送實體的信息。
get響應
TTP/1.1 200 OK\r\n
Server: Tengine\r\n
Content‐Type: application/octet‐stream\r\n
Content‐Length: 9568\r\n
Connection: keep‐alive\r\n
Date: Wed, 14 Sep 2016 09:06:22 GMT\r\n
Last‐Modified: Wed, 14 Sep 2016 09:05:01 GMT\r\n
Timing‐Allow‐Origin: *, *\r\n
Accept‐Ranges: bytes\r\n
Via: cache1.l2et15[0,304‐0,H], cache10.l2et15[1,0], cache5.cn463[0,200‐0,H],
cache5.cn463[0,0]\r\n
Age: 3\r\n
X‐Cache: HIT TCP_MEM_HIT dirn:‐2:‐2\r\n
X‐Swift‐SaveTime: Wed, 14 Sep 2016 09:06:22 GMT\r\n
X‐Swift‐CacheTime: 10\r\n
EagleId: 9dff8b4514738439859887791e\r\n
\r\n
使用瀏覽器發送一個get請求如:
http://192.168.1.104:8888?username=wenong&passwd=123456
GET/POST對比:
1)Get是用來從服務器上獲得數據,而Post是用來向服務器上傳遞數據。
2)Get將表單中數據的按照variable=value的形式,添加到action所指向的URL後面,並且兩者使用“?”連接,
而各個變量之間使用“&”連接;Post是將表單中的數據放在的數據體中,按照變量和值相對應的方式,傳遞到action
所指向URL。
3)Get是不安全的,因為在傳輸過程,數據被放在請求的URL中,而如今現有的很多服務器、代理服務器或者
用戶代理都會將請求URL記錄到日誌文件中,然後放在某個地方,這樣就可能會有一些隱私的信息被第三方看到。
另外,用戶也可以在瀏覽器上直接看到提交的數據,一些系統內部消息將會一同顯示在用戶面前。Post的所有操作
對用戶來說都是不可見的。
4)Get傳輸的數據量小,這主要是因為受URL長度限制;而Post可以傳輸大量的數據,所以在上傳文件只能
使用Post。
表單方式提交提GET請求,例如web服務器中的index.html中填寫:
<HTML>
<BODY>
<FORM ACTION="color.cgi" METHOD="GET">
Enter a color: <INPUT TYPE="text" NAME="color">
<INPUT TYPE="submit">
</FORM>
</BODY>
</HTML>
GET請求
GET /color.cgi?color= HTTP/1.1
Host: 192.168.1.104:8888
Connection: keep‐alive
Upgrade‐Insecure‐Requests: 1
User‐Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/51.0.2704.106 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://192.168.1.104:8888/
Accept‐Encoding: gzip, deflate, sdch
Accept‐Language: zh‐CN,zh;q=0.8
表單方式提交POST提請求,例如web服務器中的index.html中填寫:
<HTML>
<BODY>
<FORM ACTION="color.cgi" METHOD="POST">
Enter a color: <INPUT TYPE="text" NAME="color">
<INPUT TYPE="submit">
</FORM>
</BODY>
</HTML>
POST請求
POST /color.cgi HTTP/1.1
Host: 192.168.1.104:8888
Connection: keep‐alive
Content‐Length: 10
Cache‐Control: max‐age=0
Origin: http://192.168.1.104:8888
Upgrade‐Insecure‐Requests: 1
User‐Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko)
Chrome/51.0.2704.106 Safari/537.36
Content‐Type: application/x‐www‐form‐urlencoded
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Referer: http://192.168.1.104:8888/
Accept‐Encoding: gzip, deflate
Accept‐Language: zh‐CN,zh;q=0.8
color=read
http協議之版本差異(2)