程式猿必須要了解的HTTP協議,今天總結了一份關於HTTP請求的結構與具體內容
HTTP協議(超文字傳輸協議):是網際網路上應用最為廣泛的一種網路協議,所有的WWW檔案都必須遵守這個標準。
1、客戶端發起一個HTTP請求,建立一個到伺服器指定埠(預設80)的TCP連線。
2、伺服器在那個埠監聽客戶端發來的請求。
3、伺服器(向客戶端)發回一個狀態行,比如“HTTP/1.1 200 OK”和(響應的)訊息,訊息的訊息體可能是請求的檔案、錯誤訊息、或者一些其他的資訊。
4、客戶端接受伺服器所返回的訊息通過瀏覽器顯示在使用者的顯示屏上,然後客戶機與伺服器斷開連線。
HTTP Request:客戶端通過傳送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 |
Authorization | HTTP授權的授權證書 | Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ== |
Cache-Control | 指定請求和響應遵循的快取機制 | Cache-Control: no-cache |
Connection | 表示是否需要持久連線。(HTTP 1.1預設進行持久連線) | Connection: close |
Cookie | HTTP請求傳送時,會把儲存在該請求域名下的所有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 | 發出請求的使用者的Email | From: [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 | 如果實體未改變,伺服器傳送客戶端丟失的部分,否則傳送整個實體。引數也為Etag | If-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-Agent | User-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