HTTP協(xié)議詳細介紹
我們?nèi)粘I钪薪?jīng)常會使用瀏覽器訪問Web站點這個過程中到底發(fā)生了什么嗎?為什么我們在瀏覽器地址欄上面輸入要訪問的URL后就可以訪問到Web頁面呢?這幾乎是面試過程中的高頻問題。
簡單來說,當我們在瀏覽器地址欄上輸入要訪問的URL后,瀏覽器會分析出URL上面的域名,然后通過DNS服務(wù)器查詢出域名映射的IP地址,瀏覽器根據(jù)查詢到的IP地址與Web服務(wù)器進行通信,而通信的協(xié)議就是HTTP協(xié)議,以下就給大家詳細介紹HTTP協(xié)議。
一、HTTP簡介
1、簡介
HTTP超文本傳輸協(xié)議(HyperText Transfer Protocol)是一種用于分布式、協(xié)作式和超媒體信息系統(tǒng)的應(yīng)用層協(xié)議。HTTP是萬維網(wǎng)的數(shù)據(jù)通信的基礎(chǔ)。是一個屬于應(yīng)用層的面向?qū)ο蟮膮f(xié)議,由于其簡捷、快速的方式,適用于分布式超媒體信息系統(tǒng)。它于1990年提出,經(jīng)過幾年的使用與發(fā)展,得到不斷地完善和擴展,目前在WWW中使用的是HTTP/1.0的第六版。
2、HTTP協(xié)議特點
HTTP協(xié)議的主要特點可概括如下:
- 1.支持客戶/服務(wù)器模式。
- 2.簡單快速:客戶向服務(wù)器請求服務(wù)時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規(guī)定 了客戶與服務(wù)器聯(lián)系的類型不同。由于HTTP協(xié)議簡單,使得HTTP服務(wù)器的程序規(guī)模小,因而通信速度很快。
- 3.靈活:HTTP允許傳輸任意類型的數(shù)據(jù)對象。正在傳輸?shù)念愋陀蒀ontent-Type加以標記。
- 4.無連接:無連接的含義是限制每次連接只處理一個請求。服務(wù)器處理完客戶的請求,并收到客戶的應(yīng)答后,即斷開連接。采用這種方式可以節(jié)省傳輸時間。
- 5.無狀態(tài):HTTP協(xié)議是無狀態(tài)協(xié)議。無狀態(tài)是指協(xié)議對于事務(wù)處理沒有記憶能力。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息,則它必須重傳,這樣可能導致每次連接傳送的數(shù)據(jù)量增大。另一方面,在服務(wù)器不需要先前信息時它的應(yīng)答就較快。
3、作用
我們可以把這個HTTP通信過程類比成一個電話對話。當我們要打電話給某個人,首先要知道對方的電話號碼,然后進行撥號。打通電話后我們會進行對話,當然要對話肯定需要共同的語言,如果一個人說國語,而另一個人說英語,那肯定不能進行溝通。電話號碼相當于上面的IP地址,而共同語言相當于HTTP協(xié)議。
4、工作原理
(1) 客戶端連接到Web服務(wù)器
一個HTTP客戶端,通常是瀏覽器,與Web服務(wù)器的HTTP端口(默認為80)建立一個TCP套接字連接。例如,http://www.oakcms.cn。
(2) 發(fā)送HTTP請求
通過TCP套接字,客戶端向Web服務(wù)器發(fā)送一個文本的請求報文,一個請求報文由請求行、請求頭部、空行和請求數(shù)據(jù)4部分組成。
(3) 服務(wù)器接受請求并返回HTTP響應(yīng)
Web服務(wù)器解析請求,定位請求資源。服務(wù)器將資源復(fù)本寫到TCP套接字,由客戶端讀取。一個響應(yīng)由狀態(tài)行、響應(yīng)頭部、空行和響應(yīng)數(shù)據(jù)4部分組成。
(4) 釋放連接TCP連接
若connection 模式為close,則服務(wù)器主動關(guān)閉TCP連接,客戶端被動關(guān)閉連接,釋放TCP連接;若connection 模式為keepalive,則該連接會保持一段時間,在該時間內(nèi)可以繼續(xù)接收請求;
(5) 客戶端瀏覽器解析HTML內(nèi)容
客戶端瀏覽器首先解析狀態(tài)行,查看表明請求是否成功的狀態(tài)代碼。然后解析每一個響應(yīng)頭,響應(yīng)頭告知以下為若干字節(jié)的HTML文檔和文檔的字符集。客戶端瀏覽器讀取響應(yīng)數(shù)據(jù)HTML,根據(jù)HTML的語法對其進行格式化,并在瀏覽器窗口中顯示。
二、HTTP協(xié)議介紹
1、HTTP協(xié)議之URI
HTTP使用統(tǒng)一資源標識符
(Uniform Resource Identifiers, URI)來傳輸數(shù)據(jù)和建立連接。URL是一種特殊類型的URI,包含了用于查找某個資源的足夠的信息
URL,全稱是Uniform Resource Locator, 中文叫統(tǒng)一資源定位符
,是互聯(lián)網(wǎng)上用來標識某一處資源的地址。以下面這個URL為例,介紹下普通URL的各部分組成:
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
從上面的URL可以看出,一個完整的URL包括以下幾部分:
1.協(xié)議部分:該URL的協(xié)議部分為“http:”,這代表網(wǎng)頁使用的是HTTP協(xié)議。在Internet中可以使用多種協(xié)議,如HTTP,F(xiàn)TP等等本例中使用的是HTTP協(xié)議。在"HTTP"后面的“//”為分隔符
2.域名部分:該URL的域名部分為“www.aspxfans.com”。一個URL中,也可以使用IP地址作為域名使用
3.端口部分:跟在域名后面的是端口,域名和端口之間使用“:”作為分隔符。端口不是一個URL必須的部分,如果省略端口部分,將采用默認端口
4.虛擬目錄部分:從域名后的第一個“/”開始到最后一個“/”為止,是虛擬目錄部分。虛擬目錄也不是一個URL必須的部分。本例中的虛擬目錄是“/news/”
5.文件名部分:從域名后的最后一個“/”開始到“?”為止,是文件名部分,如果沒有“?”,則是從域名后的最后一個“/”開始到“#”為止,是文件部分,如果沒有“?”和“#”,那么從域名后的最后一個“/”開始到結(jié)束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一個URL必須的部分,如果省略該部分,則使用默認的文件名
6.錨部分:從“#”開始到最后,都是錨部分。本例中的錨部分是“name”。錨部分也不是一個URL必須的部分
7.參數(shù)部分:從“?”開始到“#”為止之間的部分為參數(shù)部分,又稱搜索部分、查詢部分。本例中的參數(shù)部分為“boardID=5&ID=24618&page=1”。參數(shù)可以允許有多個參數(shù),參數(shù)與參數(shù)之間用“&”作為分隔符。
2、HTTP協(xié)議之請求
組成:
1.請求行
2.若干“頭部行”
3.實體主體(通常不用)
第一部分:請求行
GET /js/an.js HTTP/1.1
GET說明請求類型為GET,[js/an.js]為要訪問的資源,該行的最后一部分說明使用的是HTTP1.1版本。
第二部分:請求頭部
Accept:?*/*????????????????????????????????????#可接受的媒體類型???? Accept-Encoding:?gzip,?deflate????#可接受的編碼???? Accept-Language:?zh-cn??????????????#接受的語言???? Connection:?Keep-Alive???????????????#持久連接???? Host:?cache.soso.com?????????????????#Host???? Referer:?http://help.soso.com/?????#引用頁面???? User-Agent:?Mozilla/4.0?(compatible;?MSIE?6.0;?Windows?NT?5.1;?SV1;?.NET?CLR?2.0.50727;?InfoPath.2)??????????#用戶代理
注意:實體主體沒有,也必須要有空行。
3、HTTP協(xié)議之響應(yīng)
(1)響應(yīng)報文結(jié)構(gòu)
在接收和解釋請求消息后,服務(wù)器返回一個HTTP響應(yīng)消息。
響應(yīng)報文的開始行是狀態(tài)行:狀態(tài)行包括三項內(nèi)容,即 HTTP 的版本,狀態(tài)碼,以及解釋狀態(tài)碼的簡單短語。
HTTP響應(yīng)也是由三個部分組成,分別是:狀態(tài)行、頭部行、響應(yīng)正文。
(2)狀態(tài)碼
狀態(tài)代碼有三位數(shù)字組成,第一個數(shù)字定義了響應(yīng)的類別,且有五種可能取值:
1xx :表示通知信息的,如請求收到了或正在進行處理。
2xx:表示成功,如接受或知道了。
3xx :表示重定向,表示要完成請求還必須采取進一步的行動。
4xx :表示客戶端的差錯,如請求中有錯誤的語法或不能完成。
5xx :表示服務(wù)器的差錯,如服務(wù)器失效無法完成請求。
(3)常見狀態(tài)碼
200?OK??//客戶端請求成功 400?Bad?Request??//客戶端請求有語法錯誤,不能被服務(wù)器所理解 401?Unauthorized?//請求未經(jīng)授權(quán),這個狀態(tài)代碼必須和WWW-Authenticate報頭域一起使用 403?Forbidden?//服務(wù)器收到請求,但是拒絕提供服務(wù) 404 Not Found //請求資源不存在,eg:輸入了錯誤的URL 500?Internal?Server?Error??//服務(wù)器發(fā)生不可預(yù)期的錯誤 503?Server?Unavailable??//服務(wù)器當前不能處理客戶端的請求,一段時間后可能恢復(fù)正常
三、HTTP連接類型
1、連接類型
HTTP既可以使用非持久連接(nonpersistent connection),也可以使用持久連接(persistent connection)。HTTP/1.0使用非持久連接,HTTP/1.1默認使用持久連接。
持久連接情況下,服務(wù)器在發(fā)出響應(yīng)后讓TCP連接繼續(xù)打開著。同一對客戶/服務(wù)器之間的后續(xù)請求和響應(yīng)可以通過這個連接發(fā)送。
持久連接分為不帶流水線(without pipelining)和帶流水線(with pipelining)兩個版本。如果是不帶流水線的版本,那么客戶只在收到前一個請求的響應(yīng)后才發(fā)出新的請求。
2、區(qū)別
流水線方式和非流水線方式的區(qū)別:
流水線方式指沒有收到上一個請求的對象就發(fā)送新的對象的請求
非流水線方式指必須要等到上一個請求的對象到達之后再發(fā)送新的對象的請求
到此這篇關(guān)于HTTP協(xié)議的文章就介紹到這了。希望對大家的學習有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
git可視化工具Sourcetree使用全攻略(git沖突解決)
本文主要介紹了git可視化工具Sourcetree使用全攻略,文中通過圖文介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2023-01-01Quoted-printable 編碼介紹、Quoted-printable編碼解碼轉(zhuǎn)換方法
這篇文章主要介紹了Quoted-printable 編碼介紹、Quoted-printable編碼解碼轉(zhuǎn)換方法,需要的朋友可以參考下2016-06-06最新IntelliJ IDEA 2020.2永久激活碼(親測有效)
今天一大波朋友反饋idea2020激活碼失效的問題,小編快馬加鞭給大家找到解決方案,本文以IDEA 2020.2.4激活碼破解教程為例給大家詳細介紹,需要idea2020激活碼的朋友快來參考下本文吧2020-11-11關(guān)于Interlij 無法使用中文輸入法的解決方法(適用于Interlij全家桶 Linux環(huán)境)
這篇文章主要介紹了關(guān)于Interlij 無法使用中文輸入法的解決方法(適用于Interlij全家桶 Linux環(huán)境),本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2021-02-02網(wǎng)站統(tǒng)計中的數(shù)據(jù)收集原理及實現(xiàn)
目前主流的數(shù)據(jù)收集方式基本都是基于javascript的。本文將簡要分析這種數(shù)據(jù)收集的原理,并一步一步實際搭建一個實際的數(shù)據(jù)收集系統(tǒng)2013-09-09用asp與php實現(xiàn)百度ping服務(wù)的代碼
分別用asp與php實現(xiàn)百度ping服務(wù)的代碼,需要的朋友可以參考下2012-02-02idea2023連接gitee遠程倉庫的實現(xiàn)方法
在我們平時做項目的過程中,經(jīng)常會遇到分工合作,一起完成一個項目,就會借助其它的一些項目管理工具,來幫助我們更方便的開發(fā),本文主要介紹了idea2023連接gitee遠程倉庫的實現(xiàn)方法,感興趣的可以了解一下2024-01-01