http 詳解

何為http:

? ? ? 無狀態(tài)的超文本傳輸協(xié)議(HTTP盖灸,HyperText Transfer Protocol)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。所有的WWW文件都必須遵守這個(gè)標(biāo)準(zhǔn)。設(shè)計(jì)HTTP最初的目的是為了提供一種發(fā)布和接收HTML頁面的方法。

其主要的特點(diǎn):

http是屬于應(yīng)用層面向?qū)ο蟮膮f(xié)議偎球,由于其簡(jiǎn)捷、快速的方式辑甜,適用于分布式超媒體信息系統(tǒng)衰絮;

a) 支持客戶端/服務(wù)器模式;

b) 簡(jiǎn)單快捷磷醋,客戶在向服務(wù)器發(fā)送請(qǐng)求是只需要傳送請(qǐng)求方法和路徑猫牡,請(qǐng)求方法通常有GET,POST邓线,OPTIONS淌友,PUT,DELETE骇陈,CONNECT震庭,HEAD。由于http協(xié)議簡(jiǎn)單所以在服務(wù)器程序占用少你雌,因而通信速度很快器联。

c) 靈活二汛,http可以傳輸任意類型的數(shù)據(jù),正在傳輸?shù)臄?shù)據(jù)由content-type標(biāo)示拨拓。

d) 無連接肴颊,其意義在于其每次鏈接只處理一次請(qǐng)求,服務(wù)器處理完請(qǐng)求并接到應(yīng)答后便會(huì)斷開鏈接渣磷。這樣使其更加靈活快捷婿着。

e) 無狀態(tài):HTTP協(xié)議是無狀態(tài)協(xié)議。無狀態(tài)是指協(xié)議對(duì)于事務(wù)處理沒有記憶能力醋界。缺少狀態(tài)意味著如果后續(xù)處理需要前面的信息竟宋,則它必須重傳,這樣可能導(dǎo)致每次連接傳送的數(shù)據(jù)量增大物独。另一方面袜硫,在服務(wù)器不需要先前信息時(shí)它的應(yīng)答就較快。

url(統(tǒng)一資源定位符):

? ? ? http請(qǐng)求是通過url傳遞的挡篓,以此來定位請(qǐng)求到達(dá)的地址婉陷,其格式是:如http://www.brophp.com/book/index.html;

? ? ? http://:代表通過http超文本傳輸協(xié)議;

? ? ? ?www.brophp.com : 萬維域名(對(duì)應(yīng)一個(gè)完整的ip)是一個(gè)ip地址官研;

? ? ?book:服務(wù)器下的目錄秽澳;

? ? ?index.html:服務(wù)器book目錄下index.html文件(通常index.html為窗口文件);

? ? ?port:默認(rèn)端口為80戏羽,通常不需要手動(dòng)輸入担神,瀏覽器自動(dòng)解析;

http工作機(jī)制:

? ? ? http為一個(gè)無狀態(tài)的協(xié)議始花,一次請(qǐng)求為一次事務(wù)妄讯,客戶機(jī)和瀏覽器通過請(qǐng)求響應(yīng)即為一次會(huì)話,其工作過程粗分為四步:

? ? ? ?1)客戶機(jī)通過url建立鏈接酷宵。

? ? ? ?2)發(fā)送請(qǐng)求給服務(wù)器服務(wù)器亥贸。

? ? ? ?3)接收請(qǐng)求后給予響應(yīng)的數(shù)據(jù)。

? ? ? ?4)關(guān)閉連接浇垦。

而對(duì)于用戶來說炕置,只要點(diǎn)一下鼠標(biāo)就可以等待網(wǎng)頁的顯示(或者錯(cuò)誤提示);

如果使用Wireshark抓TCP男韧、http包朴摊,就可以清楚的看到其交互過程;

http工作機(jī)制-請(qǐng)求篇:

? ? ? HTTP通信機(jī)制是在一次完整的HTTP通信過程中此虑,嚴(yán)格來說Web瀏覽器與Web服務(wù)器之間將完成下列7個(gè)步驟:

(1)建立TCP連接

在HTTP

工作開始之前甚纲,Web瀏覽器首先要通過網(wǎng)絡(luò)與Web服務(wù)器建立連接,該連接是通過TCP來完成的朦前,該協(xié)議與IP協(xié)議共同構(gòu)建Internet贩疙,即著名的

TCP/IP協(xié)議族讹弯,因此Internet又被稱作是TCP/IP網(wǎng)絡(luò)。HTTP是比TCP更高層次的應(yīng)用層協(xié)議这溅,根據(jù)規(guī)則,只有低層協(xié)議建立之后才能棒仍,

才能進(jìn)行更層協(xié)議的連接悲靴,因此,首先要建立TCP連接莫其,一般TCP連接的端口號(hào)是80

(2)Web瀏覽器向Web服務(wù)器發(fā)送請(qǐng)求命令

一旦建立了TCP連接癞尚,Web瀏覽器就會(huì)向Web服務(wù)器發(fā)送請(qǐng)求命令

例如:GET/sample/hello.jsp HTTP/1.1

(3)Web瀏覽器發(fā)送請(qǐng)求頭信息

瀏覽器發(fā)送其請(qǐng)求命令之后,還要以頭信息的形式向Web服務(wù)器發(fā)送一些別的信息乱陡,之后瀏覽器發(fā)送了一空白行來通知服務(wù)器浇揩,它已經(jīng)結(jié)束了該頭信息的發(fā)送。

(4)Web服務(wù)器應(yīng)答

客戶機(jī)向服務(wù)器發(fā)出請(qǐng)求后憨颠,服務(wù)器會(huì)客戶機(jī)回送應(yīng)答胳徽,

HTTP/1.1 200 OK

應(yīng)答的第一部分是協(xié)議的版本號(hào)和應(yīng)答狀態(tài)碼

(5)Web服務(wù)器發(fā)送應(yīng)答頭信息

正如客戶端會(huì)隨同請(qǐng)求發(fā)送關(guān)于自身的信息一樣,服務(wù)器也會(huì)隨同應(yīng)答向用戶發(fā)送關(guān)于它自己的數(shù)據(jù)及被請(qǐng)求的文檔爽彤。

(6)Web服務(wù)器向?yàn)g覽器發(fā)送數(shù)據(jù)

Web服務(wù)器向?yàn)g覽器發(fā)送頭信息后养盗,它會(huì)發(fā)送一個(gè)空白行來表示頭信息的發(fā)送到此為結(jié)束,接著适篙,它就以Content-Type應(yīng)答頭信息所描述的格式發(fā)送用戶所請(qǐng)求的實(shí)際數(shù)據(jù)

(7)Web服務(wù)器關(guān)閉TCP連接

一般情況下往核,一旦Web服務(wù)器向?yàn)g覽器發(fā)送了請(qǐng)求數(shù)據(jù),它就要關(guān)閉TCP連接嚷节,然后如果瀏覽器或者服務(wù)器在其頭信息加入了這行代碼

Connection:keep-alive

TCP連接在發(fā)送后將仍然保持打開狀態(tài)聂儒,于是,瀏覽器可以繼續(xù)通過相同的連接發(fā)送請(qǐng)求硫痰。保持連接節(jié)省了為每個(gè)請(qǐng)求建立新連接所需的時(shí)間衩婚,還節(jié)約了網(wǎng)絡(luò)帶寬。


其完整格式為:

GET/sam.jspHTTP/1.1

Accept:text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost

User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)

Accept-Encoding:gzip,deflate

username=jinqiao&password=1234(請(qǐng)求體)碍论;

(1)請(qǐng)求方法URI協(xié)議/版本

請(qǐng)求的第一行是“方法URL議/版本”:GET/sample.jsp HTTP/1.1

以上代碼中“GET”代表請(qǐng)求方法谅猾,“/sample.jsp”表示URI,“HTTP/1.1代表協(xié)議和協(xié)議的版本鳍悠。

根據(jù)HTTP標(biāo)準(zhǔn)税娜,HTTP請(qǐng)求可以使用多種請(qǐng)求方法。例如:HTTP1.1支持7種請(qǐng)求方法:GET藏研、POST敬矩、HEAD、OPTIONS蠢挡、PUT弧岳、DELETE和TARCE凳忙。在Internet應(yīng)用中,最常用的方法是GET和POST禽炬。

URL完整地指定了要訪問的網(wǎng)絡(luò)資源涧卵,通常只要給出相對(duì)于服務(wù)器的根目錄的相對(duì)目錄即可,因此總是以“/”開頭腹尖,最后柳恐,協(xié)議版本聲明了通信過程中使用HTTP的版本。

(2) 請(qǐng)求頭(Request Header)

請(qǐng)求頭包含許多有關(guān)的客戶端環(huán)境和請(qǐng)求正文的有用信息热幔。例如乐设,請(qǐng)求頭可以聲明瀏覽器所用的語言,請(qǐng)求正文的長(zhǎng)度等绎巨。

Accept:image/gif.image/jpeg.*/*

Accept-Language:zh-cn

Connection:Keep-Alive

Host:localhost

User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)

Accept-Encoding:gzip,deflate.

(3) 請(qǐng)求正文

請(qǐng)求頭和請(qǐng)求正文之間是一個(gè)空行近尚,這個(gè)行非常重要,它表示請(qǐng)求頭已經(jīng)結(jié)束场勤,接下來的是請(qǐng)求正文戈锻。請(qǐng)求正文中可以包含客戶提交的查詢字符串信息:

username=jinqiao&password=1234

在以上的例子的HTTP請(qǐng)求中,請(qǐng)求的正文只有一行內(nèi)容却嗡。當(dāng)然舶沛,在實(shí)際應(yīng)用中,HTTP請(qǐng)求正文可以包含更多的內(nèi)容窗价。

HTTP請(qǐng)求方法我這里只討論GET方法與POST方法

lGET方法

GET方法是默認(rèn)的HTTP請(qǐng)求方法如庭,我們?nèi)粘S肎ET方法來提交表單數(shù)據(jù),然而用GET方法提交的表單數(shù)據(jù)只經(jīng)過了簡(jiǎn)單的編碼撼港,同時(shí)它將作為URL的一部分向Web服務(wù)器發(fā)送坪它,因此,如果使用GET方法來提交表單數(shù)據(jù)就存在著安全隱患上帝牡。例如

Http://127.0.0.1/login.jsp?Name=zhangshi&Age=30&Submit=%cc%E+%BD%BB

從上面的URL請(qǐng)求中往毡,很容易就可以辯認(rèn)出表單提交的內(nèi)容。(靶溜?之后的內(nèi)容)另外由于GET方法提交的數(shù)據(jù)是作為URL請(qǐng)求的一部分所以提交的數(shù)據(jù)量不能太大(權(quán)威說法IE默認(rèn)2083开瞭,經(jīng)過實(shí)際測(cè)試在IE8 下的URL地址總長(zhǎng)度為:4076,在firefox 25下的URL地址總長(zhǎng)度可以達(dá)到:7530罩息,在chrome 29.0.1547.62 的最大總長(zhǎng)度達(dá)到:7675)


lPOST方法

POST

方法是GET方法的一個(gè)替代方法嗤详,它主要是向Web服務(wù)器提交表單數(shù)據(jù),尤其是大批量的數(shù)據(jù)瓷炮。POST方法克服了GET方法的一些缺點(diǎn)葱色。通過POST方法

提交表單數(shù)據(jù)時(shí),數(shù)據(jù)不是作為URL請(qǐng)求的一部分而是作為標(biāo)準(zhǔn)數(shù)據(jù)傳送給Web服務(wù)器娘香,這就克服了GET方法中的信息無法保密和數(shù)據(jù)量太小的缺點(diǎn)苍狰。因此办龄,

出于安全的考慮以及對(duì)用戶隱私的尊重,通常表單提交時(shí)采用POST方法淋昭。

從編程的角度來講俐填,如果用戶通過GET方法提交數(shù)據(jù),則數(shù)據(jù)存放在QUERY_STRING環(huán)境變量中响牛,而POST方法提交的數(shù)據(jù)則可以從標(biāo)準(zhǔn)輸入流中獲取玷禽。

HTTP應(yīng)答與HTTP請(qǐng)求相似,HTTP響應(yīng)也由3個(gè)部分構(gòu)成呀打,分別是:

l 協(xié)議狀態(tài)版本代碼描述

l 響應(yīng)頭(Response Header)

l 響應(yīng)正文

下面是一個(gè)HTTP響應(yīng)的例子:

HTTP/1.1 200 OK

Server:Apache Tomcat/5.0.12

Date:Mon,6Oct2003 13:23:42 GMT

Content-Length:112

HTTP響應(yīng)示例<title>

Hello HTTP!

協(xié)議狀態(tài)代碼描述HTTP響應(yīng)的第一行類似于HTTP請(qǐng)求的第一行,它表示通信所用的協(xié)議是HTTP1.1服務(wù)器已經(jīng)成功的處理了客戶端發(fā)出的請(qǐng)求(200表示成功):

HTTP/1.1 200 OK

響應(yīng)頭(Response Header)響應(yīng)頭也和請(qǐng)求頭一樣包含許多有用的信息糯笙,例如服務(wù)器類型贬丛、日期時(shí)間、內(nèi)容類型和長(zhǎng)度等:

Server:Apache Tomcat/5.0.12

Date:Mon,6Oct2003 13:13:33 GMT

Content-Type:text/html

Last-Moified:Mon,6 Oct 2003 13:23:42 GMT

Content-Length:112

響應(yīng)正文響應(yīng)正文就是服務(wù)器返回的HTML頁面:

HTTP響應(yīng)示例<title>

Hello HTTP!

響應(yīng)頭和正文之間也必須用空行分隔给涕。

lHTTP應(yīng)答碼

HTTP應(yīng)答碼也稱為狀態(tài)碼豺憔,它反映了Web服務(wù)器處理HTTP請(qǐng)求狀態(tài)。HTTP應(yīng)答碼由3位數(shù)字構(gòu)成够庙,其中首位數(shù)字定義了應(yīng)答碼的類型:

1XX-信息類(Information),表示收到Web瀏覽器請(qǐng)求恭应,正在進(jìn)一步的處理中

2XX-成功類(Successful),表示用戶請(qǐng)求被正確接收,理解和處理例如:200 OK

3XX-重定向類(Redirection),表示請(qǐng)求沒有成功耘眨,客戶必須采取進(jìn)一步的動(dòng)作昼榛。

4XX-客戶端錯(cuò)誤(Client Error),表示客戶端提交的請(qǐng)求有錯(cuò)誤 例如:404 NOT

Found剔难,意味著請(qǐng)求中所引用的文檔不存在胆屿。

5XX-服務(wù)器錯(cuò)誤(Server Error)表示服務(wù)器不能完成對(duì)請(qǐng)求的處理:如 500

對(duì)于我們Web開發(fā)人員來說掌握HTTP應(yīng)答碼有助于提高Web應(yīng)用程序調(diào)試的效率和準(zhǔn)確性。

好了偶宫,http就到這里把非迹,如果真是搞網(wǎng)絡(luò)的應(yīng)該繼續(xù)深挖下去!這方面真的很深纯趋,還是那句話憎兽,人的精力是有限的,如果不是真正搞網(wǎng)絡(luò)的吵冒,了解一下知道怎么回事就可以了纯命,把主要的精力用在自己的專業(yè)上把!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末桦锄,一起剝皮案震驚了整個(gè)濱河市扎附,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌结耀,老刑警劉巖留夜,帶你破解...
    沈念sama閱讀 221,273評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件匙铡,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡碍粥,警方通過查閱死者的電腦和手機(jī)鳖眼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,349評(píng)論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來嚼摩,“玉大人钦讳,你說我怎么就攤上這事≌砻妫” “怎么了愿卒?”我有些...
    開封第一講書人閱讀 167,709評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)潮秘。 經(jīng)常有香客問我琼开,道長(zhǎng),這世上最難降的妖魔是什么枕荞? 我笑而不...
    開封第一講書人閱讀 59,520評(píng)論 1 296
  • 正文 為了忘掉前任柜候,我火速辦了婚禮,結(jié)果婚禮上躏精,老公的妹妹穿的比我還像新娘渣刷。我一直安慰自己,他們只是感情好矗烛,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,515評(píng)論 6 397
  • 文/花漫 我一把揭開白布辅柴。 她就那樣靜靜地躺著,像睡著了一般高诺。 火紅的嫁衣襯著肌膚如雪碌识。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,158評(píng)論 1 308
  • 那天虱而,我揣著相機(jī)與錄音筏餐,去河邊找鬼。 笑死牡拇,一個(gè)胖子當(dāng)著我的面吹牛魁瞪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播惠呼,決...
    沈念sama閱讀 40,755評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼导俘,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了剔蹋?” 一聲冷哼從身側(cè)響起旅薄,我...
    開封第一講書人閱讀 39,660評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后少梁,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體洛口,經(jīng)...
    沈念sama閱讀 46,203評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,287評(píng)論 3 340
  • 正文 我和宋清朗相戀三年凯沪,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了第焰。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,427評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡妨马,死狀恐怖挺举,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情烘跺,我是刑警寧澤湘纵,帶...
    沈念sama閱讀 36,122評(píng)論 5 349
  • 正文 年R本政府宣布,位于F島的核電站滤淳,受9級(jí)特大地震影響瞻佛,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜娇钱,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,801評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望绊困。 院中可真熱鬧文搂,春花似錦、人聲如沸秤朗。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,272評(píng)論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽取视。三九已至硝皂,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間作谭,已是汗流浹背稽物。 一陣腳步聲響...
    開封第一講書人閱讀 33,393評(píng)論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留折欠,地道東北人贝或。 一個(gè)月前我還...
    沈念sama閱讀 48,808評(píng)論 3 376
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像锐秦,于是被迫代替她去往敵國和親咪奖。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,440評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容

  • 一酱床、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,372評(píng)論 6 152
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理羊赵,服務(wù)發(fā)現(xiàn),斷路器扇谣,智...
    卡卡羅2017閱讀 134,693評(píng)論 18 139
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng)昧捷,內(nèi)容來源于博客園作者M(jìn)IN飛翔的HTTP協(xié)...
    Sivin閱讀 5,226評(píng)論 3 82
  • HTTP概述 超文本傳輸協(xié)議(HTTP闲昭,HyperText Transfer Protocol) 是互聯(lián)網(wǎng)上應(yīng)用最...
    曹淵說創(chuàng)業(yè)閱讀 3,855評(píng)論 2 61
  • 本篇文章篇幅比較長(zhǎng),先來個(gè)思維導(dǎo)圖預(yù)覽一下料身。 一汤纸、概述 1.計(jì)算機(jī)網(wǎng)絡(luò)體系結(jié)構(gòu)分層 2.TCP/IP 通信傳輸流 ...
    滌生_Woo閱讀 55,044評(píng)論 24 557