標籤:通訊 標識符 瀏覽器 客戶 訪問 sub 介紹 查詢 referer
前言
超文字傳輸通訊協定 (HTTP)(HTTP,HyperText Transfer Protocol)是互連網上應用最為廣泛的一種網路通訊協定。所有的WWW檔案都必須遵守這個標準
HTTP是一個基於TCP/IP通訊協定來傳輸資料(HTML檔案、圖片檔案、查詢結果)
HTTP協議工作於用戶端-服務端架構為上。瀏覽器作為HTTP用戶端通過URL向HTTP服務端即WEB伺服器發送所有請求。Web伺服器根據接收到的請求後,向用戶端發送響應資訊。(請求的資料往往比較小,而返回的資料往往比較大。因為返回的資料中包含了Body)
HTTP是無狀態的 FTP是有狀態的
為什麼要學習http協議
主要是為了方便後面openstack的搭建,因為openstack中各個組件間相互連信就是基於restful api的,restful api 可以理解為一個url地址 也就是http協議進行通訊的
使用者是如何訪問到瀏覽器中的檔案呢?
看
HTTP1.1 與1.0的區別
1.HTTP/1.0協議使用非持久串連,即在非持久串連下,一個tcp串連只傳輸一個Web對象,;
2.HTTP/1.1預設使用持久串連(然而,HTTP/1.1協議的客戶機和伺服器可以配置成使用非持久串連)。
在持久串連下,不必為每個Web對象的傳送建立一個新的串連,一個串連中可以傳輸多個對象!
URL與URI
URL:(Unifrom/Universal Resource Locator)的縮寫,即統一資源定位器
URI:(Uniform Resource Identifier)的縮寫,即統一資源識別項 (代表一種標準)
URL:協議名://網域名稱:連接埠 如http://www.cnblogs.com:80/
URI:協議名://網域名稱:連接埠/路徑 如http://www.cnblogs.com:80/index.html
請求協議
請求格式(即瀏覽器發給服務端的內容格式)
http://host[:port][abs_path][空行][請求體]http:表示要通過http協議來定位網路資源host:表示合法的Internet主機網域名稱或IP地址port:用於指定一個連接埠號碼,擁有被請求資源的伺服器主機監聽該連接埠的TCP串連(如果port為空白,則使用預設的連接埠80)當伺服器的連接埠不是80時,需要指定連接埠號碼abs_path:指定請求資源的URI。空行:用來與請求體分隔開請求體:常用的就是GET或者POST(GET沒有請求體,POST有請求體)
瀏覽器發送請求到伺服器的內容就是這個格式,如果不是這個格式伺服器無法解讀。
GET請求:
HTTP預設請求就是GET
特點:
沒有請求體(GET不夾雜使用者提交的資訊,例如使用者名稱密碼之類的這種隱私的資訊)
請求資料必須在1K之內(socket協議規定)
GET請求的資料會暴露在瀏覽器的地址欄中
GET請求常用的操作
瀏覽器地址欄直接給出URL地址,就是GET請求
在頁面上點選連結,也是一個GET請求
提交表單(例如登入在前端中from就是表單的意思)的時候預設時候是GET,但也可以設定為POST。在提交資料的時候基本上都是POST
執行個體
www.zhihu.com
Response:返回體(使用者擷取的頁面)
查看要求標頭資訊
點擊view source查看源碼 如
1:GET請求。 “/” 代表要訪問的頁面。 http協議1.1
2:Host訪問的主機
3:連結類型:長串連
4:Upgrade-Insecure-Requests
5:user-agent:user用戶端一些簡單資訊
6:accept:可以接收那些頁面類型。(text/html、xml、image、等)
7:accept-encoding:字元編碼(讓電腦識字元)這裡代表的是壓縮格式
8:Accept-Language:支援的語言格式
9:Cookie:一個cookie對應一個session
10:If-Modified-Since:當用戶端再次向伺服器發起請求時並發送這個時間,伺服器會根據自己的Last-Modified的時間對比,如果兩者時間一樣,那麼瀏覽器會從本地提取快取頁面面,大大緩解了伺服器的效能
以上就是請求過程,用戶端請求結束後,服務端會返回兩個東西(一個是Response頁面,另一個是回應標頭Response Headers)
查看回應標頭資訊
點擊view source查看源碼 如
1:HTTP/1.1 200 ok 用戶端收到http協議,返回狀態代碼(請求成功)
2:Content-Type:返回到用戶端的資料類型(返回什麼類型,用什麼方式解析這個類型)
3:Date:顯示日期
4:SWS:網站首頁所使用的web服務
5:Expires:緩衝的到期時間
6:Last-modified:上次頁面修改的時間
7:Content-Encoding:使用什麼類型壓縮Response內容
8:Content-Length:頁面大小(不包含圖片視頻等,只包含串連)
以上就是回應標頭的簡單介紹
一般資訊
1:用戶端請求的url地址
2:請求類型
3:狀態代碼
4:遠程地址
POST請求
特點:
1:資料不會出現在地址欄中
2:資料大小沒上線
3:有請求體
4:請求體中如果有中文,會使用URL編碼
執行個體
1 <!DOCTYPE html> 2 <html> 3 <body> 4 5 <form method="post"> 6 user:<br> 7 <input type="text" name="username"> 8 <br> 9 password:<br>10 <input type="text" name="password">11 <input type="submit" value="login">12 </form>13 14 </body>15 </html>16 17 #表單測試
在pycharm中測試
1 在地址欄中看到test.html是這個html檔案
2 頁面後面的"?"代表著get請求
如果預設請求是get方法的話在輸入使用者名稱與密碼就會出現如下結果
剛剛輸入的使用者名稱與密碼列印到地址欄中了。這就是比較危險的了。但是如果設定為post請求就不會出現這種結果
因此 post請求就不會將使用者名稱與密碼列印到地址欄中。而是瀏覽器幫你隱藏起來。在網頁源碼中的頭資訊中可以看到下面多了一個Form Data 這就是你提交上去的資訊
Referer:請求來自哪個頁面那麼如果在百度點選連結到這裡,那麼就是Referer://http:www.baidu.com;如果在瀏覽器中直接輸入地址,則沒有這個referer值(用於防盜鏈功能)
狀態代碼
狀態代碼的含義對於瀏覽器說很重要,返回不同的狀態代碼有不同的含義。例如200表示響應成功,302,表示重新導向等等
200:請求成功
3xx:重新導向
4xx:用戶端錯誤(401訪問被拒絕。403禁止訪問。404未找到頁面等)
5xx:服務端錯誤(500內部伺服器錯誤。503服務不可以。504網關逾時等)
OpenStack?HTTP協議