前端須知的簡(jiǎn)單HTTP原理

在做web前端開發(fā)時(shí),我們必須要知道客戶端和服務(wù)端是如何通信的,通俗簡(jiǎn)單點(diǎn)就是? 請(qǐng)求(客戶端)? R11 > 響應(yīng)

(服務(wù)端)的過程,可是客戶端又是如何向服務(wù)端如何請(qǐng)求的呢?而服務(wù)端又是如何響應(yīng)的呢,響應(yīng)的信息又是不是我們想要的呢?帶著問題往下看吧。

HTTP(HyperText TransferProtocol)是一套計(jì)算機(jī)通過網(wǎng)絡(luò)進(jìn)行通信的規(guī)則。計(jì)算機(jī)專家設(shè)計(jì)出HTTP,使HTTP客戶(如Web瀏覽器)能夠從HTTP服務(wù)器(Web服務(wù)器)請(qǐng)求信息和服務(wù),HTTP協(xié)議目前的版本是1.1.HTTP是一種無(wú)狀態(tài)的協(xié)議,無(wú)狀態(tài)是指Web瀏覽器和Web服務(wù)器之間不需要建立持久的連接,這意味著當(dāng)一個(gè)客戶端向服務(wù)器端發(fā)出請(qǐng)求,然后Web服務(wù)器返回響應(yīng)(response),連接就被關(guān)閉了,在服務(wù)器端不保留連接的有關(guān)信息.HTTP遵循請(qǐng)求(Request)/應(yīng)答(Response)模型。Web瀏覽器向Web服務(wù)器發(fā)送請(qǐng)求,Web服務(wù)器處理請(qǐng)求并返回適當(dāng)?shù)膽?yīng)答。所有HTTP連接都被構(gòu)造成一套請(qǐng)求和應(yīng)答。

HTTP使用內(nèi)容類型,是指Web服務(wù)器向Web瀏覽器返回的文件都有與之相關(guān)的類型。所有這些類型在MIMEInternet郵件協(xié)議上模型化,即Web服務(wù)器告訴Web瀏覽器該文件所具有的種類,是HTML文檔、GIF格式圖像、聲音文件還是獨(dú)立的應(yīng)用程序。大多數(shù)Web瀏覽器都擁有一系列的可配置的輔助應(yīng)用程序,它們告訴瀏覽器應(yīng)該如何處理Web服務(wù)器發(fā)送過來(lái)的各種內(nèi)容類型。

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

(1)?建立TCP連接

在HTTP工作開始之前,Web瀏覽器首先要通過網(wǎng)絡(luò)與Web服務(wù)器建立連接,該連接是通過TCP來(lái)完成的,該協(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ā)送了一空白行來(lái)通知服務(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è)空白行來(lái)表示頭信息的發(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ò)帶寬。

HTTP請(qǐng)求格式

當(dāng)瀏覽器向Web服務(wù)器發(fā)出請(qǐng)求時(shí),它向服務(wù)器傳遞了一個(gè)數(shù)據(jù)塊,也就是請(qǐng)求信息,HTTP請(qǐng)求信息由3部分組成:

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

l?請(qǐng)求頭(Request Header)

l?請(qǐng)求正文

下面是一個(gè)HTTP請(qǐng)求的例子:

GET/sample.jspHTTP/1.1

Accept:image/gif.image/jpeg,/

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

(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)求頭可以聲明瀏覽器所用的語(yǔ)言,請(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é)束,接下來(lái)的是請(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方法

GET方法

GET方法是默認(rèn)的HTTP請(qǐng)求方法,我們?nèi)粘S肎ET方法來(lái)提交表單數(shù)據(jù),然而用GET方法提交的表單數(shù)據(jù)只經(jīng)過了簡(jiǎn)單的編碼,同時(shí)它將作為URL的一部分向Web服務(wù)器發(fā)送,因此,如果使用GET方法來(lái)提交表單數(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ù)量不能太大

POST方法

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方法中的信息無(wú)法保密和數(shù)據(jù)量太小的缺點(diǎn)。因此,出于安全的考慮以及對(duì)用戶隱私的尊重,通常表單提交時(shí)采用POST方法。

從編程的角度來(lái)講,如果用戶通過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)成,分別是:

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

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

3 響應(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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 227,533評(píng)論 6 531
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,055評(píng)論 3 414
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 175,365評(píng)論 0 373
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,561評(píng)論 1 307
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 71,346評(píng)論 6 404
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 54,889評(píng)論 1 321
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 42,978評(píng)論 3 439
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 42,118評(píng)論 0 286
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 48,637評(píng)論 1 333
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,558評(píng)論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 42,739評(píng)論 1 369
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,246評(píng)論 5 355
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 43,980評(píng)論 3 346
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,362評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,619評(píng)論 1 280
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,347評(píng)論 3 390
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 47,702評(píng)論 2 370

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,776評(píng)論 18 139
  • 一、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,404評(píng)論 6 152
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng),內(nèi)容來(lái)源于博客園作者M(jìn)IN飛翔的HTTP協(xié)...
    Sivin閱讀 5,240評(píng)論 3 82
  • http協(xié)議有http0.9,http1.0,http1.1和http2三個(gè)版本,但是現(xiàn)在瀏覽器使用的是htt...
    一現(xiàn)_閱讀 1,879評(píng)論 0 3
  • HTTP概述 超文本傳輸協(xié)議(HTTP,HyperText Transfer Protocol) 是互聯(lián)網(wǎng)上應(yīng)用最...
    曹淵說創(chuàng)業(yè)閱讀 3,858評(píng)論 2 61