2021-03-12 分類: 網(wǎng)站建設(shè)
理解HTTP對(duì)于Web開發(fā)者人員至關(guān)重要,因?yàn)樗龠M(jìn)了Web應(yīng)用程序中的信息流動(dòng) —— 允許更好的用戶交互和改進(jìn)了站點(diǎn)性能。
在客戶端-服務(wù)器模型中,客戶端和服務(wù)器以“請(qǐng)求-響應(yīng)”消息模式交換消息:客戶端發(fā)送一個(gè)請(qǐng)求,服務(wù)器返回響應(yīng)。
跟蹤這些消息比聽起來要復(fù)雜得多,因此客戶端和服務(wù)器遵循一種公共的語言和規(guī)則集,這樣他們就知道該怎么做了。這個(gè)語言或“協(xié)議”被叫做HTTP。
HTTP協(xié)議定義了語法(數(shù)據(jù)結(jié)構(gòu)和編碼)、語義(與語法相關(guān)的含義)和時(shí)間(速度和排序)。每一次在客戶端和服務(wù)端的HTTP請(qǐng)求和響應(yīng)被看做一個(gè)單一的HTTP事務(wù)。
在深入了解細(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ī)器的請(qǐng)求和響應(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請(qǐng)求或響應(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è)特殊的端口號(hào):443 來表明是否需要TLS/SSL連接。一旦客戶端和服務(wù)端同意使用TLS/SSL通信,它們通過執(zhí)行被叫做“TLS握手協(xié)議”來協(xié)商一個(gè)有狀態(tài)的通信??蛻舳撕头?wù)端之后會(huì)建立會(huì)話密鑰,它們可以在彼此交互時(shí)使用這個(gè)密鑰加密和解密信息。
許多像Google和Facebook的主要網(wǎng)站使用THTPS,畢竟它能保證你的密碼、私人信息、信用卡信息在網(wǎng)絡(luò)上安全。
有了這些基礎(chǔ)知識(shí),讓我們深入了解HTTP的結(jié)構(gòu)。
我們可以先通過訪問 https://www.github.com 來與 Github 服務(wù)器進(jìn)行通信。如果你使用的是安裝了 Firebug 拓展程序的谷歌或者火狐瀏覽器,你可以通過“網(wǎng)絡(luò)”選項(xiàng)卡來查看HTTP請(qǐng)求的詳細(xì)信息。如果你打開了這個(gè)網(wǎng)站,然后訪問 www.github.com 在地址欄輸入它,你應(yīng)該看到像這樣的東西:
然后在左邊的面板,點(diǎn)擊第一個(gè)路徑, “github.com”。你現(xiàn)在應(yīng)該看到這個(gè):
HTTP 頭部主要包含元數(shù)據(jù)(關(guān)于數(shù)據(jù)的數(shù)據(jù))。元數(shù)據(jù)包含請(qǐng)求類型(GET vs POST vs PUT VS DELETE)、路徑、狀態(tài)碼,內(nèi)容類型、用戶代理、cookie、post主體(有時(shí)),等等。
讓我們深入了解使用 Github 最重要的部分,從“響應(yīng)頭”一節(jié)開始:
Request URL:https://githu?b.com/
我們請(qǐng)求的URL
Request Method:GET
使用HTTP方法的類型。在我們的案列中,我們的瀏覽器說:“嘿,Github 的瀏覽器,帶我到你的主頁?!?/p>
Status Code:200 OK
一種標(biāo)準(zhǔn)化的方式,服務(wù)器告訴客戶端請(qǐng)求的結(jié)果。狀態(tài)碼200意味著服務(wù)器成功的找到了資源,并且把它發(fā)送給你。
Remote Address:192.30.252.129:443
我們?cè)L問的 Github 網(wǎng)站的 IP 地址和端口號(hào)。注意,它是端口443(這意味著我們正在用 HTTPS 而不是 HTTP)。
Content-Encoding:gzip
我們收到的返回資源的編碼。在我們的案例中, Github 的服務(wù)器告訴我們,它發(fā)送返回的內(nèi)容是壓縮過的。Github可能會(huì)壓縮文件,這樣你就可以有更快的下載時(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)。看看下面的“請(qǐ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ù)器可以存儲(chǔ)在用戶機(jī)器上的一段文本,然后再進(jìn)行檢索。信息以名稱-值對(duì)儲(chǔ)存。例如,Github為我的請(qǐng)求儲(chǔ)存的一個(gè)名稱-值對(duì)是“dotcom_user=iam-peekay”,這告訴 Github 我的用戶名是“iam-peekay”。
長話短說,我們留下了很多名稱-值對(duì),但是這些名稱-值對(duì)是如何被創(chuàng)建的呢?
無論什么時(shí)候,你瀏覽一個(gè)網(wǎng)站,它會(huì)在你的電腦上找到一個(gè)網(wǎng)站提前設(shè)置的cookie文件。
因此如我我正在瀏覽 www.github.com, 我的瀏覽器將會(huì)尋找 Github 已經(jīng)保存在我的硬盤中的cookie文件。如果他找到一個(gè) cookie 文件,它將會(huì)在響應(yīng)頭布發(fā)送所有的名稱-值對(duì)。
Github 的 web 服務(wù)器現(xiàn)在能夠用很多不同的方法使用這個(gè) cookie 數(shù)據(jù)。例如基于我儲(chǔ)存的用戶設(shè)定來呈現(xiàn)內(nèi)容,計(jì)算我訪問他們的網(wǎng)站的時(shí)間數(shù)量。
如果瀏覽器沒有發(fā)現(xiàn)cookie文件 —— 要么是因?yàn)檫@個(gè)網(wǎng)站在之前從來沒有被訪問過,要么因?yàn)橛脩羝帘位蛘邉h除了它 —— 瀏覽器不會(huì)發(fā)送任何cookie數(shù)據(jù)。
在這個(gè)案列,Github 的服務(wù)器創(chuàng)建了一個(gè)新的 ID,作為名稱-值對(duì),與它想要的任何其他的名稱-值對(duì)一起,并且通過 HTTP 頭部發(fā)送到我的計(jì)算機(jī)上,然后我的計(jì)算機(jī)將它們儲(chǔ)存在硬盤里。
正如你上面所看的,服務(wù)器擁有與客戶端通信所需要的大部分重要的元數(shù)據(jù)(關(guān)于數(shù)據(jù)的數(shù)據(jù))。
現(xiàn)在到主體來。
不難猜到,主體是信息的主體?;谡?qǐng)求的類型,它可能是空的。
在我們的案例中,你可以看到 “Response” 選項(xiàng)卡的主體。因?yàn)槲覀儼l(fā)送了一個(gè) GET 請(qǐng)求到 www.github.com,, 它的主體包含 www.github.com, 的 HTML 頁面內(nèi)容。
當(dāng)然,這對(duì)顯示頁面是非常重要的。
我希望這能讓你更好的理解HTTP的結(jié)構(gòu)。在實(shí)踐中,當(dāng)你瀏覽 www.github.com 時(shí),你可以查看你的瀏覽器請(qǐng)求的所有其他的資源(圖片、javascripts 文件、等等)。
有了這一點(diǎn),讓我們看一下一個(gè)客戶端能夠發(fā)起的各種HTTP的方式。
HTTP動(dòng)詞或方法,告訴服務(wù)器如何處理被URL標(biāo)識(shí)的數(shù)據(jù)。URLs 綜合被標(biāo)記為特定的資源,當(dāng)客戶端使用一個(gè)URL與一個(gè)HTTP動(dòng)詞結(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)
當(dāng)前名稱:什么是http,http請(qǐng)求?
瀏覽地址:http://jinyejixie.com/news/105073.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供虛擬主機(jī)、品牌網(wǎng)站制作、搜索引擎優(yōu)化、網(wǎng)站營銷、動(dòng)態(tài)網(wǎng)站、建站公司
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容