什么是http,http請求?

2021-03-12    分類: 網(wǎng)站建設(shè)

理解HTTP對于Web開發(fā)者人員至關(guān)重要,因?yàn)樗龠M(jìn)了Web應(yīng)用程序中的信息流動 —— 允許更好的用戶交互和改進(jìn)了站點(diǎn)性能。

什么是http,http請求?

什么是 HTTP?

在客戶端-服務(wù)器模型中,客戶端和服務(wù)器以“請求-響應(yīng)”消息模式交換消息:客戶端發(fā)送一個(gè)請求,服務(wù)器返回響應(yīng)。

跟蹤這些消息比聽起來要復(fù)雜得多,因此客戶端和服務(wù)器遵循一種公共的語言和規(guī)則集,這樣他們就知道該怎么做了。這個(gè)語言或“協(xié)議”被叫做HTTP。

HTTP協(xié)議定義了語法(數(shù)據(jù)結(jié)構(gòu)和編碼)、語義(與語法相關(guān)的含義)和時(shí)間(速度和排序)。每一次在客戶端和服務(wù)端的HTTP請求和響應(yīng)被看做一個(gè)單一的HTTP事務(wù)。

HTTP 粗略描述

在深入了解細(xì)節(jié)之前,有一些關(guān)于HTTP的事情值得注意。

首先,HTTP是基于文本的,這意味著在客戶端和服務(wù)端交換的信息是一些文本。每一條信息包含兩個(gè)部分:頭部和主體。

其次,HTPP是一個(gè)應(yīng)用層協(xié)議,這意味著它只是一個(gè)標(biāo)準(zhǔn)化主機(jī)通信方式的抽象層。HTTP本身不能傳輸數(shù)據(jù)。它仍然依賴底層的TCP/IP協(xié)議來從一個(gè)機(jī)器得到另外一個(gè)機(jī)器的請求和響應(yīng)。

(提醒一下,TCP/IP是一個(gè)兩部分的系統(tǒng),是互聯(lián)網(wǎng)基礎(chǔ)的“控制系統(tǒng)”功能。更多TCP/IP內(nèi)容,查看第一部分

最后,你也許在你的瀏覽器地址欄看到過“HTTPS”協(xié)議,并且想知道HTTP和HTTP+“S”是否相同。簡短的回答是有點(diǎn),有輕微的差異。

一個(gè)簡單的HTTP請求或響應(yīng)是未加密的,并且容易受到各種類型的安全攻擊。另一方面,HTTPS是一個(gè)更加安全的通信,它使用加密來保證安全。它代表HTTP/TLS/SSL。

SSL是一個(gè)安全協(xié)議,它給予客戶端和服務(wù)端以一種安全的方式進(jìn)行網(wǎng)絡(luò)通信 —— 阻止監(jiān)聽和篡改 —— 當(dāng)信息在網(wǎng)絡(luò)中傳播時(shí)。

客戶端通常通過使用一個(gè)特殊的端口號:443 來表明是否需要TLS/SSL連接。一旦客戶端和服務(wù)端同意使用TLS/SSL通信,它們通過執(zhí)行被叫做“TLS握手協(xié)議”來協(xié)商一個(gè)有狀態(tài)的通信??蛻舳撕头?wù)端之后會建立會話密鑰,它們可以在彼此交互時(shí)使用這個(gè)密鑰加密和解密信息。

許多像Google和Facebook的主要網(wǎng)站使用THTPS,畢竟它能保證你的密碼、私人信息、信用卡信息在網(wǎng)絡(luò)上安全。

HTTP 細(xì)致描述

有了這些基礎(chǔ)知識,讓我們深入了解HTTP的結(jié)構(gòu)。

我們可以先通過訪問 https://www.github.com 來與 Github 服務(wù)器進(jìn)行通信。如果你使用的是安裝了 Firebug 拓展程序的谷歌或者火狐瀏覽器,你可以通過“網(wǎng)絡(luò)”選項(xiàng)卡來查看HTTP請求的詳細(xì)信息。如果你打開了這個(gè)網(wǎng)站,然后訪問 www.github.com 在地址欄輸入它,你應(yīng)該看到像這樣的東西:

什么是http,http請求?

然后在左邊的面板,點(diǎn)擊第一個(gè)路徑, “github.com”。你現(xiàn)在應(yīng)該看到這個(gè):

什么是http,http請求?

HTTP 請求頭

HTTP 頭部主要包含元數(shù)據(jù)(關(guān)于數(shù)據(jù)的數(shù)據(jù))。元數(shù)據(jù)包含請求類型(GET vs POST vs PUT VS DELETE)、路徑、狀態(tài)碼,內(nèi)容類型、用戶代理、cookie、post主體(有時(shí)),等等。

讓我們深入了解使用 Github 最重要的部分,從“響應(yīng)頭”一節(jié)開始:

  • Request URL:https://githu?b.com/

  • 我們請求的URL

  • Request Method:GET

  • 使用HTTP方法的類型。在我們的案列中,我們的瀏覽器說:“嘿,Github 的瀏覽器,帶我到你的主頁?!?/p>

  • Status Code:200 OK

  • 一種標(biāo)準(zhǔn)化的方式,服務(wù)器告訴客戶端請求的結(jié)果。狀態(tài)碼200意味著服務(wù)器成功的找到了資源,并且把它發(fā)送給你。

  • Remote Address:192.30.252.129:443

  • 我們訪問的 Github 網(wǎng)站的 IP 地址和端口號。注意,它是端口443(這意味著我們正在用 HTTPS 而不是 HTTP)。

  • Content-Encoding:gzip

  • 我們收到的返回資源的編碼。在我們的案例中, Github 的服務(wù)器告訴我們,它發(fā)送返回的內(nèi)容是壓縮過的。Github可能會壓縮文件,這樣你就可以有更快的下載時(shí)間。

  • Content-Type:text/HTML; charset=utf-8

  • 指定響應(yīng)主體的數(shù)據(jù)表現(xiàn),包括類型和子類型。類型描述了數(shù)據(jù)類型,子類型指定這種數(shù)據(jù)類型的特定格式。在我們的案列中,我們將文本以 HTML 的形式發(fā)送回來。

  • 第二部分指定HTML文檔的字符編碼。這通常是UTF-8,就像上圖的例子一樣。

還有一堆消息頭信息,客戶端必須發(fā)送這些信息,以便服務(wù)端能夠知道如何回應(yīng)。看看下面的“請求頭”部分:

  • User-Agent:Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36

  • 代表用戶進(jìn)行操作的軟件。有時(shí)候一個(gè)網(wǎng)站需要知道它是如何被瀏覽的。所以瀏覽器發(fā)送這個(gè)用戶代理字符串以便于服務(wù)器可以使用它來決定訪問網(wǎng)站的內(nèi)容。

  • Accept-Encoding:gzip, deflate, sdch

  • 指定瀏覽器愿意接受的內(nèi)容編碼。我們看到gzip被列出來了,這就是為什么Github的服務(wù)器能夠以gzip格式的向我們發(fā)送信息。

  • Accept-Language:en-US,en;q=0.8

  • 描述我們想要的網(wǎng)頁語言。在我們的案例中,“en” 代表英語。

  • Host:github.com

  • 自身說明 :)

  • Cookie:_octo=GH1.1.491617779.1446477115; logged_in=yes; dotcom_user=iam-peekay;_gh_sess=somethingFakesomething FakesomethingFakesomethingFakesomethingFakesomethingFakesomethingFakesomethingFake; user_session=FakesomethingFake somethingFakesomethingFakesomethingFake; _ga=9389479283749823749; tz=America%2FLos_Angeles

  • web服務(wù)器可以存儲在用戶機(jī)器上的一段文本,然后再進(jìn)行檢索。信息以名稱-值對儲存。例如,Github為我的請求儲存的一個(gè)名稱-值對是“dotcom_user=iam-peekay”,這告訴 Github 我的用戶名是“iam-peekay”。

這些名稱-值對是什么?

長話短說,我們留下了很多名稱-值對,但是這些名稱-值對是如何被創(chuàng)建的呢?

無論什么時(shí)候,你瀏覽一個(gè)網(wǎng)站,它會在你的電腦上找到一個(gè)網(wǎng)站提前設(shè)置的cookie文件。

因此如我我正在瀏覽 www.github.com, 我的瀏覽器將會尋找 Github 已經(jīng)保存在我的硬盤中的cookie文件。如果他找到一個(gè) cookie 文件,它將會在響應(yīng)頭布發(fā)送所有的名稱-值對。

Github 的 web 服務(wù)器現(xiàn)在能夠用很多不同的方法使用這個(gè) cookie 數(shù)據(jù)。例如基于我儲存的用戶設(shè)定來呈現(xiàn)內(nèi)容,計(jì)算我訪問他們的網(wǎng)站的時(shí)間數(shù)量。

如果瀏覽器沒有發(fā)現(xiàn)cookie文件 —— 要么是因?yàn)檫@個(gè)網(wǎng)站在之前從來沒有被訪問過,要么因?yàn)橛脩羝帘位蛘邉h除了它 —— 瀏覽器不會發(fā)送任何cookie數(shù)據(jù)。

在這個(gè)案列,Github 的服務(wù)器創(chuàng)建了一個(gè)新的 ID,作為名稱-值對,與它想要的任何其他的名稱-值對一起,并且通過 HTTP 頭部發(fā)送到我的計(jì)算機(jī)上,然后我的計(jì)算機(jī)將它們儲存在硬盤里。

HTTP 主體

正如你上面所看的,服務(wù)器擁有與客戶端通信所需要的大部分重要的元數(shù)據(jù)(關(guān)于數(shù)據(jù)的數(shù)據(jù))。

現(xiàn)在到主體來。

不難猜到,主體是信息的主體?;谡埱蟮念愋?,它可能是空的。

在我們的案例中,你可以看到 “Response” 選項(xiàng)卡的主體。因?yàn)槲覀儼l(fā)送了一個(gè) GET 請求到 www.github.com,, 它的主體包含 www.github.com, 的 HTML 頁面內(nèi)容。

什么是http,http請求?

當(dāng)然,這對顯示頁面是非常重要的。

附加練習(xí)

我希望這能讓你更好的理解HTTP的結(jié)構(gòu)。在實(shí)踐中,當(dāng)你瀏覽 www.github.com 時(shí),你可以查看你的瀏覽器請求的所有其他的資源(圖片、javascripts 文件、等等)。

什么是http,http請求?

有了這一點(diǎn),讓我們看一下一個(gè)客戶端能夠發(fā)起的各種HTTP的方式。

HTTP 方法

HTTP動詞或方法,告訴服務(wù)器如何處理被URL標(biāo)識的數(shù)據(jù)。URLs 綜合被標(biāo)記為特定的資源,當(dāng)客戶端使用一個(gè)URL與一個(gè)HTTP動詞結(jié)合使用時(shí),這將告訴服務(wù)器需要在哪個(gè)資源上執(zhí)行操作。

URL的示例包括:

  • GET http://www.exam?ple.com/users (get all users)

  • POST http://www.example.com/users/a-u?nique-id (create a new user)

  • PUT http://www.example.com/comments/a-uni?que-id (update a comment)

  • DELETE http://www.example.com/comments/a-un?ique-id (delete a comment)

新聞標(biāo)題:什么是http,http請求?
URL標(biāo)題:http://www.bm7419.com/news23/105073.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)、外貿(mào)網(wǎng)站建設(shè)網(wǎng)站收錄、網(wǎng)站內(nèi)鏈網(wǎng)站維護(hù)、動態(tài)網(wǎng)站

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)

網(wǎng)站托管運(yùn)營