HTTP,request,response
一、HTTP協議
Hypertext Transfer Protocol,超文本傳輸協議,HTTP 是一個在計算機世界里專門在兩點之間傳輸文字、圖片、音頻、視頻等超文本數據的約定和規范。
- HTTP 0.9
1991年,原型版本,功能簡陋,只有一個命令GET,只支持純文本內容,該版本已過時。
- HTTP 1.0
任何格式的內容都可以發送,這使得互聯網不僅可以傳輸文字,還能傳輸圖像、視頻、二進制等文件。除了GET命令,還引入了POST命令和HEAD命令。http請求和回應的格式改變,除了數據部分,每次通信都必須包括頭信息(HTTP header),用來描述一些元數據。只使用 header 中的 If-Modified-Since 和 Expires 作為緩存失效的標準。不支持斷點續傳,也就是說,每次都會傳送全部的頁面和數據。通常每臺計算機只能綁定一個 IP,所以請求消息中的 URL 并沒有傳遞主機名(hostname)
- HTTP 1.1
http1.1是目前最為主流的http協議版本,從1999年發布至今,仍是主流的http協議版本。引入了持久連接( persistent connection),即TCP連接默認不關閉,可以被多個請求復用,不用聲明Connection: keep-alive。長連接的連接時長可以通過請求頭中的 keep-alive 來設置引入了管道機制( pipelining),即在同一個TCP連接里,客戶端可以同時發送多個請求,進一步改進了HTTP協議的效率。HTTP 1.1 中新增加了 E-tag,If-Unmodified-Since, If-Match, If-None-Match 等緩存控制標頭來控制緩存失效。支持斷點續傳,通過使用請求頭中的 Range 來實現。使用了虛擬網絡,在一臺物理服務器上可以存在多個虛擬主機(Multi-homed Web Servers),并且它們共享一個IP地址。新增方法:PUT、 PATCH、 OPTIONS、 DELETE。
- http1.x版本問題
在傳輸數據過程中,所有內容都是明文,客戶端和服務器端都無法驗證對方的身份,無法保證數據的安全性。HTTP/1.1 版本默認允許復用TCP連接,但是在同一個TCP連接里,所有數據通信是按次序進行的,服務器通常在處理完一個回應后,才會繼續去處理下一個,這樣子就會造成隊頭阻塞。http/1.x 版本支持Keep-alive,用此方案來彌補創建多次連接產生的延遲,但是同樣會給服務器帶來壓力,并且的話,對于單文件被不斷請求的服務,Keep-alive會極大影響性能,因為它在文件被請求之后還保持了不必要的連接很長時間。
- HTTP 2.0
二進制分幀 這是一次徹底的二進制協議,頭信息和數據體都是二進制,并且統稱為"幀":頭信息幀和數據幀。頭部壓縮 HTTP 1.1版本會出現 「User-Agent、Cookie、Accept、Server、Range」 等字段可能會占用幾百甚至幾千字節,而 Body 卻經常只有幾十字節,所以導致頭部偏重。HTTP 2.0 使用 HPACK 算法進行壓縮。多路復用 復用TCP連接,在一個連接里,客戶端和瀏覽器都可以同時發送多個請求或回應,且不用按順序一一對應,這樣子解決了隊頭阻塞的問題。服務器推送 允許服務器未經請求,主動向客戶端發送資源,即服務器推送。請求優先級 可以設置數據幀的優先級,讓服務端先處理重要資源,優化用戶體驗。
RFC 規定 HTTP 的狀態碼為「三位數」,第一個數字定義了響應的類別,被分為五類:
- 1xx: 代表請求已被接受,需要繼續處理。
- 2xx: 表示成功狀態。
- 3xx: 重定向狀態。
- 4xx: 客戶端錯誤。
- 5xx: 服務器端錯誤。
200 OK:請求正常處理完畢
204 No Content:請求成功處理,沒有實體的主體返回
206 Partial Content:GET范圍請求已成功處理
301 Moved Permanently:永久重定向,資源已永久分配新URI
302 Found:臨時重定向,資源已臨時分配新URI
303 See Other:臨時重定向,期望使用GET定向獲取
304 Not Modified:用于瀏覽器緩存的狀態代碼。 如果響應尚未修改,則客戶端/用戶可以繼續使用相同的響應/緩存版本。 例如,如果資源已自特定時間以來被修改,瀏覽器可以請求。 如果沒有,則發送狀態代碼 304。 如果已修改,則發送狀態代碼 200 以及資源。
307 Temporary Redirect:臨時重定向,POST不會變成GET
400 Bad Request:請求報文語法錯誤或參數錯誤
401 Unauthorized:需要通過HTTP認證,或認證失敗
403 Forbidden:請求資源被拒絕
404 Not Found:無法找到請求資源(服務器無理由拒絕)
500 Internal Server Error;服務器故障或Web應用故障
503 Service Unavailable;服務器超負載或停機維護
更詳細的狀態碼解釋
二、HTTP請求行、請求頭、請求體
- ①是請求方法,GET和POST是最常見的HTTP方法,除此以外還包括DELETE、HEAD、OPTIONS、PUT、TRACE。不過,當前的大多數瀏覽器只支持GET和POST,Spring 3.0提供了一個HiddenHttpMethodFilter,允許你通過“_method”的表單參數指定這些特殊的HTTP方法(實際上還是通過POST提交表單)。服務端配置了HiddenHttpMethodFilter后,Spring會根據_method參數指定的值模擬出相應的HTTP方法,這樣,就可以使用這些HTTP方法對處理方法進行映射了。
- ②為請求對應的URL地址,它和報文頭的Host屬性組成完整的請求URL
- ③是協議名稱及版本號。
- ④是HTTP的報文頭,報文頭包含若干個屬性,格式為“屬性名:屬性值”,服務端據此獲取客戶端的信息。
報文頭屬性是什么東西呢?我們不妨以一個小故事來說明吧。
- 快到中午了,張三豐不想去食堂吃飯,于是打電話叫外賣:老板,我要一份[魚香肉絲],要12:30之前給我送過來哦,我在江湖湖公司研發部,叫張三豐。
- 這里,你要[魚香肉絲]相當于HTTP報文體,而“12:30之前送過來”,你叫“張三豐”等信息就相當于HTTP的報文頭。它們是一些附屬信息,幫忙你和飯店老板順利完成這次交易。
- 常見的HTTP請求報文頭屬性
Accept :請求報文可通過一個“Accept”報文頭屬性告訴服務端:客戶端接受什么類型的響應。 Accept屬性的值可以為一個或多個MIME類型的值。
更多關于MIME類型,大家請參考:http://en.wikipedia.org/wiki/MIME_type
Cookie :客戶端的Cookie就是通過這個報文頭屬性傳給服務端的哦!
Referer :表示這個請求是從哪個URL過來的,假如你通過google搜索出一個商家的廣告頁面,你對這個廣告頁面感興趣,鼠標一點發送一個請求報文到商家的網站,這個請求報文的Referer報文頭屬性值就是http://www.google.com。
Cache-Control :對緩存進行控制,如一個請求希望響應返回的內容在客戶端要被緩存一年,或不希望被緩存就可以通過這個報文頭達到目的。
Accept-Charset:告訴服務器能夠發送哪些字符集
Accept-Encoding:告訴服務器能夠發送哪些編碼方式
Accept-Language:告訴服務器能夠發送哪些語言
Host:指定要請求的資源所在的主機和端口
User-Agent 作用:告訴服務器,客戶端使用的操作系統、瀏覽器版本和名稱
Client-IP:提供了運行客戶端的機器的IP地址
From:提供了客戶端用戶的E-mail地址
TE:告訴服務器可以使用那些擴展傳輸編碼
Expect:允許客戶端列出某請求所要求的服務器行為
Range:如果服務器支持范圍請求,就請求資源的指定范圍
更詳細的請求頭解釋
- ⑤是報文體,它將一個頁面表單中的組件值通過param1=value1¶m2=value2的鍵值對形式編碼成一個格式化串,它承載多個請求參數的數據。不但報文體可以傳遞請求參數,請求URL也可以通過類似于“/chapter15/user.htmlparam1=value1¶m2=value2”的方式傳遞請求參數。
- 請求體的多種格式
- multipart/form-data
以表單形式提交,主要是上傳文件用它,在http中格式為
- application/x-www-from-urlencoded以鍵值對的數據格式提交
- raw
- 選擇text,則請求頭是: text/plain
- 選擇javascript,則請求頭是: application/javascript
- 選擇json,則請求頭是: application/json (如果想以json格式傳參,就用raw+json就行了)
- 選擇html,則請求頭是: text/html 選擇application/xml,則請求頭是: application/xml
- binary
相當于Content-Type:application/octet-stream,從字面意思得知,只可以上傳二進制數據,通常用來上傳文件,由于沒有鍵值,所以,一次只能上傳一個文件。(一般用的不多)
- postman中 Params和Body的區別
Params 它會將參數放入url的?后面提交到后臺(帶到請求的接口鏈接里)
Body是放在請求體里面
三、HTTP響應行、響應頭、響應體
- ①報文協議及版本;
- ②狀態碼及狀態描述;
Access-Control-Allow-Origin: www.baidu.com 指定哪些網站可以跨域資源共享
更詳細的響應頭解釋
由Content-Type決定,一般有以下類型:
- application/javascript
- application/html
- application/json
最后推薦直接看官方文檔
參考文章
總結
以上是生活随笔為你收集整理的HTTP,request,response的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 从web.xml谈谈SpringMVC集
- 下一篇: SaaS的行业概述及发展现状