前端須知的簡單HTTP原理

在做web前端開發(fā)時惩系,我們必須要知道客戶端和服務端是如何通信的堡牡,通俗簡單點就是? 請求(客戶端)? R11 > 響應

(服務端)的過程擦剑,可是客戶端又是如何向服務端如何請求的呢赚抡?而服務端又是如何響應的呢涂臣,響應的信息又是不是我們想要的呢赁遗?帶著問題往下看吧。

HTTP(HyperText TransferProtocol)是一套計算機通過網絡進行通信的規(guī)則炫乓。計算機專家設計出HTTP,使HTTP客戶(如Web瀏覽器)能夠從HTTP服務器(Web服務器)請求信息和服務箩做,HTTP協議目前的版本是1.1.HTTP是一種無狀態(tài)的協議,無狀態(tài)是指Web瀏覽器和Web服務器之間不需要建立持久的連接,這意味著當一個客戶端向服務器端發(fā)出請求黔龟,然后Web服務器返回響應(response),連接就被關閉了,在服務器端不保留連接的有關信息.HTTP遵循請求(Request)/應答(Response)模型到踏。Web瀏覽器向Web服務器發(fā)送請求夭禽,Web服務器處理請求并返回適當的應答菩彬。所有HTTP連接都被構造成一套請求和應答骗灶。

HTTP使用內容類型脱羡,是指Web服務器向Web瀏覽器返回的文件都有與之相關的類型。所有這些類型在MIMEInternet郵件協議上模型化脓规,即Web服務器告訴Web瀏覽器該文件所具有的種類,是HTML文檔挨下、GIF格式圖像、聲音文件還是獨立的應用程序。大多數Web瀏覽器都擁有一系列的可配置的輔助應用程序帜讲,它們告訴瀏覽器應該如何處理Web服務器發(fā)送過來的各種內容類型获黔。

HTTP通信機制是在一次完整的HTTP通信過程中腋舌,Web瀏覽器與Web服務器之間將完成下列7個步驟:

(1)?建立TCP連接

在HTTP工作開始之前,Web瀏覽器首先要通過網絡與Web服務器建立連接,該連接是通過TCP來完成的糟需,該協議與IP協議共同構建Internet,即著名的TCP/IP協議族谷朝,因此Internet又被稱作是TCP/IP網絡洲押。HTTP是比TCP更高層次的應用層協議,根據規(guī)則圆凰,只有低層協議建立之后才能诅诱,才能進行更層協議的連接,因此送朱,首先要建立TCP連接娘荡,一般TCP連接的端口號是80

(2)?Web瀏覽器向Web服務器發(fā)送請求命令

一旦建立了TCP連接,Web瀏覽器就會向Web服務器發(fā)送請求命令

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

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

瀏覽器發(fā)送其請求命令之后驶沼,還要以頭信息的形式向Web服務器發(fā)送一些別的信息炮沐,之后瀏覽器發(fā)送了一空白行來通知服務器,它已經結束了該頭信息的發(fā)送回怜。

(4)?Web服務器應答

客戶機向服務器發(fā)出請求后大年,服務器會客戶機回送應答,

HTTP/1.1 200 OK

應答的第一部分是協議的版本號和應答狀態(tài)碼

(5)?Web服務器發(fā)送應答頭信息

正如客戶端會隨同請求發(fā)送關于自身的信息一樣玉雾,服務器也會隨同應答向用戶發(fā)送關于它自己的數據及被請求的文檔翔试。

(6)?Web服務器向瀏覽器發(fā)送數據

Web服務器向瀏覽器發(fā)送頭信息后,它會發(fā)送一個空白行來表示頭信息的發(fā)送到此為結束复旬,接著垦缅,它就以Content-Type應答頭信息所描述的格式發(fā)送用戶所請求的實際數據

(7)?Web服務器關閉TCP連接

一般情況下,一旦Web服務器向瀏覽器發(fā)送了請求數據驹碍,它就要關閉TCP連接壁涎,然后如果瀏覽器或者服務器在其頭信息加入了這行代碼

Connection:keep-alive

TCP連接在發(fā)送后將仍然保持打開狀態(tài)凡恍,于是,瀏覽器可以繼續(xù)通過相同的連接發(fā)送請求怔球。保持連接節(jié)省了為每個請求建立新連接所需的時間嚼酝,還節(jié)約了網絡帶寬。

HTTP請求格式

當瀏覽器向Web服務器發(fā)出請求時竟坛,它向服務器傳遞了一個數據塊闽巩,也就是請求信息,HTTP請求信息由3部分組成:

l?請求方法URI協議/版本

l?請求頭(Request Header)

l?請求正文

下面是一個HTTP請求的例子:

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)?請求方法URI協議/版本

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

以上代碼中“GET”代表請求方法担汤,“/sample.jsp”表示URI涎跨,“HTTP/1.1代表協議和協議的版本。

根據HTTP標準漫试,HTTP請求可以使用多種請求方法。例如:HTTP1.1支持7種請求方法:GET碘赖、POST驾荣、HEAD、OPTIONS普泡、PUT播掷、DELETE和TARCE。在Internet應用中撼班,最常用的方法是GET和POST歧匈。

URL完整地指定了要訪問的網絡資源,通常只要給出相對于服務器的根目錄的相對目錄即可砰嘁,因此總是以“/”開頭件炉,最后,協議版本聲明了通信過程中使用HTTP的版本矮湘。

(2)請求頭(Request Header)

請求頭包含許多有關的客戶端環(huán)境和請求正文的有用信息斟冕。例如,請求頭可以聲明瀏覽器所用的語言缅阳,請求正文的長度等磕蛇。

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)請求正文

請求頭和請求正文之間是一個空行,這個行非常重要十办,它表示請求頭已經結束秀撇,接下來的是請求正文。請求正文中可以包含客戶提交的查詢字符串信息:

username=jinqiao&password=1234

在以上的例子的HTTP請求中向族,請求的正文只有一行內容呵燕。當然,在實際應用中件相,HTTP請求正文可以包含更多的內容虏等。

HTTP請求方法我這里只討論GET方法與POST方法

GET方法

GET方法是默認的HTTP請求方法弄唧,我們日常用GET方法來提交表單數據,然而用GET方法提交的表單數據只經過了簡單的編碼霍衫,同時它將作為URL的一部分向Web服務器發(fā)送候引,因此,如果使用GET方法來提交表單數據就存在著安全隱患上敦跌。例如

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

從上面的URL請求中澄干,很容易就可以辯認出表單提交的內容。(柠傍?之后的內容)另外由于GET方法提交的數據是作為URL請求的一部分所以提交的數據量不能太大

POST方法

POST方法是GET方法的一個替代方法麸俘,它主要是向Web服務器提交表單數據,尤其是大批量的數據惧笛。POST方法克服了GET方法的一些缺點从媚。通過POST方法提交表單數據時,數據不是作為URL請求的一部分而是作為標準數據傳送給Web服務器患整,這就克服了GET方法中的信息無法保密和數據量太小的缺點拜效。因此,出于安全的考慮以及對用戶隱私的尊重各谚,通常表單提交時采用POST方法紧憾。

從編程的角度來講,如果用戶通過GET方法提交數據昌渤,則數據存放在QUERY_STRING環(huán)境變量中赴穗,而POST方法提交的數據則可以從標準輸入流中獲取。

HTTP應答與HTTP請求相似膀息,HTTP響應也由3個部分構成般眉,分別是:

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

2 響應頭(Response Header)

3 響應正文

下面是一個HTTP響應的例子:

HTTP/1.1 200 OK

Server:Apache Tomcat/5.0.12

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

Content-Length:112

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市潜支,隨后出現的幾起案子煤篙,更是在濱河造成了極大的恐慌,老刑警劉巖毁腿,帶你破解...
    沈念sama閱讀 216,651評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件辑奈,死亡現場離奇詭異,居然都是意外死亡已烤,警方通過查閱死者的電腦和手機鸠窗,發(fā)現死者居然都...
    沈念sama閱讀 92,468評論 3 392
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來胯究,“玉大人稍计,你說我怎么就攤上這事≡Q” “怎么了臣嚣?”我有些...
    開封第一講書人閱讀 162,931評論 0 353
  • 文/不壞的土叔 我叫張陵净刮,是天一觀的道長。 經常有香客問我硅则,道長淹父,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,218評論 1 292
  • 正文 為了忘掉前任怎虫,我火速辦了婚禮暑认,結果婚禮上,老公的妹妹穿的比我還像新娘大审。我一直安慰自己蘸际,他們只是感情好,可當我...
    茶點故事閱讀 67,234評論 6 388
  • 文/花漫 我一把揭開白布徒扶。 她就那樣靜靜地躺著粮彤,像睡著了一般。 火紅的嫁衣襯著肌膚如雪姜骡。 梳的紋絲不亂的頭發(fā)上导坟,一...
    開封第一講書人閱讀 51,198評論 1 299
  • 那天,我揣著相機與錄音溶浴,去河邊找鬼乍迄。 笑死管引,一個胖子當著我的面吹牛士败,可吹牛的內容都是我干的。 我是一名探鬼主播褥伴,決...
    沈念sama閱讀 40,084評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谅将,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了重慢?” 一聲冷哼從身側響起饥臂,我...
    開封第一講書人閱讀 38,926評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎似踱,沒想到半個月后隅熙,有當地人在樹林里發(fā)現了一具尸體,經...
    沈念sama閱讀 45,341評論 1 311
  • 正文 獨居荒郊野嶺守林人離奇死亡核芽,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 37,563評論 2 333
  • 正文 我和宋清朗相戀三年囚戚,在試婚紗的時候發(fā)現自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片轧简。...
    茶點故事閱讀 39,731評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡驰坊,死狀恐怖,靈堂內的尸體忽然破棺而出哮独,到底是詐尸還是另有隱情拳芙,我是刑警寧澤察藐,帶...
    沈念sama閱讀 35,430評論 5 343
  • 正文 年R本政府宣布,位于F島的核電站舟扎,受9級特大地震影響分飞,放射性物質發(fā)生泄漏。R本人自食惡果不足惜浆竭,卻給世界環(huán)境...
    茶點故事閱讀 41,036評論 3 326
  • 文/蒙蒙 一浸须、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧邦泄,春花似錦删窒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,676評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至特碳,卻和暖如春诚亚,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背午乓。 一陣腳步聲響...
    開封第一講書人閱讀 32,829評論 1 269
  • 我被黑心中介騙來泰國打工站宗, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人益愈。 一個月前我還...
    沈念sama閱讀 47,743評論 2 368
  • 正文 我出身青樓梢灭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親蒸其。 傳聞我的和親對象是個殘疾皇子敏释,可洞房花燭夜當晚...
    茶點故事閱讀 44,629評論 2 354

推薦閱讀更多精彩內容

  • Spring Cloud為開發(fā)人員提供了快速構建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現摸袁,斷路器钥顽,智...
    卡卡羅2017閱讀 134,652評論 18 139
  • 一、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,348評論 6 152
  • Http協議詳解 標簽(空格分隔): Linux 聲明:本片文章非原創(chuàng)靠汁,內容來源于博客園作者MIN飛翔的HTTP協...
    Sivin閱讀 5,222評論 3 82
  • http協議有http0.9蜂大,http1.0,http1.1和http2三個版本蝶怔,但是現在瀏覽器使用的是htt...
    一現_閱讀 1,862評論 0 3
  • HTTP概述 超文本傳輸協議(HTTP奶浦,HyperText Transfer Protocol) 是互聯網上應用最...
    曹淵說創(chuàng)業(yè)閱讀 3,849評論 2 61