HTTP協議格式及基礎

2022-09-06 04:57:09 字數 3050 閱讀 8818

① 請求方法 uri 協議/版本

② 請求頭(request header)

③     請求正文

http 請求 資料 例子舉例:

請求的第一行是「方法url協議版本」:

以上**中「get」代表請求方法,「/sample.jsp」表示uri,「http/1.1代表協議和協議的版本。

根據http標準,http請求可以使用多種請求方法。例如:http1.1支援7種請求方法:get、post、head、options、 put、delete和tarce。在internet應用中,最常用的方法是get和post。

url完整地指定了要訪問的網路資源,通常只要給出相對於伺服器的根目錄的相對目錄即可,因此總是以「/」開頭,最後,協議版本 宣告了通訊過程中使用http的版本。

請求頭包含許多有關的客戶端環境和請求正文的有用資訊。例如,請求頭可以宣告瀏覽器所用的語言,請求正文的長度等。

accept:image/gif.image/jpeg.*/*

accept-language:zh-cn

connection:keep-alive

host:localhost

user-agent:mozila/4.0(compatible:msie5.01:windows nt5.0)

accept-encoding:gzip,deflate.

請求頭和請求正文之間是乙個空行,這個行非常重要,它表示請求頭已經結束,接下來的是請求正文。請求正文中可以包含客戶提 交的查詢字串資訊:

username=jinqiao&password=1234

get       請求獲取由 request-uri 所標識的資源。

post  在 request-uri 所標識的資源後附加新的資料。

head  請求獲取由 request-uri 所標識的資源的響應訊息報頭。

options  請求查詢伺服器的效能,或查詢與資源相關的選項和需求。

put  請求伺服器儲存乙個資源,並用 request-uri 作為其標識。

delete  請求伺服器刪除由 request-uri 所標識的資源。

trace  請求伺服器回送收到的請求資訊,主要用語測試或診斷。

must-revalidate, no-cache, private。這個值告訴客戶端,服務端不希望客戶端快取資源,在下次請求資源時,必須要從新請求伺服器,不能從快取副本中獲取資源。  

cache-control是響應頭中很重要的資訊,當客戶端請求頭中包含cache-control:max-age=0請求,明確表示不會快取伺服器資源時,cache-control作為作為回應資訊,通常會返回no-cache,意思就是說,「不快取就不快取唄」;當客戶端在請求頭中沒有包含cache-control時,服務端往往會定,不同的資源不同的快取策略,比如說oschina在快取資源的策略就是cache-control:max-age=86400,這個意思是,從當前時間開始,在86400秒的時間內,客戶端可以直接從快取副本中讀取資源,而不需要向伺服器請求。

keep-alive,

這個字段作為回應客戶端的connection:keep-alive,告訴客戶端伺服器的tcp連線也是乙個長連線,客戶端可以繼續使用這個tcp連線傳送http請求。關於長連線的更多知識,後面我再詳細講。

gzip

告訴客戶端,服務端傳送的資源是採用gzip編碼的,客戶端看到這個資訊後,應該採用gzip對資源進行解碼。

text/html;charset=utf-8

告訴客戶端,資源檔案的型別,還有字元編碼,客戶端通過utf-8對資源進行解碼,然後對資源進行html解析。通常我們會看到有些**是亂碼的,往往就是伺服器端沒有返回正確的編碼。

sun, 21 sep 2014 06:18:21 gmt

這個是服務端傳送資源時的伺服器時間,剛開始我不知道gmt是格林尼治所在地的標準時間,以為是伺服器的時間錯了,還去伺服器上檢視過時間。http協議中傳送的時間都是gmt的,這主要是解決在網際網路上,不同時區在相互請求資源的時候,時間混亂問題。

sun, 1 jan 2000 01:00:00 gmt

這個響應頭也是跟快取有關的,告訴客戶端在這個時間前,可以直接訪問快取副本,很顯然這個值會存在問題,因為客戶端和伺服器的時間不一定會都是相同的,如果時間不同就會導致問題。所以這個響應頭是沒有cache-control:max-age=***這個響應頭準確的,因為max-age=date中的date是個相對時間,不僅更好理解,也更準確。

這個含義與cache-control等同。

tengine/1.4.6

這個是伺服器和相對應的版本,只是告訴客戶端伺服器資訊,沒有更多的意思。

chunked

這個響應頭告訴客戶端,伺服器傳送的資源的方式是分塊傳送的。一般分塊傳送的資源都是伺服器動態生成的,在傳送時還不知道傳送資源的大小,所以採用分塊傳送,每一塊都是獨立的,獨立的塊都能標示自己的長度,最後一塊是0長度的,當客戶端讀到這個0長度的塊時,就可以確定資源已經傳輸完了。

accept-encoding

告訴快取伺服器,快取壓縮檔案和非壓縮檔案兩個版本,現在這個字段用處並不大,因為現在的瀏覽器都是支援壓縮的。

Http協議的格式及例項

http協議位於網路五層結構的最上層應用層。它建立在tcp協議之上,是個無狀態的協議,典型的應用是網路瀏覽器以及移動端資料傳輸。本文將介紹http請求的格式,並對請求資料的各部分做乙個詳細介紹。http協議包括多個方法 get,post,put,delete,head,patch,options等。...

Http協議的格式及例項

http協議位於網路五層結構的最上層應用層。它建立在tcp協議之上,是個無狀態的協議,典型的應用是網路瀏覽器以及移動端資料傳輸。本文將介紹http請求的格式,並對請求資料的各部分做乙個詳細介紹。處於不同層次的網路協議 http協議包括多個方法 get,post,put,delete,head,pat...

Http協議格式

一 請求報文 包括請求行 請求頭和請求資料,具體格式如下 請求方法 請求頭 accept 瀏覽器可接受的mime型別。accept charset 瀏覽器可接受的 字符集。accept language 瀏覽器所希望的語言種類,當伺服器能夠提供一種以上的語言版本時要用到。authorization ...