1. 程式人生 > >程式猿必須要了解的HTTP協議,今天總結了一份關於HTTP請求的結構與具體內容

程式猿必須要了解的HTTP協議,今天總結了一份關於HTTP請求的結構與具體內容

        HTTP協議(超文字傳輸協議):是網際網路上應用最為廣泛的一種網路協議,所有的WWW檔案都必須遵守這個標準。

        1、客戶端發起一個HTTP請求,建立一個到伺服器指定埠(預設80)的TCP連線。

        2、伺服器在那個埠監聽客戶端發來的請求。

        3、伺服器(向客戶端)發回一個狀態行,比如“HTTP/1.1 200 OK”和(響應的)訊息,訊息的訊息體可能是請求的檔案、錯誤訊息、或者一些其他的資訊。

        4、客戶端接受伺服器所返回的訊息通過瀏覽器顯示在使用者的顯示屏上,然後客戶機與伺服器斷開連線。

        HTTP Request:客戶端通過傳送HTTP請求向伺服器請求對資源的訪問。它向伺服器傳遞了一個數據塊,也就是請求資訊,由請求行、請求頭、空行和請求體

構成。一個HTTP請求報文分為請求行、請求頭和請求體的結構如下圖:


        一個典型的請求訊息頭域,如下圖所示:

GET https://www.baidu.com/s?ie=utf-8&f=8&rsv_bp=0&rsv_idx=1&tn=baidu&wd=http%E8%AF%B7%E6%B1%82%E4%BD%93%E6%9C%89%E5%93%AA%E4%BA%9B&rsv_pq=d99857fe0005b845&rsv_t=cb850GQJ1l2sbaZcfkUNDpxKzu5HaIzKXFFjln2W3KoTlAVcbXS83vJqTMc&rqlang=cn&rsv_enter=1&rsv_sug3=32&rsv_sug1=36&rsv_sug7=101 HTTP/1.1
Host: www.baidu.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.99 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cookie: BAIDUID=62BF3FD39B99E1C1E09A2DCCBD06047B:FG=1; BIDUPSID=62BF3FD39B99E1C1E09A2DCCBD06047B; PSTM=1530629421; BD_UPN=12314353; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; ispeed_lsm=2; H_PS_PSSID=1437_21123_26810; BD_CK_SAM=1; PSINO=1; BD_HOME=0; H_PS_645EC=e271zsj86QRu6v%2BWp4xPjSXg0MeBr03EMXiwVRi%2BkP3G7cnsRW3d7cMEevg

        一、Request Line:請求行

        請求行分為三個部分:請求方法請求地址協議及版本,以CRLF(\r\n)結束。

        HTTP/1.1定義的請求方法有8中: GET、POST、PUT、DELETE、PATCH、HEAD、OPTIONS、TRACE

        最常見的是GET、POST

        如果是RESTful介面一般會用到GET、POST、PUT、DELETE

        二、Header:請求頭

Header解釋示例
Accept指定客戶端能夠接收的內容型別Accept: text/plain, text/html,application/json
Accept-Charset瀏覽器可以接受的字元編碼集。Accept-Charset: iso-8859-5
Accept-Encoding指定瀏覽器可以支援的web伺服器返回內容壓縮編碼型別。Accept-Encoding: compress, gzip
Accept-Language瀏覽器可接受的語言Accept-Language: en,zh
Accept-Ranges可以請求網頁實體的一個或者多個子範圍欄位Accept-Ranges: bytes
AuthorizationHTTP授權的授權證書Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Cache-Control指定請求和響應遵循的快取機制Cache-Control: no-cache
Connection表示是否需要持久連線。(HTTP 1.1預設進行持久連線)Connection: close
CookieHTTP請求傳送時,會把儲存在該請求域名下的所有cookie值一起傳送給web伺服器。Cookie: $Version=1; Skin=new;
Content-Length請求的內容長度Content-Length: 348
Content-Type請求的與實體對應的MIME資訊Content-Type: application/x-www-form-urlencoded
Date請求傳送的日期和時間Date: Tue, 15 Nov 2010 08:12:31 GMT
Expect請求的特定的伺服器行為Expect: 100-continue
From發出請求的使用者的EmailFrom: [email protected]
Host指定請求的伺服器的域名和埠號Host: www.zcmhi.com
If-Match只有請求內容與實體相匹配才有效If-Match: “737060cd8c284d8af7ad3082f209582d”
If-Modified-Since如果請求的部分在指定時間之後被修改則請求成功,未被修改則返回304程式碼If-Modified-Since: Sat, 29 Oct 2010 19:43:31 GMT
If-None-Match如果內容未改變返回304程式碼,引數為伺服器先前傳送的Etag,與伺服器迴應的Etag比較判斷是否改變If-None-Match: “737060cd8c284d8af7ad3082f209582d”
If-Range如果實體未改變,伺服器傳送客戶端丟失的部分,否則傳送整個實體。引數也為EtagIf-Range: “737060cd8c284d8af7ad3082f209582d”
If-Unmodified-Since只在實體在指定時間之後未被修改才請求成功If-Unmodified-Since: Sat, 29 Oct 2010 19:43:31 GMT
Max-Forwards限制資訊通過代理和閘道器傳送的時間Max-Forwards: 10
Pragma用來包含實現特定的指令Pragma: no-cache
Proxy-Authorization連線到代理的授權證書Proxy-Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==
Range只請求實體的一部分,指定範圍Range: bytes=500-999
TE客戶端願意接受的傳輸編碼,並通知伺服器接受接受尾加頭資訊TE: trailers,deflate;q=0.5
Upgrade向伺服器指定某種傳輸協議以便伺服器進行轉換(如果支援)Upgrade: HTTP/2.0, SHTTP/1.3, IRC/6.9, RTA/x11
User-AgentUser-Agent的內容包含發出請求的使用者資訊User-Agent: Mozilla/5.0 (Linux; X11)
Via通知中間閘道器或代理伺服器地址,通訊協議Via: 1.0 fred, 1.1 nowhere.com (Apache/1.1)
Warning關於訊息實體的警告資訊Warn: 199 Miscellaneous warning

        在請求頭,我們會發現每次訪問一個url都會產生一個Cookie,其結構大致如下:

        BAIDUID=62BF3FD39B99E1C1E09A2DCCBD06047B:FG=1  
	BIDUPSID=62BF3FD39B99E1C1E09A2DCCBD06047B
	PSTM=1530629421
	BD_UPN=12314353
	BDORZ=B490B5EBF6F3CD402E515D22BCDA1598
	H_PS_PSSID=1437_21123_26810
	BD_CK_SAM=1
	PSINO=1
	BD_HOME=0
	H_PS_645EC=9573fbRzWf4F3tPBUuw17vxXaKvM306I%2FIpG1iZdjGKmcp5l%2Fl%2B1zhxmT60
	ispeed_lsm=0
	BDSVRTM=0
       cookie一般是由Name(名稱)、Value(值)、Domain(域)、Path(路徑)、Expires/Max-Age(有效期)、Size(大小)、Http(控制cookie只能在http下才能被髮送)、Secure(控制cookie只能在https下才能被髮送)、SameSite(cookie在不同的站點之間是否被傳遞)

        三、Rquest Body:請求體(get請求的請求體一般沒有內容)

        Types:根據應用場景,有三種不同的形式。

 、    任意型別:移動開發者常見的,請求體是任意型別,伺服器不會解析請求體,請求體的處理需要自己解析,如 POST JSON時候就是這類。

          

        1、application/json由於 JSON 規範的流行,除了低版本 IE 之外的各大瀏覽器都原生支援 JSON.stringify,服務端語言也都有處理 JSON 的函式,使用 JSON 不會遇上什麼麻煩。

        工作原理:

{
    "name": "xiaoming",
    "sub": [1, 2, 3],
    "focus": [
         {
              "語文": 102,
              "數學": 118,
              "英語":121,
         },
         {
              "hobby": 102,
              "figures": "humorous",
              "character":"outgoing"
         }
     ]
}

        2、Text/xml一種使用 HTTP 作為傳輸協議,XML 作為編碼方式的遠端呼叫規範。

HTMLPOST http://www.example.com HTTP/1.1 
Content-Type: text/xml

<?xml version="1.0"?>
<methodCall>
    <methodName>examples.getStateName</methodName>
    <params>
        <param>
            <value><i4>41</i4></value>
        </param>
    </params>
</methodCall>
        3、Query String:application/X-www-form-urlencoded

        客戶端向伺服器傳送請求,其實瀏覽器已經為我們做了這麼多事情!!!


相關推薦

程式必須HTTP協議今天總結關於HTTP請求結構具體內容

        HTTP協議(超文字傳輸協議):是網際網路上應用最為廣泛的一種網路協議,所有的WWW檔案都必須遵守這個標準。        1、客戶端發起一個HTTP請求,建立一個到伺服器指定埠(預設80)的TCP連線。        2、伺服器在那個埠監聽客戶端發來的請求。

android studio程式必須會的幾個技巧 知曉當前是那個活動?隨時隨地的退出程式?啟動活動的最佳方法?

             程式猿必須要會的幾個技巧!!!進入公司前必讀!!! 我們主要介紹以下三個技巧 1.知曉當前是那個活動 你可能會奇怪,我自己編的程式我怎麼可能不知道當前執行的是哪一個程式呢,很不幸的是,當你進入一家企業的時候,更有可能接收的是別人已經寫好的程式碼

程式秒懂的段子動態圖平常人看一頭霧水

1、當你和離職程式設計師做專案交接時 2、在嘗試重構別人程式碼時 3、程式碼還沒有ctrl+s時宕機了 相信這裡有很多學習java的朋友,小編整理了一份java方面的學習資料, 有想要學習java的可以加一下我的學習群的喲,60833,4068,歡迎愛學習

Java程式設計師必須的七個開源協議介紹

                1、Mozilla Public License MPL License,允許免費重發布、免費修改,但要求修改後的程式碼版權歸軟體的發起者。這種授權維護了商業軟體的利益,,它要求基於這種軟體得修改無償貢獻版權給該軟體。這樣,圍繞該軟體得所有程式碼得版權都集中在發起開發人得手中。

資料庫的四種隔離級別程式設計師必須

資料庫提供了四種事務隔離級別, 不同的隔離級別採用不同的鎖類開來實現.  READ UNCOMMITTED(未提交讀) 幻想讀、不可重複讀和髒讀都允許。一個會話可以讀取其他事務未提交的更新結果,如

JAVA程式設計師4年迷茫希望由前輩可以給指出一個技術路線5年左右程式設計師必須掌握的知識技能樹?

在程式界流行著一種預設的說法叫“黃金5年”,也就是一個程式設計師從入職的時候算起,前五年的選擇直接影響著整個職業生涯中的職業發展方向和薪資走向,如何走好這5年,徹底從一個剛入行的菜鳥蛻變成可以以不變應萬變的職業大牛,這是一個涉及到自身專業知識儲備和選擇的大難題,那麼,這五年裡,一個Java程式設計師

關於Http協議必須知道的

轉自:https://segmentfault.com/a/1190000016751071      引言 HTTP協議是Hyper Text Transfer Protocol(超文字傳輸協議)的縮寫,是用於從全球資訊網伺服器傳輸超文字到本地瀏覽器的傳送協議。HT

關於HTTP協議篇就夠

改變 就會 足夠 options 服務器交互 視頻 用戶 base64加密 英文字母 關於HTTP協議,一篇就夠了 作者 RaphetS 關註 2016.10.13 06:48* 字數 4806 閱讀 12969評論 26喜歡 203贊賞 1 HTT

4-關於HTTP協議篇就夠

nal ont 操作 規則 自身 .com 工作 擴展 概念 HTTP簡介 HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫,是用於從萬維網(WWW:World Wide Web )服務器傳輸超文本到本地瀏覽器的傳送協議。 H

【高階網站製作】程式應該知道的六大SEO節點

  在高階網站製作時,我們就不應該盲目的去做一個自己喜歡的網站就行,我們還必須要做一個能夠讓搜尋引擎認可的網站,這樣在後期才能更好的做排名。然而,這些操作就要關係到SEO的問題上了,所以說在做網站建設的時候程式猿應該要知道的六大SEO節點!        一、連結統一   搜尋引擎

如果你想搞懂“分散式鎖”必須看這篇文章 很意外!

對於鎖大家肯定不會陌生,在 Java 中 synchronized 關鍵字和 ReentrantLock 可重入鎖在我們的程式碼中是經常見的,一般我們用其在多執行緒環境中控制對資源的併發訪問。 但是隨著分散式的快速發展,本地的加鎖往往不能滿足我們的需要,在我們的分散式環境中上面加鎖的方法

程式設計師必須掌握的十大經典演算法

演算法一:快速排序演算法 快速排序是由東尼·霍爾所發展的一種排序演算法。在平均狀況下,排序 n 個專案要Ο(n log n)次比較。在最壞狀況下則需要Ο(n2)次比較,但這種狀況並不常見。事實上,快速排序通常明顯比其他Ο(n log n) 演算法更快,因為它的內部迴圈(inner loop

不想被淘汰大咖有話說——程式一定學大資料?

程式設計師一定要學大資料嗎?最近我聽到一些程式設計師朋友在問我這個問題,也有一些程式設計師朋友因為考慮轉崗而問到我這個問題。我覺得也許是時候說說我對這個問題的一些看法了。     衡量職場發展的指標 很多初學者,對大資料的概念都是模糊不清的,大資料是什

瞭解HTTP協議篇就夠

1、HTTP協議簡介 1.1、HTTP協議是超文字傳輸協議的簡稱,工作於應用層,用於從伺服器傳輸超文字到本地瀏覽器。HTTP協議本身是一種無狀態的,也沒法自己傳輸資料,底層的資料傳輸協議是TCP協議。HTTP協議工作於客戶端-服務端架構為上。瀏覽器作為HTTP客戶端通過URL向HTTP服務端

所有 Python 程式設計師必須學會的「日誌」記錄。

本文字數:3840 字 閱讀本文大概需要:10 分鐘 寫在之前 在我們的現實生活中,「日誌記錄」其實是一件非常重要的事情,比如銀行的轉賬記錄,汽車的行車記錄儀記錄行駛過程中的一切,如果出現了什麼問題,我們可以通過「日誌記錄」來搞清楚到底發生了什麼事情。 除了在生活中,在日常的系統開發以及除錯等

做IT想敏捷開發DevOps先搞懂專案管理再說

本文摘自“光環國際”—中國專案管理PMP培訓上市企業 什麼是專案管理? 你必須先把腦子裡那些描述專案管理的概念定義、各種管理的流程統統清零。拋開這些熟知的東西,跟著我好好琢磨琢磨:專案管理的本質,到底是個什麼東西。 多種管理方法頻出 在這樣一個如敏捷、DevO

所有 Python 程式設計師必須學會的「日誌」記錄

寫在之前 在我們的現實生活中,「日誌記錄」其實是一件非常重要的事情,比如銀行的轉賬記錄,汽車的行車記錄儀記錄行駛過程中的一切,如果出現了什麼問題,我們可以通過「日誌記錄」來搞清楚到底發生了什麼事情。 除了在生活中,在日常的系統開發以及除錯等過程中,記錄日誌同樣是一件很重要的事情。很多程式設計

馬上過年程式最頭痛的三件事你中槍嗎?

一年一年又一年,程式設計師gg要回家過年了,可是頭疼的事情還真不少。強烈要求漲工資。 1.修電腦 過年期間,程式猿最怕的三件事過年期間,程式猿最怕的三件事 對程式設計師們來說,過年回家經常是一把辛酸淚。七大姑八大姨們難得碰到一個懂電腦的,一定不會輕易放過。 “會不會修電腦?

工業網際網路需要協議

自動化通訊協定 程式自動化 ▪ BSAP ▪ CC-Li

用ant執行時報錯“詳細資訊請使用-xlint:unchecked重新編譯”的解決方案

一、遇到問題: 用ant執行jasperreport的samples\charts示例的build.xml時,無法編譯,提示錯誤如下: javac:     [javac] Compiling 2 source files to E:\jiangcm\workspace-forict-myeclipse\ja