http協議是hypertext transfer protocol超文字傳輸協議的縮寫。http協議屬於應用層協議,它構建在tcp和ip協議之上,處於tcp/ip體系架構中的頂端,使用tcp/ip協議來傳輸資料。這樣一來它就不必處理下層協議間諸如丟包補發、握手及資料的分段和重新組裝等。
靈活:http允許傳輸任意型別的資料物件。正在傳輸的型別由content-type加以標記。
無連線:無連線的含義是限制每次連線只處理乙個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間。
無狀態:http協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快。為了解決這個問題,引入cookie和session。
瀏覽器根據所使用的http協議,解析出url對應的網域名稱;
通過dns網域名稱解析,查詢出該網域名稱對應的ip位址;
通過url解析出對應的埠號,如果是80,預設可以省略;
瀏覽器根據ip和埠建立tcp連線;
瀏覽器向伺服器傳送一條http請求報文,比如get請求;
伺服器相應請求,並傳送給瀏覽器返回報文;
瀏覽器渲染網頁並關閉與伺服器的連線。
小技巧
乙個http請求報文由請求行(request line)、請求頭部(request header)、空行和請求資料組成,如下圖:
請求頭部:
請求頭部為請求報文新增了一些附加資訊,由「名/值」對組成,每行一對,名和值之間使用冒號分隔。
請求頭部的最後會有乙個空行,表示請求頭部結束,接下來為請求資料,這一行非常重要,必不可少。
請求頭部內容的詳細介紹可以參考:我的gitbook:http的請求格式
請求資料:
可選部分,比如get請求就沒有請求資料。
下面是乙個post方法的請求報文:
1.1 請求行
host: localhost
user-agent: mozilla/5.0 (windows nt 5.1; rv:10.0.2) gecko/
20100101 firefox/10.0
.2 請求頭
空行username=aa&password=1234 請求資料
注意:可以使用谷歌自帶的http報文***檢視http詳細報文
chrome://net-internals/#events
http響應報文主要由狀態行、響應頭部、空行以及響應資料組成。
狀態行:
3部分組成,分別為:協議版本,狀態碼,狀態碼描述。
比如200表示響應成功,404表示請求的網頁不存在,500表示伺服器內部錯誤等。
響應頭部:
和請求頭部類似,可以參考:我的gitbook:http的請求格式
響應正文:
用於存放需要返回給客戶端的資料資訊。
下面是乙個響應報文的例項:
狀態行date:
sun,
17mar
2013
08:12:54
gmt響應頭部
server:
apache/2.2.8
(win32)
php/5.2.5
x-powered-by:
php/5.2.5
set-cookie:
phpsessid=c0huq7pdkmm5gg6osoe3mgjmm3;
path=/
expires:
thu,
19nov
1981
08:52:00
gmtcache-control:
no-store,
no-cache,
must-revalidate,
post-check=0,
pre-check=0
pragma:
no-cache
content-length:
4393
keep-alive:
timeout=5,
max=100
connection:
keep-alive
content-type:
text/html;
charset=utf-8
空行響應資料
get提交的資料會放在url之後,以?分割url和傳輸資料,引數之間以&相連,如editposts.aspx?name=test1&id=123456. post方法是把提交的資料放在http包的body中;
get提交的資料大小有限制(因為瀏覽器對url的長度有限制),而post方法提交的資料沒有限制,不過一般web伺服器會對post的請求大小進行限制;
get方式提交資料,會帶來安全問題,比如乙個登入頁面,通過get方式提交資料時,使用者名稱和密碼將出現在url上,如果頁面可以被快取或者其他人可以訪問這台機器,就可以從歷史記錄獲得該使用者的賬號和密碼。
參考:
http協議入門
1 http協議是什麼?有什麼作用?http協議 超文字傳輸協議 http,hypertext transfer protocol 是網際網路上應用最為廣泛的一種網路協議以www開頭的,必定遵守http協議 有以下三種特性 超文字 超文字效果,超文字內容 傳輸 雙向的傳輸 請求 響應 一問一答機制 ...
HTTP協議入門
rtt 往返時間,指乙個分組從客戶端傳送到伺服器,然後再返回到客戶端所需的時間,包括分組傳播時延 分組在中間路由器和交換機上的排隊時延以及分組處理時延。connection closeconnection close get 最為常用,用於請求伺服器的乙個物件 post 提交表單時使用,右圖請求資料...
HTTP 協議入門
早上看了阮一峰老師寫的 http 協議入門 總結一下。一 http http 協議 無狀態協議 是基於 tcp ip 協議的應用層協議,規定了客戶端與服務端的通訊格式,一般用 80 埠。無狀態 減少伺服器的 cpu 及記憶體資源的消耗。但是不對之前發生過的請求和響應的狀態進行管理。解決方法 引入 c...