通訊之HTTP協議

2021-09-19 11:35:56 字數 2682 閱讀 1194

http協議是網際網路常用的通訊協議,在osi標準中劃分中屬於應用層協議。而通常所說的tcp/udp通訊協議是傳輸層協議。http是對tcp通訊的封裝。http協議分為請求報文格式定義和響應報文格式定義。請求報文中應包含請求頭和內容,響應報文中包含狀態頭和內容。參考(

請求報文內容

詳細說明

舉例請求行

請求行由方法字段、url 字段 和http 協議版本字段 3 個部分組成,他們之間使用空格隔開。常用的 http 請求方法有 get、post、head、put、delete、options、trace、connect;

具體的url需要到dns進行解析,下層需要經過tcp的套接字傳輸,網路層的定址,鏈路層的鏈結,物理層的傳輸校驗等等一系列操作。

請求頭請求頭部由關鍵字/值對組成,每行一對,關鍵字和值用英文冒號「:」分隔。請求頭部通知伺服器有關於客戶端請求的資訊

user-agent:產生請求的瀏覽器型別。

這在爬蟲經常使用,通過使用**用於訪問有反爬功能伺服器的**。

cookie資訊也是放在這裡的。

accept:客戶端可識別的內容型別列表。

空行最後乙個請求頭之後是乙個空行,傳送回車符和換行符,通知伺服器以下不再有請求頭

請求資料

請求資料不在get方法中使用,而是在post方法中使用。post方法適用於需要客戶填寫表單的場合。與請求資料相關的最常使用的請求頭是content-type和content-length

此部分可以省略不包含

響應報文格式如下:

響應報文內容

詳細說明

舉例狀態行

其中,http-version表示伺服器http協議的版本;status-code表示伺服器發回的響應狀態**;reason-phrase表示狀態**的文字描述。狀態**由三位數字組成,第乙個數字定義了響應的類別,且有五種可能取值。

訊息報頭

訊息報頭由關鍵字/值對組成,每行一對,關鍵字和值用英文冒號「:」分隔。訊息報頭用於表示伺服器端狀態資訊

例子date: sat, 31 dec 2005 23:59:59 gmt

content-type: text/html;charset=iso-8859-1

content-length: 122

響應頭可能包括location:location響應報頭域用於重定向接受者到乙個新的位置。例如:客戶端所請求的頁面已不存在原先的位置,為了讓客戶端重定向到這個頁面新的位置,伺服器端可以發回location響應報頭後使用重定向語句,讓客戶端去訪問新的網域名稱所對應的伺服器上的資源;

server:server 響應報頭域包含了伺服器用來處理請求的軟體資訊及其版本。它和 user-agent 請求報頭域是相對應的,前者傳送伺服器端軟體的資訊,後者傳送客戶端軟體(瀏覽器)和作業系統的資訊。

vary:指示不可快取的請求頭列表;

connection:連線方式;

對於請求來說:close(告訴web 伺服器或者**伺服器,在完成本次請求的響應後,斷開連線,不等待本次連線的後續請求了)。keepalive(告訴web伺服器或者**伺服器,在完成本次請求的響應後,保持連線,等待本次連線的後續請求);

對於響應來說:close(連線已經關閉); keepalive(連線保持著,在等待本次連線的後續請求); keep-alive:如果瀏覽器請求保持連線,則該頭部表明希望web 伺服器保持連線多長時間(秒);例如:keep-alive:300;

www-authenticate:www-authenticate響應報頭域必須被包含在401 (未授權的)響應訊息中,這個報頭域和前面講到的authorization 請求報頭域是相關的,當客戶端收到 401 響應訊息,就要決定是否請求伺服器對其進行驗證。如果要求伺服器對其進行驗證,就可以傳送乙個包含了authorization 報頭域的請求;

cookie的資訊也是放在這裡的。

空行用以分割訊息報頭和響應包體

響應包體

該部分是伺服器響應內容

需要進行解析處理的部分,在python中可以將其轉換為xml格式。

http協議目前有0.9版本,1.0版本,1.1版本和2.0版本,這幾個版本的區別是長連線的問題具體可參考

http協議本質還是tcp協議,需要建立連線。但是建立連線之後,什麼時候結束就是乙個問題了。

在tcp協議中,如果客戶端(瀏覽器)沒有資料請求之後,就向伺服器傳送斷開連線請求,而伺服器也沒有資料通訊,伺服器向客戶端(瀏覽器)傳送通訊斷開請求,客戶端確認之後這個通訊就斷開了。

短連線就是通訊任務完成一次就中斷,長連線就是一定時間內維持連線。詳細了解請參考在通訊連線期間,如果採用短連線,便於管理,但頻繁的連線請求或中斷會導致,再次連線資料將不會產生記憶功能。最典型的就是遊客登入介面選擇物品加入購物車的過程,短連線加上http的無狀態性會導致每次選取的物品放入了不同的購物車。而如果採用長連線,就可以解決上述問題,通過設定http協議頭connection:keep-alive.但是長連線會導致伺服器端的資源一直被占用,進而增加伺服器端的負擔。為了解決這個問題,伺服器端將資料狀態存入cookie來記錄客戶端,同時將這些資料放入客戶端。當該客戶端再次訪問伺服器時就將該cookie資訊加入到請求頭中,這樣就實現了http訪問的有記憶性,實現完整的會話。session機制也是為了完成使用者跟蹤 一種方式,只不過記載資訊放在了伺服器端。兩種機制可參考

HTTP協議通訊過程

http協議通訊過程 當我們在瀏覽器的位址列輸入 www.baidu.com 然後按回車,這之後發生了什麼事,我們直接看到的是開啟了對應的網頁,那麼內部客戶端和服務端是如何通訊的呢?1 1 url自動解析 http url包含了用於查詢某個資源的足夠資訊,基本格式如下 http host port ...

HTTP協議通訊過程

當我們在瀏覽器的位址列輸入 www.baidu.com 然後按回車,這之後發生了什麼事,我們直接看到的是開啟了對應的網頁,那麼內部客戶端和服務端是如何通訊的呢?1 1 url自動解析 http url包含了用於查詢某個資源的足夠資訊,基本格式如下 http host port abs path 其中...

http通訊協議

格式 http host port abs path 其中http表示要通過http協議來定位網路資源。host表示合法的internet主機網域名稱或ip位址 以點分十進位制格式表示 port用於指定乙個埠號,擁有被請求資源的伺服器主機監聽該埠的tcp連線。如果port是空,則使用預設的埠80。當...