Web開發 Http協議剖析

2022-04-11 15:02:50 字數 3393 閱讀 7168

http,即超文字傳輸協議,是建立在tcp/ip協議的基礎上。在web開發的過程中,http協議是十分重要的,瀏覽器與伺服器之間的互動就是基於http協議的。http協議如果展開全面講解會有很多內容,這裡主要分析http協議的請求與回覆中的內容格式、相應的訊息頭以及幾種狀態碼。

一、http請求

完整的http請求包括:乙個請求行、若干訊息頭、若干請求的實體內容(訊息頭和請求內容之間用一條空行隔開);

1、請求行

用於描述客戶端的請求方式,請求的資源名稱,以及使用的http協議版本號;

如:get /test/hello.html http/1.1;其中的get成為請求方式,請求方式有:post、get、head、options、trace、put常用的有:post、get。其中的http/1.1表示協議版本號,http/1.0是短連線,http/1.1是長連線,其中長度是指連線保留的時間長短。

get與post之間的區別:

(1)get提交,請求的資料會附在url之後(就是把資料放置在http協議頭中),以?分隔url和傳輸的資料,多個引數之間用&連線;post提交,把提交的資料放置在http包的包體中,即get提交的資料會在位址列中顯示出來,而post提交,位址列不會改變。

(2)傳輸資料大小:http協議對傳輸資料大小和url長度沒有進行限制;get提交在一些瀏覽器和伺服器中會對url長度進行限制(如ie對url長度的限制是2083位元組);post提交不通過url傳值,所以理論上對傳輸資料大小沒有限制(建議不要大於64k)。

(3)安全性:post提交的安全性更高。

2、訊息頭

用於描述客戶端請求哪台主機,以及客戶端的一些環境資訊;

注意:並不是每次請求的訊息頭都一樣

下面來看完整的訊息頭:

accept: text/html,image/*  [通知伺服器,客戶端可以接收的內容有:文字、網頁和等]

accept-charset: is0-8859-1  [瀏覽器接收的字元編碼為is0-8859-1]

accept-encoding: gzip,compress  [可以接受gzip,compress壓縮後的資料]

accept-language: en-us,zh-cn  [瀏覽器支援中、英文]

host: www.google.com:80  [要訪問的主機是 www.google.com:80]

if-modified-since: tue , 11 jul 2000 18:23:51 gmt  [通知伺服器客戶端本地的緩衝檔案的時間]

referer:   [告訴伺服器這個請求來之哪個頁面,這個訊息頭常用來防止盜鏈]

user-agent: mozilla/4.0(compatible:msie5.5;windows nt 5.0)  [告訴伺服器客服端瀏覽器的核心]

cookie:    [cookie]

connection: close/keep-alive  [保持連線,發完資料後不立刻斷開連線]

date: tue, 11 jul 2000 18:23:51 gmt  [瀏覽器傳送該http請求的時間]

3、傳送的內容

格式為:內容名=內容體,多個內容使用&隔開

二、http響應

完整的http響應包括:狀態行、多行訊息頭、回覆實體內容(訊息頭和內容之間依然用一條空行隔開)。

1、狀態行:

用於描述伺服器對請求的處理結果;

格式:http版本號 狀態碼 原因敘述

如:http/1.1 200 0k;

其中狀態碼是乙個三位的十進位制數,用於表示伺服器對請求的處理結果,響應狀態碼分為5類:

狀態碼含義

100~199

表示成功接收請求,要求客戶端繼續提交下一次請求才能完成整個處理過程

200~299

表示成功接收請求並已完成整個處理過程,常用200

300~399

為完成請求,客戶需進一步細化請求。例如,請求的資源已經移動到乙個新位址,常用302、307

400~499

客戶端的請求有錯誤,常用404。例如訪問的頁面不存在

500~599

伺服器端出現錯誤,常用500

2、響應訊息頭:

用於描述伺服器的基本資訊,以及資料的描述,伺服器通過這些資料描述資訊,可以通知客戶端如何處理等會兒它回送的資料。

下面來看完整的訊息頭:

location:   [讓瀏覽器定位到該url]

server: apache tomcat  [通知瀏覽器伺服器是tomcat]

content-encoding: gzip  [告訴瀏覽器,服務端使用的是gzip進行壓縮]

content-length: 80  [告訴瀏覽器回送的資料大小為80個位元組]

content-language: zh-cn  [支援中文]

content-type: text/html; charset=utf-8  [回送的內容格式是text/html;編碼採用的是utf-8]

last-modified: tue, 11 jul 2000 18:23:51 gmt  [告訴瀏覽器,該資源最後一次的更新時間]

refresh: 10,url=  [過10秒重新整理跳轉到這個頁面]

transfer-encoding: chunked  [傳輸的編碼]

set-cookie: ss=q0=5lb_nq; path=/search  [cookie資訊]

expires: -1  [告訴瀏覽器快取資料方式,主要針對ie瀏覽器]

cache-control: no-cache  [告訴瀏覽器如何快取資料]

pragma: no-cache  [告訴瀏覽器如何快取資料]

connection: close/keep-alive  [儲存連線還是關閉]

date: tue, 11 jul 2000 18:23:51 gmt  [回送頁面的時間]

3、實體內容

代表伺服器向客戶端回送的資料;

三、重點

一些**對介面實時更新要求很高,這時就要注意乙個細節,如果只是游標定位到位址列,按回車鍵進行重新整理,當重新整理的頁面有快取的時候就不會重新向伺服器傳送http請求,有快取的時候重新整理需點選重新整理按鈕進行重新整理。

對個這個問題服務端怎麼制定讓客戶端瀏覽器不對這些重點頁面進行快取呢?這就涉及到http響應訊息頭中的expires、cache-control和pragma這三個訊息頭了。在制定不快取的時候這三個都得進行指定,才能很好的相容多種瀏覽器。

如:response.setdateheader("expires", -1);表示不快取,這個方法也可以指定快取到什麼時候。

web開發 Http協議基礎

一 http0.9版 http 是基於 tcp ip 協議的應用層協議 它不涉及資料報 packet 傳輸,主要規定了客戶端和伺服器之間的通訊格式,預設使用80埠。最早版本是1991年發布的0.9版。該版本極其簡單,只有乙個命令get。get index.html 上面命令表示,tcp 連線 con...

Web開發之HTTP協議

乙個狀態行 若干訊息頭 以及響應正文,其中的一些訊息頭和正文都是可選的,訊息頭和正文內容之間要用空行隔開。http 1.1 200 ok 狀態行 server microsoft iis 5.0 訊息頭,以下都是 date thu,13 jul 2000 05 46 53 gmt content l...

Web開發之HTTP協議詳解

1.什麼是http?超文字傳輸協議 2.http用來幹什麼?規範了瀏覽器和伺服器之間的資料傳輸格式 利用鍵值對進行資料傳輸 說白了就是一種規範,特別注意如果沒有http協議,瀏覽器和伺服器之間也是可以實現互動的,只是很複雜,那麼為什麼呢?那是因為http不是傳送資料的通道,它只是乙個傳送資料的通道中...