Http介紹

什么是Http協(xié)議

超文本傳輸協(xié)議(英文:HyperText Transfer Protocol,縮寫(xiě):HTTP)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。設(shè)計(jì)HTTP最初的目的是為了提供一種發(fā)布和接收HTML頁(yè)面的方法。其實(shí),我們平時(shí)瀏覽的網(wǎng)頁(yè)就是基于 HTTP 協(xié)議呈現(xiàn)的,HTTP 協(xié)議是互聯(lián)網(wǎng)應(yīng)用中,客戶端(瀏覽器)與服務(wù)器之間進(jìn)行數(shù)據(jù)通信的一種協(xié)議。協(xié)議中規(guī)定了客戶端應(yīng)該按照什么格式給服務(wù)器發(fā)送請(qǐng)求,同時(shí)也約定了服務(wù)端返回的響應(yīng)結(jié)果應(yīng)該是什么格式。

Http請(qǐng)求結(jié)構(gòu)

HTTP請(qǐng)求由3部分組成,分別是請(qǐng)求行、請(qǐng)求首部、請(qǐng)求體,首部和請(qǐng)求體是可選的,并不是每個(gè)請(qǐng)求都需要的。

  • 請(qǐng)求行
    請(qǐng)求行是每個(gè)請(qǐng)求必不可少的部分,它由3部分組成,分別是請(qǐng)求方法(method)、請(qǐng)求URL(URI)、HTTP協(xié)議版本,以空格隔開(kāi)。

  • 請(qǐng)求首部
    因?yàn)檎?qǐng)求行所攜帶的信息量非常有限,以至于客戶端還有很多想向服務(wù)器要說(shuō)的事情不得不放在請(qǐng)求首部(Header),請(qǐng)求首部用于給服務(wù)器提供一些額外的信息,比如 User-Agent 用來(lái)表明客戶端的身份,讓服務(wù)器知道你是來(lái)自瀏覽器的請(qǐng)求還是爬蟲(chóng),是來(lái)自 Chrome 瀏覽器還是 FireFox。

  • 請(qǐng)求體
    請(qǐng)求體是客戶端提交給服務(wù)器的真正內(nèi)容,比如用戶登錄時(shí)的需要用的用戶名和密碼,比如文件上傳的數(shù)據(jù),比如注冊(cè)用戶信息時(shí)提交的表單信息。

HTTP請(qǐng)求方法

根據(jù)HTTP標(biāo)準(zhǔn),HTTP請(qǐng)求可以使用多種請(qǐng)求方法。
HTTP1.0定義了三種請(qǐng)求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五種請(qǐng)求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。


HTTP請(qǐng)求方法

URL概述

統(tǒng)一資源定位符(URL,英語(yǔ) Uniform / Universal Resource Locator的縮寫(xiě))是用于完整地描述Internet上網(wǎng)頁(yè)和其他資源的地址的一種標(biāo)識(shí)方法。
URL格式:schema://host[:port#]/path/…/[?query-string][#anchor]

  • schema 協(xié)議(例如:http, https, ftp)
  • host 服務(wù)器的IP地址或者域名
  • port# 服務(wù)器的端口(如果是走協(xié)議默認(rèn)端口,缺省端口80)
  • path 訪問(wèn)資源的路徑
  • query-string 參數(shù),發(fā)送給http服務(wù)器的數(shù)據(jù)
  • anchor- 錨(跳轉(zhuǎn)到網(wǎng)頁(yè)的指定錨點(diǎn)位置)

常用的請(qǐng)求報(bào)頭

報(bào)頭信息.png
  • Host
    Host初始URL中的主機(jī)和端口,用于指定被請(qǐng)求資源的Internet主機(jī)和端口號(hào),它通常從HTTP URL中提取出來(lái)的.
  • Connection
    表示客戶端與服務(wù)連接類(lèi)型;
    交互步驟:
    1.client 發(fā)起一個(gè)包含Connection:keep-alive的請(qǐng)求
    2.server收到請(qǐng)求后,如果server支持keepalive,回復(fù)一個(gè)包含Connection:keep-alive的響應(yīng),不關(guān)閉連接。否則回復(fù)一個(gè)包含Connection:close的響應(yīng),關(guān)閉連接。
    3.如果client收到包含Connection:keep-alive的響應(yīng),向同一個(gè)連接發(fā)送下一個(gè)請(qǐng)求,直到一方主動(dòng)關(guān)閉連接。Keep-alive在很多情況下能夠重用連接,減少資源消耗,縮短響應(yīng)時(shí)間HTTP。
  • Accept
    表示瀏覽器支持的 MIME 類(lèi)型
    MIME的英文全稱(chēng)是 Multipurpose Internet Mail Extensions(多用途互聯(lián)網(wǎng)郵件擴(kuò)展)
  eg:
  Accept:image/gif,表明客戶端希望接受GIF圖象格式的資源;
  Accept:text/html,表明客戶端希望接受html文本。
  Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
  意思:瀏覽器支持的 MIME 類(lèi)型分別是 text/html、application/xhtml+xml、application/xml 和 */*,優(yōu)先順序是它們從左到右的排列順序。

  Text:用于標(biāo)準(zhǔn)化地表示的文本信息,文本消息可以是多種字符集和或者多種格式的;
  Application:用于傳輸應(yīng)用程序數(shù)據(jù)或者二進(jìn)制數(shù)據(jù);
image.png
  • Content-Type
    POST 提交,application/x-www-form-urlencoded
    提交的數(shù)據(jù)按照 key1=val1&key2=val2 的方式進(jìn)行編碼,key 和 val 都進(jìn)行了 URL 轉(zhuǎn)碼。
  • User-Agent
    瀏覽器類(lèi)型
  • Referer
    請(qǐng)求來(lái)自哪個(gè)頁(yè)面,用戶是從該 Referer URL頁(yè)面訪問(wèn)當(dāng)前請(qǐng)求的頁(yè)面。
  • Accept-Encoding
    瀏覽器支持的壓縮編碼類(lèi)型,比如gzip,支持gzip的瀏覽器返回經(jīng)gzip編碼的HTML頁(yè)面。
  • Accept-Language
    瀏覽器所希望的語(yǔ)言種類(lèi),當(dāng)服務(wù)器能夠提供一種以上的語(yǔ)言版本時(shí)要用到。
  eg:
  Accept-Language:zh-cn

如果請(qǐng)求消息中沒(méi)有設(shè)置這個(gè)報(bào)頭域,服務(wù)器假定客戶端對(duì)各種語(yǔ)言都可以接受。

  • Accept-Charset
    瀏覽器可接受的字符集,用于指定客戶端接受的字符集
  eg:
  Accept-Charset:iso-8859-1,gb2312
  ISO8859-1,通常叫做Latin-1。Latin-1包括了書(shū)寫(xiě)所有西方歐洲語(yǔ)言不可缺少的附加字符;
  gb2312是標(biāo)準(zhǔn)中文字符集;
  UTF-8 是 UNICODE 的一種變長(zhǎng)字符編碼,可以解決多種語(yǔ)言文本顯示問(wèn)題,從而實(shí)現(xiàn)應(yīng)用國(guó)際化和本地化。
  如果在請(qǐng)求消息中沒(méi)有設(shè)置這個(gè)域,缺省是任何字符集都可以接受。
  • Cache 頭域
    If-Modified-Since
    作用: 把瀏覽器端緩存頁(yè)面的最后修改時(shí)間發(fā)送到服務(wù)器去,服務(wù)器會(huì)把這個(gè)時(shí)間與服務(wù)器上實(shí)際文件的最后修改時(shí)間進(jìn)行對(duì)比。如果時(shí)間一致,那么返回304,客戶端就直接使用本地緩存文件。如果時(shí)間不一致,就會(huì)返回200和新的文件內(nèi)容??蛻舳私拥街?,會(huì)丟棄舊文件,把新文件緩存起來(lái),并顯示在瀏覽器中.

  • Pragma
    作用: 防止頁(yè)面被緩存, 在HTTP/1.1版本中,它和Cache-Control:no-cache作用一模一樣+
    Pargma只有一個(gè)用法, 例如: Pragma: no-cache
    注意: 在HTTP/1.0版本中,只實(shí)現(xiàn)了Pragema:no-cache, 沒(méi)有實(shí)現(xiàn)Cache-Control

  • Last-Modified與ETag
    Last-Modified與ETag是可以一起使用的,服務(wù)器會(huì)優(yōu)先驗(yàn)證ETag,一致的情況下,才會(huì)繼續(xù)比對(duì)Last-Modified,最后才決定是否返回304。因?yàn)閘ast-modified只能精確到秒級(jí) 所以etag才比last-modified的優(yōu)先級(jí)高。

Http響應(yīng)結(jié)構(gòu)

服務(wù)端接收請(qǐng)求并處理后,返回響應(yīng)內(nèi)容給客戶端,同樣地,響應(yīng)內(nèi)容也必須遵循固定的格式瀏覽器才能正確解析。HTTP 響應(yīng)也由3部分組成,分別是:響應(yīng)行、響應(yīng)首部、響應(yīng)體,與HTTP的請(qǐng)求格式是相對(duì)應(yīng)的。

  • 響應(yīng)行
    響應(yīng)行同樣也是3部分組成,由服務(wù)端支持的 HTTP 協(xié)議版本號(hào)、狀態(tài)碼、以及對(duì)狀態(tài)碼的簡(jiǎn)短原因描述組成。狀態(tài)碼是響應(yīng)行中很重要的一個(gè)字段。通過(guò)狀態(tài)碼,客戶端可以知道服務(wù)器是否正常處理的請(qǐng)求。如果狀態(tài)碼是200,說(shuō)明客戶端的請(qǐng)求處理成功,如果是500,說(shuō)明服務(wù)器處理請(qǐng)求的時(shí)候出現(xiàn)了異常。404 表示請(qǐng)求的資源在服務(wù)器找不到。除此之外,HTTP 協(xié)議還很定義了很多其他的狀態(tài)碼。
  • 響應(yīng)首部
    響應(yīng)首部和請(qǐng)求首部類(lèi)似,用于對(duì)響應(yīng)內(nèi)容的補(bǔ)充,在首部里面可以告知客戶端響應(yīng)體的數(shù)據(jù)類(lèi)型是什么?響應(yīng)內(nèi)容返回的時(shí)間是什么時(shí)候,響應(yīng)體是否壓縮了,響應(yīng)體最后一次修改的時(shí)間。
  • 響應(yīng)體
    響應(yīng)體(body)是服務(wù)器返回的真正內(nèi)容,它可以是一個(gè)HTML頁(yè)面,或者是一張圖片、一段視頻等等。

所有HTTP響應(yīng)的第一行都是狀態(tài)行,依次是當(dāng)前HTTP版本號(hào),3位數(shù)字組成的狀態(tài)代碼,以及描述狀態(tài)的短語(yǔ),彼此由空格分隔。 狀態(tài)代碼的第一個(gè)數(shù)字代表當(dāng)前響應(yīng)的類(lèi)型

1xx消息——請(qǐng)求已被服務(wù)器接收,繼續(xù)處理
2xx成功——請(qǐng)求已成功被服務(wù)器接收、理解、并接受
3xx重定向——需要后續(xù)操作才能完成這一請(qǐng)求
4xx請(qǐng)求錯(cuò)誤——請(qǐng)求含有詞法錯(cuò)誤或者無(wú)法被執(zhí)行
5xx服務(wù)器錯(cuò)誤——服務(wù)器在處理某個(gè)正確請(qǐng)求時(shí)發(fā)生錯(cuò)誤

常見(jiàn)狀態(tài)代碼、狀態(tài)描述、說(shuō)明:
◆200 (OK): 找到了該資源,并且一切正常。
◆301(Moved Permanently): 客戶請(qǐng)求的文檔在其他地方,新的URL在Location頭中給出,瀏覽器應(yīng)該自動(dòng)地訪問(wèn)新的URL。
◆302 (Found): 類(lèi)似于301,但新的URL應(yīng)該被視為臨時(shí)性的替代,而不是永久性的。
◆304 (NOT MODIFIED): 該資源在上次請(qǐng)求之后沒(méi)有任何修改。這通常用于瀏覽器的緩存機(jī)制。
◆400 (Bad Request): 請(qǐng)求出現(xiàn)語(yǔ)法錯(cuò)誤。
◆403 (FORBIDDEN): 客戶端未能獲得授權(quán)。這通常是在401之后輸入了不正確的用戶名或密碼。
◆404 (NOT FOUND): 在指定的位置不存在所申請(qǐng)的資源。
◆500 (Internal Server Error): 服務(wù)器遇到了意料不到的情況,不能完成客戶的請(qǐng)求
◆503 (Service Unavailable): 服務(wù)器由于維護(hù)或者負(fù)載過(guò)重未能應(yīng)答。例如,Servlet可能在數(shù)據(jù)庫(kù)連接池已滿的情況下返回503。服務(wù)器返回503時(shí)可以提供一個(gè)Retry-After頭
詳細(xì)的狀態(tài)碼信息:http://www.runoob.com/http/http-status-codes.html

延伸閱讀
《圖解HTTP》
《HTTP權(quán)威指南》
HTTP Request:https://www.w3.org/Protocols/rfc2616/rfc2616-sec5.html#sec5

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 本篇文章篇幅比較長(zhǎng),先來(lái)個(gè)思維導(dǎo)圖預(yù)覽一下。 一、概述 1.計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)分層 2.TCP/IP 通信傳輸流 ...
    滌生_Woo閱讀 56,204評(píng)論 24 557
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,554評(píng)論 19 139
  • 1. 網(wǎng)絡(luò)基礎(chǔ)TCP/IP HTTP基于TCP/IP協(xié)議族,HTTP屬于它內(nèi)部的一個(gè)子集。 把互聯(lián)網(wǎng)相關(guān)聯(lián)的協(xié)議集...
    yozosann閱讀 3,609評(píng)論 0 20
  • 一、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,741評(píng)論 6 152
  • 半月前,表姐夫來(lái)電話,說(shuō)表姐病了,在當(dāng)?shù)蒯t(yī)院檢查后,說(shuō)不大好治,建議來(lái)市醫(yī)院治療。 原來(lái),表姐牙齦出血已有大半年的...
    簡(jiǎn)之寧閱讀 437評(píng)論 4 15

友情鏈接更多精彩內(nèi)容