文章將包含以下幾方面內(nèi)容:

HTTP協(xié)議解讀與HTTP相關(guān)組件與HTTP相關(guān)協(xié)議HTTP組成HTTP協(xié)議優(yōu)缺點(diǎn)HTTP協(xié)議解讀HTTP 是一種 超文本傳輸協(xié)議(Hypertext Transfer Protocol" />

国产成人精品无码青草_亚洲国产美女精品久久久久∴_欧美人与鲁交大毛片免费_国产果冻豆传媒麻婆精东

18143453325 在線咨詢 在線咨詢
18143453325 在線咨詢
所在位置: 首頁 > 營銷資訊 > 建站知識(shí) > HTTP協(xié)議是什么?詳細(xì)解讀HTTP看完還不懂你來找我

HTTP協(xié)議是什么?詳細(xì)解讀HTTP看完還不懂你來找我

時(shí)間:2023-02-19 17:34:01 | 來源:建站知識(shí)

時(shí)間:2023-02-19 17:34:01 來源:建站知識(shí)

HTTP協(xié)議是什么?詳細(xì)解讀HTTP看完還不懂你來找我:

文章將包含以下幾方面內(nèi)容:

HTTP協(xié)議解讀

HTTP 是一種 超文本傳輸協(xié)議(Hypertext Transfer Protocol),超文本傳輸協(xié)議可以進(jìn)行文字分割:超文本(Hypertext)、傳輸(Transfer)、協(xié)議(Protocol) ,它們之間的關(guān)系如下:

分別對(duì)這三個(gè)名次做一個(gè)解釋:

超文本

兩臺(tái)電腦之間只能傳輸簡單文字,后面還想要傳輸圖片、音頻、視頻,甚至點(diǎn)擊文字或圖片能夠進(jìn)行超鏈接的跳轉(zhuǎn),那么文本的語義就被擴(kuò)大了,這種語義擴(kuò)大后的文本就被稱為超文本(Hypertext)。

傳輸

兩臺(tái)計(jì)算機(jī)之間會(huì)形成互聯(lián)關(guān)系進(jìn)行通信,我們存儲(chǔ)的超文本會(huì)被解析成為二進(jìn)制數(shù)據(jù)包,由傳輸載體(例如同軸電纜,電話線,光纜)負(fù)責(zé)把二進(jìn)制數(shù)據(jù)包由計(jì)算機(jī)終端傳輸?shù)搅硪粋€(gè)終端的過程

協(xié)議

網(wǎng)絡(luò)協(xié)議就是網(wǎng)絡(luò)中(包括互聯(lián)網(wǎng))傳遞、管理信息的一些規(guī)范

與HTTP相關(guān)組件

網(wǎng)絡(luò)設(shè)計(jì)者以分層(layer)的方式組織協(xié)議,每個(gè)協(xié)議屬于層次模型之一。每一層都是向它的上一層提供服務(wù)(service),即所謂的服務(wù)模型(service model)。每個(gè)分層中所有的協(xié)議稱為 協(xié)議棧(protocol stack)。因特網(wǎng)的協(xié)議棧由五個(gè)部分組成:物理層、鏈路層、網(wǎng)絡(luò)層、傳輸層和應(yīng)用層。我們采用自上而下的方法研究其原理,也就是應(yīng)用層 -> 物理層的方式(了解)。

應(yīng)用層

應(yīng)用層是網(wǎng)絡(luò)應(yīng)用程序和網(wǎng)絡(luò)協(xié)議存放的分層,因特網(wǎng)的應(yīng)用層包括許多協(xié)議。比如HTTP,電子郵件傳送協(xié)議 SMTP、端系統(tǒng)文件上傳協(xié)議 FTP、還有為我們進(jìn)行域名解析的 DNS 協(xié)議

傳輸層

輸層在應(yīng)用程序斷點(diǎn)之間傳送應(yīng)用程序報(bào)文,在這一層主要有兩種傳輸協(xié)議 TCP和 UDP。

TCP 是面向連接的,它能夠控制并確認(rèn)報(bào)文是否到達(dá),并提供了擁塞機(jī)制來控制網(wǎng)絡(luò)傳輸,因此當(dāng)網(wǎng)絡(luò)擁塞時(shí),會(huì)抑制其傳輸速率。

UDP 協(xié)議向它的應(yīng)用程序提供了無連接服務(wù)。它是不具備可靠性的,沒有流量控制,也沒有擁塞控制。我們把運(yùn)輸層的分組稱為 報(bào)文段(segment)

網(wǎng)絡(luò)層

網(wǎng)絡(luò)層負(fù)責(zé)將稱為 數(shù)據(jù)報(bào)(datagram) 的網(wǎng)絡(luò)分層從一臺(tái)主機(jī)移動(dòng)到另一臺(tái)主機(jī)。網(wǎng)絡(luò)層一個(gè)非常重要的協(xié)議是 IP 協(xié)議,所有具有網(wǎng)絡(luò)層的因特網(wǎng)組件都必須運(yùn)行 IP 協(xié)議。

鏈路層

為了將分組從一個(gè)節(jié)點(diǎn)(主機(jī)或路由器)運(yùn)輸?shù)搅硪粋€(gè)節(jié)點(diǎn),網(wǎng)絡(luò)層必須依靠鏈路層提供服務(wù)。鏈路層的例子包括以太網(wǎng)、WiFi 和電纜接入的 DOCSIS 協(xié)議,因?yàn)閿?shù)據(jù)從源目的地傳送通常需要經(jīng)過幾條鏈路,一個(gè)數(shù)據(jù)包可能被沿途不同的鏈路層協(xié)議處理,我們把鏈路層的分組稱為 幀(frame)。

物理層

雖然鏈路層的作用是將幀從一個(gè)端系統(tǒng)運(yùn)輸?shù)搅硪粋€(gè)端系統(tǒng),而物理層的作用是將幀中的一個(gè)個(gè) 比特 從一個(gè)節(jié)點(diǎn)運(yùn)輸?shù)搅硪粋€(gè)節(jié)點(diǎn),,物理層的協(xié)議仍然使用鏈路層協(xié)議,這些協(xié)議與實(shí)際的物理傳輸介質(zhì)有關(guān),例如,以太網(wǎng)有很多物理層協(xié)議:關(guān)于雙絞銅線、關(guān)于同軸電纜、關(guān)于光纖等等。

五層網(wǎng)絡(luò)協(xié)議的示意圖如下:

與HTTP相關(guān)協(xié)議

HTTP 屬于應(yīng)用層的協(xié)議,需要其他層次協(xié)議的配合完成信息的交換,在完成一次 HTTP 請(qǐng)求和響應(yīng)的過程中,需要以下協(xié)議的配合:

TCP/IP

TCP/IP 我們一般稱之為協(xié)議簇,什么意思呢?就是 TCP/IP 協(xié)議簇中不僅僅只有 TCP 協(xié)議和 IP 協(xié)議,它是一系列網(wǎng)絡(luò)通信協(xié)議的統(tǒng)稱。而其中最核心的兩個(gè)協(xié)議就是 TCP / IP 協(xié)議,其他的還有 UDP、ICMP、ARP 等等,共同構(gòu)成了一個(gè)復(fù)雜但有層次的協(xié)議棧。

TCP 協(xié)議的全稱是 Transmission Control Protocol 的縮寫,意思是傳輸控制協(xié)議,HTTP 使用 TCP 作為通信協(xié)議,這是因?yàn)?TCP 是一種可靠的協(xié)議,而可靠能保證數(shù)據(jù)不丟失。

IP 協(xié)議的全稱是 Internet Protocol 的縮寫,它主要解決的是通信雙方尋址的問題。IP 協(xié)議使用 IP 地址 來標(biāo)識(shí)互聯(lián)網(wǎng)上的每一臺(tái)計(jì)算機(jī)。

DNS

DNS 的全稱是域名系統(tǒng)(Domain Name System,縮寫:DNS),它作為將域名和 IP 地址相互映射的一個(gè)分布式數(shù)據(jù)庫,能夠使人更方便地訪問互聯(lián)網(wǎng)。比如:http://www.google.com -> http://193.XXX.XXX.XXX

URI / URL

可以通過輸入 http://www.google.com 地址來訪問谷歌的官網(wǎng),輸入的地址格式必須要滿足 URI 的規(guī)范。

URI的全稱是(Uniform Resource Identifier),中文名稱是統(tǒng)一資源標(biāo)識(shí)符,使用它就能夠唯一地標(biāo)記互聯(lián)網(wǎng)上資源。

URL的全稱是(Uniform Resource Locator),中文名稱是統(tǒng)一資源定位符,也就是我們俗稱的網(wǎng)址,它實(shí)際上是 URI 的一個(gè)子集。

HTTP報(bào)文

起始行和頭部字段并成為 請(qǐng)求頭 或者 響應(yīng)頭,統(tǒng)稱為 Header;消息正文也叫做實(shí)體,稱為 body。HTTP 協(xié)議規(guī)定每次發(fā)送的報(bào)文必須要有 Header,但是可以沒有 body,在 header 和 body 之間必須要有一個(gè)空行(CRLF)。

舉個(gè)例子:
http://www.someSchool.edu/someDepartment/home.index 請(qǐng)求的請(qǐng)求頭:

報(bào)文的起始行都是由三個(gè)字段組成:方法、URL 字段和 HTTP 版本字段

HTTP 請(qǐng)求方法

一般最常用的方法也就是 GET 方法和 POST 方法,其他方法暫時(shí)了解即可。

HTTP 請(qǐng)求 URL

完整的域名解析一下 URL:
http://www.example.com:80/path/to/myfile.html?key1=value1&key2=value2#SomewhereInTheDocument

?key1=value1&key2=value2 是提供給 Web 服務(wù)器的額外參數(shù)。如果是 GET 請(qǐng)求,一般帶有請(qǐng)求 URL 參數(shù),如果是 POST 請(qǐng)求,則不會(huì)在路徑后面直接加參數(shù)。

請(qǐng)求頭部

比如
http://www.someSchool.edu/someDepartment/home.index,來看一下它的請(qǐng)求頭部

Host: www.someschool.eduConnection: closeUser-agent: Mozilla/5.0Accept-language: fr復(fù)制代碼HTTP 的請(qǐng)求標(biāo)頭分為四種: 通用標(biāo)頭、請(qǐng)求標(biāo)頭、響應(yīng)標(biāo)頭 和 實(shí)體標(biāo)頭

通用標(biāo)頭

通用標(biāo)頭主要有三個(gè),分別是 Date、Cache-Control 和 Connection Date

Date 出現(xiàn)在請(qǐng)求標(biāo)頭和響應(yīng)標(biāo)頭中,它的基本表示如下

Date: Wed, 21 Oct 2015 07:28:00 GMT 復(fù)制代碼Cache-Control

Cache-Control 可以出現(xiàn)在請(qǐng)求標(biāo)頭和響應(yīng)標(biāo)頭中,Cache-Control 的種類比較多,雖然說這是一個(gè)通用標(biāo)頭,但是又一些特性是請(qǐng)求標(biāo)頭具有的,有一些是響應(yīng)標(biāo)頭才有的。主要大類有 可緩存性、閾值性、 重新驗(yàn)證并重新加載 和其他特性

Connection

Connection 決定當(dāng)前事務(wù)(一次三次握手和四次揮手)完成后,是否會(huì)關(guān)閉網(wǎng)絡(luò)連接。Connection 有兩種,一種是持久性連接,即一次事務(wù)完成后不關(guān)閉網(wǎng)絡(luò)連接

Connection: keep-alive復(fù)制代碼復(fù)制代碼另一種是非持久性連接,即一次事務(wù)完成后關(guān)閉網(wǎng)絡(luò)連接

Connection: close復(fù)制代碼

實(shí)體標(biāo)頭

實(shí)體標(biāo)頭是描述消息正文內(nèi)容的 HTTP 標(biāo)頭。實(shí)體標(biāo)頭用于 HTTP 請(qǐng)求和響應(yīng)中。頭部Content-Length、 Content-Language、 Content-Encoding 是實(shí)體頭。

Content-Language: de-DEContent-Language: en-USContent-Language: de-DE, en-CA復(fù)制代碼復(fù)制代碼Accept-Encoding: gzip, deflate //請(qǐng)求頭Content-Encoding: gzip //響應(yīng)頭復(fù)制代碼

請(qǐng)求標(biāo)頭

GET /home.html HTTP/1.1Host: developer.mozilla.orgUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.9; rv:50.0) Gecko/20100101 Firefox/50.0Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8Accept-Language: en-US,en;q=0.5Accept-Encoding: gzip, deflate, brReferer: https://developer.mozilla.org/testpage.htmlConnection: keep-aliveUpgrade-Insecure-Requests: 1If-Modified-Since: Mon, 18 Jul 2016 02:36:04 GMTIf-None-Match: "c561c68d0ba92bbeb8b0fff2a9199f722e3a621a"Cache-Control: max-age=0 復(fù)制代碼Host

Host 請(qǐng)求頭指明了服務(wù)器的域名,以及(可選的)服務(wù)器監(jiān)聽的TCP端口號(hào)

Referer

HTTP Referer 屬性是請(qǐng)求標(biāo)頭的一部分,告訴服務(wù)器該網(wǎng)頁是從哪個(gè)頁面鏈接過來的

If-Modified-Since

HTTP 的 If-Modified-Since 使其成為條件請(qǐng)求:

If-Modified-Since 通常會(huì)與 If-None-Match 搭配使用,If-Modified-Since 用于確認(rèn)代理或客戶端擁有的本地資源的有效性。獲取資源的更新日期時(shí)間,可通過確認(rèn)首部字段 Last-Modified 來確定。

大白話說就是如果在 Last-Modified 之后更新了服務(wù)器資源,那么服務(wù)器會(huì)響應(yīng)200,如果在 Last-Modified 之后沒有更新過資源,則返回 304。

If-Modified-Since: Mon, 18 Jul 2016 02:36:04 GMT復(fù)制代碼復(fù)制代碼If-None-Match

If-None-Match HTTP請(qǐng)求標(biāo)頭使請(qǐng)求成為條件請(qǐng)求。 對(duì)于 GET 和 HEAD 方法,僅當(dāng)服務(wù)器沒有與給定資源匹配的 ETag 時(shí),服務(wù)器才會(huì)以200狀態(tài)發(fā)送回請(qǐng)求的資源。 對(duì)于其他方法,僅當(dāng)最終現(xiàn)有資源的ETag與列出的任何值都不匹配時(shí),才會(huì)處理請(qǐng)求。

If-None-Match: "c561c68d0ba92bbeb8b0fff2a9199f722e3a621a"復(fù)制代碼復(fù)制代碼

內(nèi)容協(xié)商

內(nèi)容協(xié)商機(jī)制是指客戶端和服務(wù)器端就響應(yīng)的資源內(nèi)容進(jìn)行交涉,然后提供給客戶端最為適合的資源。內(nèi)容協(xié)商會(huì)以響應(yīng)資源的語言、字符集、編碼方式等作為判斷的標(biāo)準(zhǔn)。

內(nèi)容協(xié)商主要有以下3種類型:

這種協(xié)商方式是由服務(wù)器端進(jìn)行內(nèi)容協(xié)商。服務(wù)器端會(huì)根據(jù)請(qǐng)求首部字段進(jìn)行自動(dòng)處理

這種協(xié)商方式是由客戶端來進(jìn)行內(nèi)容協(xié)商。

是服務(wù)器驅(qū)動(dòng)和客戶端驅(qū)動(dòng)的結(jié)合體,是由服務(wù)器端和客戶端各自進(jìn)行內(nèi)容協(xié)商的一種方法。

內(nèi)容協(xié)商的分類有很多種,主要的幾種類型是 Accept、Accept-Charset、Accept-Encoding、Accept-Language、Content-Language。

Accept

接受請(qǐng)求 HTTP 標(biāo)頭會(huì)通告客戶端其能夠理解的 MIME 類型

MIME: MIME (Multipurpose Internet Mail Extensions) 是描述消息內(nèi)容類型的因特網(wǎng)標(biāo)準(zhǔn)。MIME 消息能包含文本、圖像、音頻、視頻以及其他應(yīng)用程序?qū)S玫臄?shù)據(jù)。復(fù)制代碼文本文件: text/html、text/plain、text/css、application/xhtml+xml、application/xml

圖片文件: image/jpeg、image/gif、image/png

視頻文件: video/mpeg、video/quicktime

應(yīng)用程序二進(jìn)制文件: application/octet-stream、application/zip

比如,如果瀏覽器不支持 PNG 圖片的顯示,那 Accept 就不指定image/png,而指定可處理的 image/gif 和 image/jpeg 等圖片類型。

一般 MIME 類型也會(huì)和 q 這個(gè)屬性一起使用,q 是什么?q 表示的是權(quán)重,來看一個(gè)例子

Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8復(fù)制代碼若想要給顯示的媒體類型增加優(yōu)先級(jí),則使用 q= 來額外表示權(quán)重值,沒有顯示權(quán)重的時(shí)候默認(rèn)值是1.0。

Accept-Charset

accept-charset 屬性規(guī)定服務(wù)器處理表單數(shù)據(jù)所接受的字符集。

accept-charset 屬性允許您指定一系列字符集,服務(wù)器必須支持這些字符集,從而得以正確解釋表單中的數(shù)據(jù)。

Accept-Language

首部字段 Accept-Language 用來告知服務(wù)器用戶代理能夠處理的自然語言集(指中文或英文等),以及自然語言集的相對(duì)優(yōu)先級(jí)。

Accept-Language: en-US,en;q=0.5復(fù)制代碼

響應(yīng)標(biāo)頭

響應(yīng)標(biāo)頭是可以在 HTTP 響應(yīng)中使用的 HTTP 標(biāo)頭。并不是所有出現(xiàn)在響應(yīng)中的標(biāo)頭都是響應(yīng)標(biāo)頭。還有一些特殊的我們上面說過,有通用標(biāo)頭和實(shí)體標(biāo)頭也會(huì)出現(xiàn)在響應(yīng)標(biāo)頭中,比如 Content-Length 就是一個(gè)實(shí)體標(biāo)頭,但是,在這種情況下,這些實(shí)體請(qǐng)求通常稱為響應(yīng)頭。下面以一個(gè)例子為例和你探討一下響應(yīng)頭

200 OKAccess-Control-Allow-Origin: *Connection: Keep-AliveContent-Encoding: gzipContent-Type: text/html; charset=utf-8Date: Mon, 18 Jul 2016 16:06:00 GMTEtag: "c561c68d0ba92bbeb8b0f612a9199f722e3a621a"Keep-Alive: timeout=5, max=997Last-Modified: Mon, 18 Jul 2016 02:36:04 GMTServer: ApacheSet-Cookie: mykey=myvalue; expires=Mon, 17-Jul-2017 16:06:00 GMT; Max-Age=31449600; Path=/; secureTransfer-Encoding: chunkedVary: Cookie, Accept-Encodingx-frame-options: DENY復(fù)制代碼響應(yīng)狀態(tài)碼

以 2xx 為開頭的都表示請(qǐng)求成功響應(yīng)。

以 3xx 為開頭的都表示需要進(jìn)行附加操作以完成請(qǐng)求

以 4xx 的響應(yīng)結(jié)果表明客戶端是發(fā)生錯(cuò)誤的原因所在。

以 5xx 為開頭的響應(yīng)標(biāo)頭都表示服務(wù)器本身發(fā)生錯(cuò)誤

HTTP協(xié)議優(yōu)缺點(diǎn)

HTTP 的優(yōu)點(diǎn)

HTTP 的協(xié)議比較簡單,它的主要組成就是 header + body,頭部信息也是簡單的文本格式

HTTP 協(xié)議又多了靈活 和 易擴(kuò)展 的優(yōu)點(diǎn)。

HTTP 協(xié)議里的請(qǐng)求方法、URI、狀態(tài)碼、原因短語、頭字段等每一個(gè)核心組成要素都沒有被制定死,允許開發(fā)者任意定制、擴(kuò)充或解釋,給予了瀏覽器和服務(wù)器最大程度的信任和自由。

天然具有跨語言、跨平臺(tái)的優(yōu)越性,而且,因?yàn)楸旧淼暮唵翁匦院苋菀讓?shí)現(xiàn),所以幾乎所有的編程語言都有 HTTP 調(diào)用庫和外圍的開發(fā)測試工具

既是優(yōu)點(diǎn)又是缺點(diǎn)。因?yàn)榉?wù)器沒有記憶能力,所以就不需要額外的資源來記錄狀態(tài)信息,不僅實(shí)現(xiàn)上會(huì)簡單一些,而且還能減輕服務(wù)器的負(fù)擔(dān),能夠把更多的 CPU 和內(nèi)存用來對(duì)外提供服務(wù)。

HTTP 的缺點(diǎn)

服務(wù)器沒有記憶能力,它就無法支持需要連續(xù)多個(gè)步驟的事務(wù)操作。每次都得問一遍身份信息,需要增加了不必要的數(shù)據(jù)傳輸量。由此出現(xiàn)了 Cookie 技術(shù)。

明文傳輸,協(xié)議里的報(bào)文(準(zhǔn)確地說是 header 部分)不使用二進(jìn)制數(shù)據(jù),而是用簡單可閱讀的文本形式。

對(duì)比 TCP、UDP 這樣的二進(jìn)制協(xié)議,它的優(yōu)點(diǎn)顯而易見,不需要借助任何外部工具,用瀏覽器、Wireshark 或者 tcpdump 抓包后,直接用肉眼就可以很容易地查看或者修改,為我們的開發(fā)調(diào)試工作帶來極大的便利。

當(dāng)然缺點(diǎn)也是顯而易見的,就是不安全,可以被監(jiān)聽和被窺探。因?yàn)闊o法判斷通信雙方的身份,不能判斷報(bào)文是否被更改過。

總結(jié)起來即:

  1. 明文,請(qǐng)求報(bào)文未加密;
  2. 未hash,即使報(bào)文被修改過也不知道;
  3. 未驗(yàn)證身份,容易導(dǎo)致中間人攻擊;

作者:captain_p
鏈接:https://juejin.cn/post/7041744237905346568

如果本文對(duì)你有幫助,麻煩點(diǎn)贊關(guān)注支持一下

關(guān)鍵詞:協(xié)議,詳細(xì)

74
73
25
news

版權(quán)所有? 億企邦 1997-2025 保留一切法律許可權(quán)利。

為了最佳展示效果,本站不支持IE9及以下版本的瀏覽器,建議您使用谷歌Chrome瀏覽器。 點(diǎn)擊下載Chrome瀏覽器
關(guān)閉