應用層的HTTP協議

2021-07-11 16:37:23 字數 2448 閱讀 7747

應用層協議定義了執行在不同端系統上的應用程式程序如何相互傳遞報文,特別是:

(1)交換的報文型別,例如請求報文和響應報文;

(2)各種報文型別的語法,例如報文中的各個欄位及這些欄位是如何描述的

(3)欄位的語義,即這些欄位中包含的資訊的含義

(4)乙個程序何時以及如何傳送報文,對報文進行響應的規則

web的應用層協議是超文字傳輸協議(hypertext transfer protocol,http),它是web的核心。http由兩個程式實現:乙個客戶程式和乙個伺服器程式。客戶程式和伺服器程式執行在不同的端系統中,通過交換http報文進行會話。http定義了這些報文的結構以及客戶和伺服器進行報文交換的方式。

基本思想就是:當使用者請求乙個web頁面時,瀏覽器向伺服器發出對該頁面中所包含物件的http請求報文,伺服器接收到請求並用包含這些物件的http請求報文進行響應。

重要的是:伺服器向客戶傳送被請求的檔案,而不儲存任何關於該客戶的狀態資訊。假如某個特定的客戶在短短幾秒鐘內兩次請求同乙個物件,伺服器並不會因為剛剛為該客戶提供了該物件就不再做出反應,而是重新傳送該物件,就像伺服器已經完全忘記不久之前所做過的事一樣。因為http伺服器並不儲存關於客戶的任何資訊,所以我們說http是乙個無狀態協議。

http規範包含了對http報文格式的定義。http報文有兩種:請求報文和響應報文。

1、http請求報文

下面提供乙個典型的http請求報文,這是通過wireshark抓包,跟蹤tcp流檢視到的請求報文:

http請求報文的第一行叫做請求行,請求行有三個地段:方法字段、url欄位和http版本字段。方法字段可以取:get、post、head、put和delete,絕大部分的http請求報文使用get方法。

後繼的行叫做首部行,其中:

host指明物件所在的主機;

accept-encoding指明檔案的編碼,採用gzip壓縮;

有的請求報文中包含cookie,之後後續會總結一篇關於cookie的文章;

connection:keep-alive或者close,close指的是該瀏覽器告訴伺服器不希望麻煩的使用持續連線,它要求伺服器在傳送完被請求的物件後就關閉這條連線;

user-agent用來指明使用者**,即向伺服器傳送請求的瀏覽器的型別,這對首部行是有用的,因為伺服器可以有效地為不同型別的使用者**實際傳送相同物件的不同版本,accept-language表示使用者想得到該物件的語法版本,如果伺服器存在的話,否則採用預設版本。

之後還會有實體行,即空行+實體,使用get方法時實體行為空,使用post方法時實體則一般為使用者在表單字段中的輸入值,但空行時一定要有的。

http是經常採用get方法的,並在url中就會包含輸入的資料,如上圖,這種擴充套件的url成為head方法,當伺服器接收到使用head方法的請求時,將會用乙個http報文進行響應,但是並不返回請求物件。

post請求:

2、http響應報文

上圖的藍色欄位即為響應報文。

它分為三個部分:乙個是初始狀態行,乙個是首部行,然後是實體體。

狀態行有3個字段:協議版本字段、狀態碼和響應狀態資訊。

首部行,有的connection:close首部行是告訴客戶,傳送完報文後將關閉該tcp連線;

date指示伺服器產生並傳送該響應報文的時間和日期,這個時間不是指物件建立或者最後修改的時間,而是伺服器從它的檔案系統中檢索到該物件,插入到響應報文中,並傳送響應報文的時間;

server指示該報文是由什麼伺服器產生的。last-modified首部行指示了物件建立或者最後修改的日期和時間,它對既可能在本地客戶也可能在網路快取伺服器上的物件快取來說非常重要;

content-length首部行指示了被傳送物件中的位元組數;

content-type指示了實體體中的物件是html文字。

另外補充一些常見的狀態碼:

100-199:用於指定客戶端相應的某些動作;

200-299:用於表示請求成功;

400-499:用於指出客戶端的錯誤;

500-599:用於支援伺服器錯誤。

100 continue:客戶端詢問是否可以在後續的請求中傳送附件

200 ok:請求成功,資訊在返回的響應報文中。

301 moved permanently:請求的物件已經被永久轉移了,新的url定義在響應報文的location:首部行中。客戶軟體將自動獲取新的url。

400 bad request:乙個通用差錯**,指示該請求不能被伺服器理解。

404 not found:很常見的,被請求的文件不在伺服器上

505 http version not supported:伺服器不支援請求報文使用的http協議版本。

分享乙個http status檢測器:

應用層(HTTP協議)

應用層 負責應用程式之間的溝通 結構化傳輸協議 方便資料式的組織與解析 1.作用 傳輸檔案,網頁 採用tcp協議 tcp協議詳解 2.url 統一資源定位符 相對路徑是根目錄下的相對路徑 3.urlencode 編碼 和urldecode 解碼 乙個字元8位,前4位 編成1位,後4位 編成1位,再加...

應用層 HTTP協議

應用層 應用層和應用程式直接相關,這是和程式設計師打交道最多的地方。自定製協議 不重要 1 約定好客戶端請求 request 包含什麼資訊,伺服器響應 response 包含什麼資訊 2 約定好資料按照什麼格式來組織,本質上網際網路傳輸的都是 二進位制 字串 序列化 反序列化 已有協議 重要 htt...

應用層協議 HTTP

http通常用於瀏覽器請求web 詳細參見 http 1.1協議中共定義了八種方法 也叫 動作 來以不同方式操作指定的資源 gethead 與get方法一樣,都是向伺服器發出指定資源的請求。只不過伺服器將不傳回資源的本文部分。它的好處在於,使用這個方法可以在不必傳輸全部內容的情況下,就可以獲取其中 ...