溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

http-協(xié)議分析

發(fā)布時間:2020-05-26 15:55:55 來源:網(wǎng)絡(luò) 閱讀:359 作者:AhangBK 欄目:網(wǎng)絡(luò)管理

http協(xié)議介紹

httpHyper Text Transfer Protocol 超文本傳輸協(xié)議,是互聯(lián)網(wǎng)應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議,主要用于Web服務(wù)。通過計算機處理文本信息,格式為HTMLHyper Text Mark Language)超文本標記語言來實現(xiàn)。

http協(xié)議的版本

http 0.9:僅于用戶傳輸html文檔

http 1.0

1.引入了MIME(Multipurpose Internet Mail Extesions)機制:多用途互聯(lián)網(wǎng)郵件擴展,引入這個技術(shù)之后,http可以發(fā)送多媒體(比如視頻、音頻等)信息。此機制讓http不在單單只支持html格式,還可以支持其他格式來進行發(fā)送了。

2.引入了keep-alive機制,支持持久連接的功能(但這個keep-alive原理是在首部添加了某個字段而形成的,并非原生就支持此功能)

3.引入支持緩存功能

http 1.1
支持更多的請求方法,更加精細的緩存控制,原生直接支持持久連接功能(presistent)。

http 2.0
提供了HTTP語義優(yōu)化的傳輸,spdy : google引入了的一個技術(shù),能夠加速http數(shù)據(jù)交互,尤其是使用ssl 加速機制,但是spdy現(xiàn)在用的還不多。

目前常用的版本就是http 1.0版本和http 1.1版本。

html文本介紹

html文本架構(gòu)

<html>

    <head>

        <title>TITLE</title>

    </head>

    <body>

        <h2>H1</h2>

            <p></p>

    <h3>H2</h3>

        <p><a href="admin.html">ToGoogle</a> </p>

    </body>

</html>

html文檔的生成方式

靜態(tài)
事先就編輯并定義完成的

動態(tài)
通過編譯語言編寫的程序后輸出html格式的結(jié)果
動態(tài)語言有:php,jspasp,.net

備注:這些腳本都必須有相應(yīng)的解釋器,比如說 php需要有php解釋器等等

靜態(tài)和動態(tài)的方式

靜態(tài)

1、Web服務(wù)器向內(nèi)核注冊socket
2、客戶端通過瀏覽器,向Web服務(wù)器發(fā)起request請求
3Web服務(wù)器收到客戶端的request信息
4、如果用戶請求的資源在服務(wù)器本地的話,http服務(wù)會向系統(tǒng)內(nèi)核申請調(diào)用
5、內(nèi)核調(diào)用本地磁盤里的數(shù)據(jù),并將數(shù)據(jù)發(fā)給http服務(wù)
6、http將用戶請求的資源通過response報文,最終響應(yīng)給客戶端

動態(tài)

態(tài)不同的是,如果用戶請求的是動態(tài)內(nèi)容,那么此時http服務(wù)會調(diào)用后端的解析器,由動態(tài)語言去處理用戶的請求,如果需要請求數(shù)據(jù)的時候,會向內(nèi)核申請調(diào)用,從而向磁盤中獲取用戶指定的數(shù)據(jù),通過解釋器運行,運行的結(jié)果通常會生成html格式的文件。然后構(gòu)建成響應(yīng)報文,最終發(fā)回給客戶端。

http協(xié)議

http協(xié)議的報文

HTTP報文中存在著很多行的內(nèi)容,一般是由ASCII碼串組成,各字段長度是不確定的。HTTP的報文可分為兩種:請求報文與響應(yīng)報文

1.request Message(請求報文)
客戶端  - 服務(wù)器端
由客戶端向服務(wù)器端發(fā)出請求,不同的網(wǎng)站用于請求不同的資源(html文檔)

2.response Message(響應(yīng)報文)
服務(wù)器端 -→ 客戶端
是服務(wù)器予以響應(yīng)客戶端的請求

 

請求報文格式介紹

請求行 + 請求首部 + 空白行 + 請求實體 

 

例如:

<method> <request-URL> <version>

<HEADERS>                      
 # 這里一定要是一個空白行
<entity-body>

1.請求行
請求方法字段<method>+請求URL字段<request-URL>+HTTP協(xié)議版本<version>組成,用來標識客戶端請求的資源時使用的請求方法,請求的資源,請求的協(xié)議版本是什么,它們直接使用“空格”進行分隔!

<method> 這次請求的方式是什么,也就是請求方法

<request-URL> 請求的是哪個資源,哪個URL。可以是相對路徑,如/p_w_picpaths/log.jpg,也可以是絕對路徑,如http://www.baidu.com/p_w_picpaths.banner.jpg

<version> 請求的協(xié)議版本是什么,http協(xié)議版本,格式HTTP/<major>.<minor>,例如:HTTP/1.0HTTP/1.1

 

上圖是用wireshark工具抓取http請求報文的顯示結(jié)果。在首部后的“\r\n”表示一個回車和換行,以此將該首部與下一個首部隔開。

或者用curl命令獲取http請求報文

 

2.請求首部
由關(guān)鍵字+關(guān)鍵字的值組成,之間使用“:”進行分隔,格式NameValue,請求首部的作用是通過客戶端將請求的相關(guān)內(nèi)容告知服務(wù)器端,首部可以不止一個。

<HEADERS> 首部,首部可能不止一個。各種所可以使用的首部信息

 

 

3.空白行

請求首部之后會有一個空白行,通過發(fā)送回車字符和換行符,用于通知服務(wù)器端以下的內(nèi)容將不會再出現(xiàn)請求首部的信息。

4.請求實體
你需要請求的內(nèi)容到底是什么

<entity-body> 請求實體,你到底請求的內(nèi)容是什么

 

響應(yīng)報文格式介紹

起始行 + 響應(yīng)首部 + 空白行 +  響應(yīng)實體

 

例如:

<version> <status> <reason-phrase>

<HEADERS>                        
# 這里一定要是一個空白行
<entity-body>

1.起始行
也稱之為狀態(tài)行,用于服務(wù)器端響應(yīng)客戶端請求的狀態(tài)信息,由版本號<version> + 狀態(tài)碼<status> + 原因短語<reason-phrase>組成,例如HTTP/1.1 200 OK

<version> 響應(yīng)時客戶端請求的是什么版本,服務(wù)器端就需要響應(yīng)什么版本

<status> 請求的狀態(tài)碼是什么 202403

<reason-phrase> 響應(yīng)的狀態(tài)碼的信息是什么,原因短語,這個狀態(tài)碼所響應(yīng)的意義,易讀信息

<HEADERS> 一大堆的響應(yīng)首部

<entity-body> 響應(yīng)體

 

2.響應(yīng)首部

<version> 響應(yīng)時客戶端請求的是什么版本,服務(wù)器端就需要響應(yīng)什么版本

<status> 請求的狀態(tài)碼是什么 202403

<reason-phrase> 響應(yīng)的狀態(tài)碼的信息是什么,原因短語,這個狀態(tài)碼所響應(yīng)的意義,易讀信息

<HEADERS> 一大堆的響應(yīng)首部

<entity-body> 響應(yīng)體
類似請求報文,起始行后面一般有若干個頭部字段。每個頭部字段都包含一個名字和一個值,兩者之間用冒號分割。格式NameValue
例如:
Content-Type: test/html; charset=utf-8
Content-Length: 78

 

3.空白行
最后一個響應(yīng)首部信息之后就是一個空行,通過發(fā)送回車符和換行符,通知客戶端空行下無首部信息

4.響應(yīng)實體
響應(yīng)實體中裝載了要返回給客戶端的數(shù)據(jù)。這些數(shù)據(jù)可以是文本,也可以是二進制(例如圖片,視頻)

<version> 響應(yīng)時客戶端請求的是什么版本,服務(wù)器端就需要響應(yīng)什么版本

<status> 請求的狀態(tài)碼是什么 202,403

<reason-phrase> 響應(yīng)的狀態(tài)碼的信息是什么,原因短語,這個狀態(tài)碼所響應(yīng)的意義,易讀信息

<HEADERS> 一大堆的響應(yīng)首部

<entity-body> 響應(yīng)體

 

 

HTTP請求方法

HTTP通信過程中,每個HTTP請求報文中都會包含一個HTTP請求方法,用于告知客戶端向服務(wù)器端請求執(zhí)行某些具體的操作,下面列舉幾項常用的HTTP請求方法。

HTTP請求方法

描述

GET

用于客戶端請求指定資源信息,并返回指定資源實體

HEAD

GET相似,但其不需要服務(wù)器響應(yīng)請求的資源,而返回響應(yīng)首部(只需要響應(yīng)首部即可,就是告訴我有或者沒有,不需要緩存界面給我)

POST

基于HTML表單向服務(wù)器提交數(shù)據(jù),服務(wù)器通常需要存儲此數(shù)據(jù),通常存放在mysql這種關(guān)系型數(shù)據(jù)庫

PUT

GET相反,是向服務(wù)器發(fā)送資源的,服務(wù)器通常需要存儲此資源(存放的位置通常是文件系統(tǒng))

DELETE

請求服務(wù)器端刪除URL指定的資源

MOVE

請求服務(wù)器將指定的頁面移至另一個網(wǎng)絡(luò)地址

OPTIONS

探測服務(wù)器端對請求的URL所支持使用的請求方法

TRACE

跟一次請求中間所經(jīng)歷的代理服務(wù)器、防火墻或網(wǎng)關(guān)等。

常用的HTTP請求方式是GET, POST, HEAD

 

HTTP的狀態(tài)碼

狀態(tài)碼

說明

1XX

信息性狀態(tài)碼,用于指定客戶端相應(yīng)的某些操作

2XX

成功狀態(tài)碼,我請求一個資源,這個資源在,這就表示請求成功了。

3XX

重定向的狀態(tài)碼,有時會返回的是一個新地址,而非結(jié)果

4XX

客戶端類錯誤,你請求的資源不存在,或者你請求的時候,我們這個資源拒絕你訪問,你沒有權(quán)限

5XX

服務(wù)器類的錯誤信息。向服務(wù)器發(fā)起請求,服務(wù)器發(fā)現(xiàn)需要運行一個腳本,從而調(diào)用解析庫。如果在調(diào)用過程中出錯就會出現(xiàn)這種情況?;蛘吣愕哪_本有語法錯誤,也可能會導(dǎo)致這個問題。

常用狀態(tài)碼說明

狀態(tài)碼

說明

200

服務(wù)器成功返回網(wǎng)頁,這是成功的HTTP請求返回的標準狀態(tài)碼

201

CREATED 上傳文件成功后顯示

301

Move Permanently,永久重定向,會返回一個新地址,并告訴我們你所請求的地址將永久挪到那個新地址去了

302

Fonud,臨時重定向,臨時放到某個地方,會在響應(yīng)報文中使用“Location:新位置”;

304

Not Modified,資源沒有做任何修改

403

Forbidden 請求被拒絕

404

Not Found 請求的資源不存在

405

Method Not Allowed 你使用的方法不被允許,不支持

500

Internal Server Error:服務(wù)器內(nèi)部錯誤

502

Bad Gateway,代理服務(wù)器從上游服務(wù)器收到一條偽響應(yīng);上一層服務(wù)器返回了一個無法理解的報文,所以代理服務(wù)器就會表示錯誤。

503

Service Unavailable,服務(wù)暫時不可用

 

HTTP首部介紹

· 通用首部

· 請求首部

· 響應(yīng)首部

· 實體首部:專門用來表示實體中資源內(nèi)部的類型、長度、編碼格式等

· 擴展首部:非標準首部,可有程序員自行創(chuàng)建

通用首部

· Connection:定義C/S之間關(guān)于請求、響應(yīng)的有關(guān)選項
http1.0 的時候,如果他想使用持久連接,那么他所設(shè)置的選項即為

Connection:keep-alive

· Cache-Control:緩存控制,實現(xiàn)更精細的緩存控制方式。在http 1.1上比較常見

請求首部

· Client-IP :客戶端 IP地址

· Host :請求的主機,這在實現(xiàn)基于主機名的虛擬主機時很有用

· Referer :指明了請求當前資源原始資源的URL,使用referer是可以防盜鏈

· User-Agent:用戶代理,一般而言是瀏覽器

· Accept首部:指客戶端可以接受哪些編碼的類型

§ Accept:服務(wù)端能夠發(fā)送的媒體的類型

§ Accetp-Charset:接收的字符集

§ Accept-Encoding:編碼格式

§ Accept-Lanage:所能接受的語言編碼格式

· 條件式請求首部:(在http1.1中才會用到)
當發(fā)送請求時,先問問對方是否滿足條件,如果滿足條件就請求,不滿足就不請求

· 跟安全相關(guān)的請求:

§ Authorization

§ Cookie

響應(yīng)首部

· Age:資源響應(yīng)給你之后可以使用的時長

· Server:向客戶端說明自己用到的程序名稱和版本

· 協(xié)商類的首部:

§ Vary:首部列表,服務(wù)器會根據(jù)此列表挑選最適合的版本發(fā)給客戶端

· 跟安全相關(guān):

§ WWW-Authentication

§ Set-Cookie

實體首部

· Location:指明資源的新位置,實現(xiàn)302響應(yīng)碼時通常會用到

· Allow:允許對此資源使用的請求方法

· 內(nèi)容相關(guān)的首部

§ Content-Encoding

§ Content-Language

§ Content-Length

§ Content-Location:內(nèi)容所在的位置

§ Content-Type

· 緩存相關(guān):

§ ETag:擴展標簽/標記

§ Expires:過期時間

§ Last-Modified:最后修改時間

ETag解釋:

在網(wǎng)絡(luò)上,有一些緩存服務(wù)器,另外,瀏覽器自身也有緩存功能
基于一個前提:圖片不會經(jīng)常改動,服務(wù)器在返回狀態(tài)碼200的同時,還會返回該圖片的簽名Etag,(可以理解為圖片的指紋)當瀏覽器再次訪問該圖片時,就會去服務(wù)器校驗指紋信息,如果圖片沒有變化,直接使用緩存里的圖片,這樣減輕了服務(wù)器的負擔一看到304,瀏覽器就知道了,要從本地緩存里面取圖片,節(jié)省了圖片在網(wǎng)絡(luò)上傳輸?shù)臅r間

附:

HTTP最常見的請求頭如下:

Accept:瀏覽器可接受的MIME類型;

Accept-Charset:瀏覽器可接受的字符集;

Accept-Encoding:瀏覽器能夠進行解碼的數(shù)據(jù)編碼方式,比如gzip。

Accept-Language:瀏覽器所希望的語言種類

Authorization:授權(quán)信息,通常出現(xiàn)在對服務(wù)器發(fā)送的WWW-Authenticate頭的應(yīng)答中;

Connection:表示 是否需要持久連接。值為“Keep-Alive”,或者看到請求使用的是HTTP 1.1HTTP 1.1默認進行持久連接),它就可以利用持久連接的優(yōu)點,當頁面包含多個元素時(例如Applet,圖片),顯著地減少下載所需要的時間。

Content-Length:表示請求消息正文的長度;

Cookie:這是最重要的請求頭信息之一;

Cookie相關(guān)的HTTP擴展頭

1Cookie:客戶端將服務(wù)器設(shè)置的Cookie返回到服務(wù)器;

2Set-Cookie:服務(wù)器向客戶端設(shè)置Cookie

3Cookie2 (RFC2965)):客戶端指示服務(wù)器支持Cookie的版本;

4Set-Cookie2 (RFC2965):服務(wù)器向客戶端設(shè)置Cookie

Cookie的流程

服務(wù)器在響應(yīng)消息中用Set-Cookie頭將Cookie的內(nèi)容回送給客戶端,客戶端在新的請求中將相同的內(nèi)容攜帶在Cookie頭中

Host:初始URL中的主機和端口;

If-Modified-Since:只有當所請求的內(nèi)容在指定的日期之后又經(jīng)過修改才返回它,否則返回304“Not Modified”應(yīng)答;

Referer:包含一個URL,用戶從該URL代表的頁面出發(fā)訪問當前請求的頁面。

User-Agent:瀏覽器類型

HTTP最常見的響應(yīng)頭

HTTP最常見的響應(yīng)頭如下所示:

Allow:服務(wù)器支持哪些請求方法(如GET、POST等);

Content-Encoding 文檔的編碼(Encode)方法。

Content-Length 表示內(nèi)容長度。只有當瀏覽器使用持久HTTP連接時才需要這個數(shù)據(jù)。

Content-Type 表 示后面的文檔屬于什么MIME類型。

Accept-Ranges: bytes  響應(yīng)頭表明服務(wù)器支持Range請求,以及服務(wù)器所支持的單位是字節(jié)(這也是唯一可用的單位).我們還能知道:服務(wù)器支持斷點續(xù)傳,以及支持同時下載文件的多個部分,也就是說下載工具可以利用范圍請求加速下載該文件.Accept-Ranges: none 響應(yīng)頭表示服務(wù)器不支持范圍請求.

Date:當前的GMT時間。

Expires:指明應(yīng)該在什么時候認為文檔已經(jīng)過期,從而不再緩存它。

Last-Modified 文檔的最后改動時間。

Location:表示客戶應(yīng)當?shù)侥睦锶ヌ崛∥臋n。

 Refresh:表示瀏覽器應(yīng)該在多少時間之后刷新文檔,以秒計。

HTTP最常見的實體頭

實體頭用實體內(nèi)容的元信息,描述了實體內(nèi)容的屬性,包括實體信息類型,長度,壓縮方法,最后一次修改時間,數(shù)據(jù)有效性等。

AllowGET,POST

Content-Encoding:文檔的編碼(Encode)方法,例如:gzip

Content-Language:內(nèi)容的語言類型,例如:zh-cn;

Content-Length:表示內(nèi)容長度,eg80,可參考“2.5響應(yīng)頭

Content-Location:表示客戶應(yīng)當?shù)侥睦锶ヌ崛∥臋n,例如:http://www.dfdf.org/dfdf.html, 

Content-MD5MD5 實體的一種MD5摘要,用作校驗和。發(fā)送方和接受方都計算MD5摘要,接受方將其計算的值與此頭標中傳遞的值進行比較。

Content-Type:標明發(fā)送或者接收的實體的MIME類型。Egtext/html; charset=GB2312       主類型/子類型;

 

HTTP的事務(wù)

包含了一個HTTP請求,和對應(yīng)請求的響應(yīng)就叫做一個http事務(wù),也可以理解http事務(wù)就是一個完整的HTTP請求和HTTP響應(yīng)的過程。
http協(xié)議默認情況下每個事務(wù)都會打開和關(guān)閉一個新的連接,所以會相當耗費時間和帶寬,由于TCP慢啟動特性,所以每條新的連接的性能本身就會有所降低,所以可打開的并行連接的數(shù)量上限是有限的。所以使用持久連接這種模式比默認情況下不使用持久連接的方式會好一點,他的好處表現(xiàn)在其請求和tcp斷開的過程所消耗的時間會被減少。

HTTP資源

資源就是通過HTTP協(xié)議可以讓用戶通過瀏覽器或用戶代理能夠通過基于http協(xié)議向服務(wù)器端請求并獲取的內(nèi)容,像html文檔,一張圖片等等。

資源類型:是通過MIME進行標記

格式:major/minor 主標記和次標記

常用的MIME類型

MIME類型

文件類型

test/html

html、htm文本類型

text/plain

text文本類型

p_w_picpath/jpeg

jpeg圖像類型

p_w_picpath/gif

gif圖像類型

vedio/mpeg4

音頻標記類型

application/vnd.ms-powerpoint

動態(tài)資源的標記方式

 

URIURL

· URI(Uniform Resource Identifier) 同一資源標示符
用于標識某一互聯(lián)網(wǎng)資源名稱的字符串,通過這種標識來允許你用戶對資源可通過特定的協(xié)議進行交互操作。在Web上可用的每種資源,包括HTML文檔、圖像、視頻片段、程序等, 由一個通用資源標識符進行定位。所以我們可以使用URI來標識每個資源的名稱

· URL(Uniform Resource Locator)(統(tǒng)一資源定位符)
用于描述一個特定服務(wù)器上某資源的特定位置。
例如:http://www.baidu.com:80/download/bash-4.3.1-1.rpm
URL的格式分為三個部分

i. scheme(方案)(也叫協(xié)議):http://

ii. Internet地址:一般這個地址指的是服務(wù)器:www.baidu.com:8080

iii. 特定服務(wù)器上的資源:download/bash-4.3.1-1.rpm

CGI

Common Gateway Interface 通用網(wǎng)關(guān)接口web服務(wù)器發(fā)現(xiàn)需要執(zhí)行腳本了,就通過CGI協(xié)議跟后端的應(yīng)用程序打交道,把用戶的請求動態(tài)交給服務(wù)器,這個服務(wù)器的結(jié)果通過CGI協(xié)議返回給http服務(wù)器。

其他需要了解的知識

一次Web資源請求的具體過程

1. 客戶端在Web瀏覽器輸入需要訪問的地址

2. Web瀏覽器會請求DNS服務(wù)器,查詢解析到指定域名和Web服務(wù)器的地址

3. 客戶端與請求的Web服務(wù)器端建立連接(TCP三次握手)

4. TCP建立成功之后,發(fā)起HTTP請求

5. 服務(wù)器端收到客戶端HTTP請求之后,會處理該請求

6. 處理客戶端指定請求的資源

7. 服務(wù)器構(gòu)建響應(yīng)報文,響應(yīng)給客戶端

8. 服務(wù)器端將此信息記錄到日志中

 

http如何并發(fā)的接收多個用戶請求

因為http默認是工作在阻塞模型下的,默認一次只接收一個請求,處理完請求后再去接收下一個請求,所以只能一個一個來。
所以我們希望并發(fā)響應(yīng)用戶請求,需要多進程模型。web服務(wù)器自己會生成多個子進程響應(yīng)用戶請求,也就是說,當一個用戶請求發(fā)到Web服務(wù)器,Web主進程不會直接響應(yīng)用戶請求,而是生成一個子進程響應(yīng)這個用戶請求,這樣當子進程和此用戶建立連接之后。Web的主進程就會再等待另一個用戶的請求,當?shù)诙€用戶請求過來之后,再生成一個子進程響應(yīng)第二個用戶請求。以此類推。所以每一個用戶請求都由一個子進程來處理。

擴展知識點1:利用wireshark分析HTTP協(xié)議

實驗步驟

清空緩存 

在進行跟蹤之前,我們首先清空Web 瀏覽器的高速緩存來確保Web網(wǎng)頁是從網(wǎng)絡(luò)中獲取的,而不是從高速緩沖中取得的。之后,還要在客戶端清空DNS高速緩存,來確保Web服務(wù)器域名到IP地址的映射是從網(wǎng)絡(luò)中請求。

啟動wireshare

 

開始俘獲 

1) 在菜單中選擇capture-options,選擇網(wǎng)絡(luò),打開start。如下圖:

 

2) 在瀏覽器地址欄中輸入www.baidu.com,然后結(jié)束俘獲,得到如下結(jié)果:

 

3) 在過濾器中選擇HTTP,點擊apply,得到如下結(jié)果:

 

四、 分析數(shù)據(jù) 

在協(xié)議框中選擇GET/HTTP/1.1”所在的分組會看到這個基本請求行后跟隨著一系列額外的請求首部。在首部后的“\r\n”表示一個回車和換行,以此將該首部與下一個首部隔開。

Host”首部在HTTP1.1版本中是必須的,它描述了URL中機器的域名,本測試中是www.baidu.com。這就允許了一個Web服務(wù)器在同一時間支持許多不同的域名。有了這個首部,Web服務(wù)器就可以區(qū)別客戶試圖連接哪一個Web服務(wù)器,并對每個客戶響應(yīng)不同的內(nèi)容。

User-Agent首部描述了提出請求的Web瀏覽器及客戶機器。

接下來是一系列的Accpet首部,包括Accept(接受)、Accept-Language(接受語言)、Accept-Encoding(接受編碼)、Accept-Charset(接受字符集)。它們告訴Web服務(wù)器客戶Web瀏覽器準備處理的數(shù)據(jù)類型。Web服務(wù)器可以將數(shù)據(jù)轉(zhuǎn)變?yōu)椴煌恼Z言和格式。這些首部表明了客戶的能力和偏好。

Keep-AliveConnection首部描述了有關(guān)TCP連接的信息,通過此連接發(fā)送HTTP請求和響應(yīng)。它表明在發(fā)送請求之后連接是否保持活動狀態(tài)及保持多久。大多數(shù)HTTP1.1連接是持久的(persistent,意思是在每次請求后不關(guān)閉TCP連接,而是保持該連接以接受從同一臺服務(wù)器發(fā)來的多個請求。 

我們已經(jīng)察看了由Web瀏覽器發(fā)送的請求,現(xiàn)在我們來觀察Web服務(wù)器的應(yīng)答。響應(yīng)首先發(fā)送“HTTP/1.1 200 ok”,指明它開始使用HTTP1.1版本來發(fā)送網(wǎng)頁。同樣,在響應(yīng)分組中,它后面也跟隨著一些首部。最后,被請求的實際數(shù)據(jù)被發(fā)送。第一個Cache-control首部,用于描述是否將數(shù)據(jù)的副本存儲或高速緩存起來,以便將來引用。一般個人的Web瀏覽器會高速緩存一些本機最近訪問過的網(wǎng)頁,隨后對同一頁面再次進行訪問時,如果該網(wǎng)頁仍存儲于高速緩存中,則不再向服務(wù)器請求數(shù)據(jù)。在HTTP請求中,Web服務(wù)器列出內(nèi)容類型及可接受的內(nèi)容編碼。此例中Web服務(wù)器選擇發(fā)送內(nèi)容的類型是text/html

 

 

擴展知識點2curl查看HTTP 響應(yīng)頭信息

先看看客戶端(瀏覽器)從服務(wù)器請求數(shù)據(jù)經(jīng)歷如下基本步驟

1.用戶發(fā)起一個http請求,緩存獲取到URL,根據(jù)URL查找是否有匹配的副本,這個副本可能在內(nèi)存中,也可能在本地磁盤。  

 2、如果請求命中本地緩存則從本地緩存中獲取一個對應(yīng)資源的"copy"; 

 3、檢查這個"copy"是否過期,否則直接返回,是則繼續(xù)向服務(wù)器轉(zhuǎn)發(fā)請求。 HTTP中,通過Cache-Control首部和Expires首部為文檔指定了過期時間,通過對過期時間的判斷,緩存就可以知道文檔是不是在保質(zhì)期內(nèi)。Expires首部和Cache-Control:max-age首部都是來告訴緩存文檔有沒有過期,為什么需要兩個響應(yīng)首部來做這件簡單的事情了?其實這一切都是歷史原因,Expires首部是HTTP 1.0中提出來的,因為他使用的是絕對日期,如果服務(wù)端和客戶端時鐘不同步的話(實際上這種情況非常常見),緩存可能就會認為文檔已經(jīng)過了保質(zhì)期。
 4、服務(wù)器接收到請求,然后判斷資源是否變更,是則返回新內(nèi)容,否則返回304,未變更,更新過期時間。 

 

 

HTTP 響應(yīng)頭的信息

(1).  HTTP 返回碼:

1xxclient的請求server已經(jīng)接收,正在處理

2xx:成功  表示 client請求,server端已經(jīng)接收、理解并處理

3xxclient 請求被重定向其他的server【其他的URL

4xx:表示client請求不正確,server不能識別

5xxserver端服務(wù)不正常

(2). Cache-Control:

web 站點對緩存的設(shè)置 Cache-Control指定請求和響應(yīng)遵循的緩存機制

緩存分類

1)私有緩存常見就是我們的瀏覽器里內(nèi)置的緩存。

2)公有緩存常見的就是代理緩存

先看Cache-Control可選的參數(shù):privatepublic 、no-cachemax-age、must-revalidate

no-cache 響應(yīng)不會被緩存,而是實時向服務(wù)器端請求資源

no-store 在任何條件下,響應(yīng)都不會被緩存,并且不會被寫入到客戶端的磁盤里,這也是基于安全考慮的某些敏感的響應(yīng)才會使用這個。

Private指示對于單個用戶的整個或部分響應(yīng)消息,不能被共享緩存處理。這允許服務(wù)器僅僅描述當前用戶的部分響應(yīng)消息,此響應(yīng)消息對于其他用戶的請求無效。不能再用戶間共享。

Public響應(yīng)會被緩存,并且在多用戶間共享。正常情況, 如果要求 HTTP 認證,響應(yīng)會自動設(shè)置為 private。

max-age指示客戶機可以接收生存期不大于指定時間(以秒為單位)的響應(yīng)例如: Cache-control: max-age=5 表示當訪問此網(wǎng)頁后的5秒內(nèi)再次訪問不會去服務(wù)器。

must-revalidate 響應(yīng)在特定條件下會被重用,以滿足接下來的請求,但是它必須到服務(wù)器端去驗證它是不是仍然是最新的強制所有緩存都驗證響應(yīng)。

proxy-revalidate  類似于 must-revalidate, 它要求對公共緩存進行驗證

 

 (3). Connection:

server 是否支持長連接;如果keep-alive 說明webserver 支持長連接。

但是TCP 的長連接是雙向的;必須是clientserver 都支持長連接;才可以建立長連接。

一般client 【瀏覽器】都是默認支持長連接;所以只要sever端支持長連接;就可以建立長連接。

 

通過curl-w參數(shù)我們可以自定義curl的輸出,%{http_code}代表http狀態(tài)碼


向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI