一、構成HTTP請求的簡單流程圖(圖摘錄的),如下:
Web Client可以是瀏覽器、搜索引擎、機器人等等一切基於HTTP協議發起http請求的工具。Web Server可以是任何的能解析HTTP請求,並返回給Web Client可識別的響應的服務,常見的有apache、nginx、IIS等等web服務器
二、客戶端跟服務的交互
要看圖還不明白中過程的話,那就更通俗的理解為:
- 在瀏覽器中輸入
URL
,並按下回車鍵 - 瀏覽器向
DNS
服務器請求解析該URL
中的域名對應的IP
地址(如果是IP
請求,則不需要該步驟) - 解析出
IP
后,根據IP
和端口號,和服務器建立TCP連接 - 瀏覽器向服務器發送請求,該請求報文作為
TCP
三次握手的第三個報文發送給服務器 - 服務器做出響應,把數據發送給瀏覽器
- 通信完成,斷開
TCP
連接 - 瀏覽器解析收到的數據並顯示
從中就可以延伸出以下要說的內容了。也就是交互直接的報文,這里就簡單說說其中請求報文跟響應報文,主要也是方便新手簡單了解下,具體的底層還是得自己去查閱資料
response headers響應報文
當收到get或post等方法發來的請求后,服務器就要對報文進行響應。
用於在http請求中服務器向瀏覽器傳遞附加信息,主要包括服務器傳遞的數據類型,使用的壓縮方法,語言,以及服務器的信息和響應該請求的時間等.
以下為response 屬性
屬性名稱 |
意義 |
示例 |
Accept-Ranges |
Web服務器表示自己是否接受獲取某個實體的一部分(比如文件的一部分)的請求 bytes:接受 none:不接受 |
Accept-Ranges:bytes |
Access-Control-Allow-Origin |
指定哪些網站可以跨域源資源共享 |
Access-Control-Allow-Origin:* |
age |
響應對象在代理緩存中存在的時間,以秒為單位 |
Age:234585576 |
Access-Control-Allow-Methods |
允許的http請求方法 |
Access-Control-Allow-Methods: POST, GET, OPTIONS |
Allow |
Allow支持標題列出資源集合的方法。
|
Allow: GET, POST, HEAD |
Connection |
告訴WEB服務器或者代理服務器,在完成本次請求的響應 后,該做什么 close:斷開連接,不要等待本次連接的后續請求了 keep-alive:保持連接,等待本次連接的后續請求 |
Connection: keep-alive
|
Cache-Control |
通知從服務器到客戶端內的所有緩存機制,表示它們是否可以緩存這個對象及緩存有效時間。其單位為秒 no-cache:可以在本地進行緩存,但是每次發起請求都需要到服務器去驗證一下,如果服務器返回告訴你可以使用本地緩存,你才可以去使用本地的緩存 no-store:本地不可進行緩存的,每次發起請求,都需要去服務端去拿去數ju public:在HTTP請求返回的內容經過的所有路徑中,都可以對返回內容進行一個緩存的操作。 private:只有發起請求的瀏覽器才可以進行緩存 max-age=<seconds>:緩存多少秒之后才會過期。 s-maxage=<seconds>:它會替代max-age,但是只有在 代理服務器中才會起作用。 max-stale=<seonds>:當我們緩存過期以后,如果有max-stale,只要在max-stale這個時間之內,還會使用過期的緩存。只有在發起端設置才有用,在服務端設置沒有用。 must-revalidate:如果我們的和緩存過期了,我們必須重新發送到源服務端,重新獲取這部分數據,來驗證這部分數據是否真的過期了 proxy-revalidate:用在緩存服務器中,緩存過期后,必須要去源服務器上重新請求一次,而不能使用本地的緩存 |
Cache-Control:no-cache |
Content-Type |
服務器告訴瀏覽器它發送的數據屬於什么文件類型,也就是響應數據的MIME類型 type:主類型,任意的字符串,如text,如果是*號代表所有; subtype:子類型,任意的字符串,如html,如果是*號代表所有,用“/”與主類型隔開; parameter:可選參數,如charset,boundary等。
|
Content-Type: application/json;charset=utf-8
|
content-length |
響應數據的數據長度,單位是byte |
content-length: 0 |
Content-Encoding |
服務器采用哪種編碼格式傳輸正文 其值有:gzip;x-gzip;compress等 |
Content-Encoding:gzip |
Date |
響應消息發送的GMT格式日期 |
date: Mon, 06 May 2019 22:48:29 GMT
|
ETag |
就是一個對象(比如URL)的標志值 主要供 WEB 服務器 判斷一個對象是否改變了 |
|
Expired |
告訴客戶端該響應數據會在指定的時間過期,通常用於給客戶端緩存作為參考。 |
expires: Thu, 28 Jun 2018 11:27:53 GMT
|
via |
告訴客戶端,該回應經歷了那些代理。 |
Via: 1.0 example1.com, 1.1 example2.com (Apache/1.1) |
status |
返回的狀態碼 |
Status:200 |
Server |
服務器名稱(服務器通過這個頭告訴瀏覽器服務器的類型) |
request headers請求報文
對於request headers可以理解為用於在請求消息中向服務器傳遞附加信息,主要包括客戶機可以接受的數據類型,壓縮方法,語言,以及客戶計算機上保留的信息和發出該請求的超鏈接源地址等
請求頭由key/value對組成,每行為一對,key和value之間通過冒號(:)分割。請求頭的作用主要用於通知服務端有關於客戶端的請求信息
request headers屬性
Accept |
指定客戶端能夠接收(支持)的數據類型 |
Accept: */* |
Accept-Encoding |
指定瀏覽器可以支持的web服務器返回內容壓縮編碼類型 |
Accept-Encoding: gzip, deflate, br
|
Accept-Language |
瀏覽器所希望的語言種類 |
|
Cache-Control |
緩存機制,服務器通過控制瀏覽器要不要緩存數據 |
Cache-Control: max-age=0
|
Connection |
表示是否需要持久連接。(HTTP 1.1默認進行持久連接) |
Connection: keep-alive
|
Cookie |
HTTP請求發送時,會把保存在該請求域名下的所有cookie值一起發送給web服務器。 |
|
Host |
指定請求的服務器的域名和端口號 |
Host: www.baidu.com
|
Referer |
包含一個URL,用戶從該URL代表的頁面出發訪問當前請求的頁面。 |
|
From |
請求發送者的email地址,由一些特殊的Web客戶程序使用,瀏覽器不會用到它。 |
Upgrade-Insecure-Requests:參考http://www.cnblogs.com/hustskyking/p/upgrade-insecure-requests.html
User-Agent:告訴服務器,客戶機的軟件環境
這里是response headers和request headers中所能觸及到的大部分內容,其中在response headers中Access-Control-Allow-Origin可以解決一些跨域問題,Allow和請求方法有關,cache-control和緩存有關等等,知道這些應該對之后的接口連接有一些幫助,希望能幫助到大家~