HTTP協議里的請求頭有什麼用?
假設HTTP請求頭要求服務端返回一個HTML格式的文件,但服務端強行返回一個json格式的文件,那麼用瀏覽器查看還是報錯,查看不了,那麼請求頭到底有什麼用啊,還要受限於服務端.
英語沒學好吧?
request 里的 Accept-* 可有欽定的意思?
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding:gzip, deflate, sdch
Accept-Language:zh-CN,zh;q=0.8,en-US;q=0.6,en;q=0.4
response 里的 Content-* 才是已經決定了就是你了這個意思好嗎
Content-Encoding:gzip
Content-Length:5506
Content-Type:text/html;charset=utf-8
事情當然是服務端決定,當然也會考慮客戶端的意見,但服務端的決定權也是很重要的。
在這個特殊的日子裡,我們更需加強學習。你拿存摺去銀行取一個億銀行就給你一個億嗎?你存摺只有一毛錢銀行會取一個億給你嗎?
最近研究了HTTP協議,所以在這裡回答下這個問題,首先回答題主的問題,請求頭有什麼作用?我覺得請求頭能反映給服務端以下信息:
1、請求類型
我們常見的請求類型有Get和Post兩種,而這個信息在HTTP請求報文的第一行即請求行中就可以得到。
2、請求地址
請求地址告訴服務端當前請求來自哪裡,例如"/"表示的是伺服器根目錄,對一個靜態網站而言,如果存在index.html則它指向該網頁;對一個動態網站而已,如果存在index.php則它指向該網頁。
3、請求參數
客戶端和伺服器的通信最終是要落實到具體數據的傳遞上來的,所以通過請求報文我們能夠獲得客戶端傳遞的參數並對其進行處理,通常Get類型參數在請求行、而Post類型參數在消息體中。
4、請求約束
如果說1、2、3是通信核心要素,那麼接下來這些我們可以稱其為細節要素。如題主所言,在客戶端發起請求以後,到底服務端該以什麼樣的形式來返回給客戶端?這部分內容定義在請求頭部中,具體可以看下面的報文實例。
下面給出一段請求報文:
GET /?num1=23num2=12 HTTP/1.1
Accept: text/html, application/xhtml+xml, image/jxr, */*
Accept-Language: zh-Hans-CN,zh-Hans;q=0.5
User-Agent: Mozilla/5.0 (Windows NT 10.0) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586
Accept-Encoding: gzip, deflate
Host: localhost:4040
Connection: Keep-Alive
Cookie: _ga=GA1.1.1181222800.1463541781
在這段報文中,它可以分為三部分,第一部分,請求行即第一行,在這裡我們獲得請求類型、請求參數、請求地址三個信息。
第二部分,我們稱為請求頭部,這裡定義了如Accept、AccepLanguage等欄位,這是我們這裡所說的請求約束。
第三部分,消息體,它是一個可選的內容,和第二部分間有一個空行,當採用Post類型請求時這裡將記錄客戶端傳遞的參數。
我覺得這樣應該可以解答題主的問題了,關於頭部欄位具體表示什麼含義,這些可以通過搜索引擎自己來了解,因為參數非常多啦,最後請允許我安利我最近寫的關於HTTP的博客~(≧▽≦)/~
http://qinyuanpei.com/2016/06/11/make-a-http-server-with-csharp-03.html
總而言之,這是一個客戶端和服務端進行溝通的問題,雙方按照各自的要求符合規律地去做好事情是我們期望的結果,可如果雙方有一方想要任性你能有什麼辦法啊……
HTTP:The Definitive Guide
瀏覽器會認為伺服器返回了錯誤的數據
let response = request =&> return {"json" : null}
let response = request =&> return request.accpet === "text/html" ? & : {"json" : null}
服務端os:「如果我打算支持多種格式那是我仁義,但不代表你能因此而責備我。」
推薦閱讀:
※乙太網的mac協議和基於點對點的ppp協議的區別和使用場景是什麼
※在瀏覽器地址欄輸入一個URL後回車,背後會進行哪些技術步驟?
※TCP快速重傳為什麼是三次冗餘ack,這個三次是怎麼定下來的?
※OSI模型中,一個協議應該屬於哪一層是以什麼為標準劃分的?
※網關和路由器的區別是什麼?