HTTP協(xié)議

HTTP(HyperText Transfer Protocol)是一套計(jì)算機(jī)通過(guò)網(wǎng)絡(luò)進(jìn)行通信的規(guī)則。計(jì)算機(jī)專(zhuān)家設(shè)計(jì)出HTTP,使HTTP客戶(hù)(如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è)客戶(hù)端向服務(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)容類(lèi)型,是指Web服務(wù)器向Web瀏覽器返回的文件都有與之相關(guān)的類(lèi)型。所有這些類(lèi)型在MIME Internet郵件協(xié)議上模型化,即Web服務(wù)器告訴Web瀏覽器該文件所具有的種類(lèi),是HTML文檔、GIF格式圖像、聲音文件還是獨(dú)立的應(yīng)用程序。大多數(shù)Web瀏覽器都擁有一系列的可配置的輔助應(yīng)用程序,它們告訴瀏覽器應(yīng)該如何處理Web服務(wù)器發(fā)送過(guò)來(lái)的各種內(nèi)容類(lèi)型。

HTTP通信機(jī)制是在一次完整的HTTP通信過(guò)程中,Web瀏覽器與Web服務(wù)器之間將完成下列7個(gè)步驟:
(1) 建立TCP連接
在HTTP工作開(kāi)始之前,Web瀏覽器首先要通過(guò)網(wǎng)絡(luò)與Web服務(wù)器建立連接,該連接是通過(guò)TCP來(lái)完成的,該協(xié)議與IP協(xié)議共同構(gòu)建Internet,即著名的TCP/IP協(xié)議族,因此Internet又被稱(chēng)作是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)答
客戶(hù)機(jī)向服務(wù)器發(fā)出請(qǐng)求后,服務(wù)器會(huì)客戶(hù)機(jī)回送應(yīng)答,
HTTP/1.1 200 OK
應(yīng)答的第一部分是協(xié)議的版本號(hào)和應(yīng)答狀態(tài)碼
(5) Web服務(wù)器發(fā)送應(yīng)答頭信息
正如客戶(hù)端會(huì)隨同請(qǐng)求發(fā)送關(guān)于自身的信息一樣,服務(wù)器也會(huì)隨同應(yīng)答向用戶(hù)發(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ā)送用戶(hù)所請(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ā)送后將仍然保持打開(kāi)狀態(tài),于是,瀏覽器可以繼續(xù)通過(guò)相同的連接發(fā)送請(qǐng)求。保持連接節(jié)省了為每個(gè)請(qǐng)求建立新連接所需的時(shí)間,還節(jié)約了網(wǎng)絡(luò)帶寬。

HTTP請(qǐng)求格式

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

  1. 請(qǐng)求方法URI協(xié)議/版本
  • 請(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。
  1. 請(qǐng)求頭(Request Header)
  • 請(qǐng)求頭包含許多有關(guān)的客戶(hù)端環(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.
  1. 請(qǐng)求正文
  • 請(qǐng)求頭和請(qǐng)求正文之間是一個(gè)空行,這個(gè)行非常重要,它表示請(qǐng)求頭已經(jīng)結(jié)束,接下來(lái)的是請(qǐng)求正文。請(qǐng)求正文中可以包含客戶(hù)提交的查詢(xún)字符串信息:
    username=jinqiao&password=1234
  1. 下面是一個(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

HTTP應(yīng)答

  • HTTP應(yīng)答與HTTP請(qǐng)求相似,HTTP響應(yīng)也由3個(gè)部分構(gòu)成,分別是:
  1. 協(xié)議狀態(tài)版本代碼描述
  • 協(xié)議狀態(tài)代碼描述HTTP響應(yīng)的第一行類(lèi)似于HTTP請(qǐng)求的第一行,它表示通信所用的協(xié)議是HTTP1.1服務(wù)器已經(jīng)成功的處理了客戶(hù)端發(fā)出的請(qǐng)求(200表示成功)
  1. 響應(yīng)頭(Response Header)
  • 響應(yīng)頭也和請(qǐng)求頭一樣包含許多有用的信息,例如服務(wù)器類(lèi)型、日期時(shí)間、內(nèi)容類(lè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
  1. 響應(yīng)正文
  • 響應(yīng)頭和正文之間也必須用空行分隔。
  • HTTP應(yīng)答碼
       HTTP應(yīng)答碼也稱(chēng)為狀態(tài)碼,它反映了Web服務(wù)器處理HTTP請(qǐng)求狀態(tài)。HTTP應(yīng)答碼由3位數(shù)字構(gòu)成,其中首位數(shù)字定義了應(yīng)答碼的類(lèi)型:
       1XX-信息類(lèi)(Information),表示收到Web瀏覽器請(qǐng)求,正在進(jìn)一步的處理中
       2XX-成功類(lèi)(Successful),表示用戶(hù)請(qǐng)求被正確接收,理解和處理例如:200 OK
    3XX-重定向類(lèi)(Redirection),表示請(qǐng)求沒(méi)有成功,客戶(hù)必須采取進(jìn)一步的動(dòng)作。
    4XX-客戶(hù)端錯(cuò)誤(Client Error),表示客戶(hù)端提交的請(qǐng)求有錯(cuò)誤 例如:404 NOT
    Found,意味著請(qǐng)求中所引用的文檔不存在。
    5XX-服務(wù)器錯(cuò)誤(Server Error)表示服務(wù)器不能完成對(duì)請(qǐng)求的處理:如 500
  1. 下面是一個(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

安全連接

Web應(yīng)用最常見(jiàn)的用途之一是電子商務(wù),可以利用Web服務(wù)器端程序使人們能夠網(wǎng)絡(luò)購(gòu)物,需要指出一點(diǎn)是,缺省情況下,通過(guò)Internet發(fā)送信息是不安全的,如果某人碰巧截獲了你發(fā)給朋友的一則消息,他就能打開(kāi)它,假想在里面有你的信用卡號(hào)碼,這會(huì)有多么糟糕,幸運(yùn)的是,很多Web服務(wù)器以及Web瀏覽器都有創(chuàng)立安全連接的能力,這樣它們就可以安全的通信了。
通過(guò)Internet提供安全連接最常見(jiàn)的標(biāo)準(zhǔn)是安全套接層(Secure Sockets layer,SSl)協(xié)議。SSL協(xié)議是一個(gè)應(yīng)用層協(xié)議(和HTTP一樣),用于安全方式在Web上交換數(shù)據(jù),SSL使用公開(kāi)密鑰編碼系統(tǒng)。從本質(zhì)講,這意味著業(yè)務(wù)中每一方都擁有一個(gè)公開(kāi)的和一個(gè)私有的密鑰。當(dāng)一方使用另一方公開(kāi)密鑰進(jìn)行編碼時(shí),只有擁有匹配密鑰的人才能對(duì)其解碼。簡(jiǎn)單來(lái)講,公開(kāi)密鑰編碼提供了一種用于在兩方之間交換數(shù)據(jù)的安全方法,SSL連接建立之后,客戶(hù)和服務(wù)器都交換公開(kāi)密鑰,并在進(jìn)行業(yè)務(wù)聯(lián)系之前進(jìn)行驗(yàn)證,一旦雙方的密鑰都通過(guò)驗(yàn)證,就可以安全地交換數(shù)據(jù)。

GET方法

GET方法是默認(rèn)的HTTP請(qǐng)求方法,我們?nèi)粘S肎ET方法來(lái)提交表單數(shù)據(jù),然而用GET方法提交的表單數(shù)據(jù)只經(jīng)過(guò)了簡(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)。通過(guò)POST方法提交表單數(shù)據(jù)時(shí),數(shù)據(jù)不是作為URL請(qǐng)求的一部分而是作為標(biāo)準(zhǔn)數(shù)據(jù)傳送給Web服務(wù)器,這就克服了GET方法中的信息無(wú)法保密和數(shù)據(jù)量太小的缺點(diǎn)。因此,出于安全的考慮以及對(duì)用戶(hù)隱私的尊重,通常表單提交時(shí)采用POST方法。
  從編程的角度來(lái)講,如果用戶(hù)通過(guò)GET方法提交數(shù)據(jù),則數(shù)據(jù)存放在QUERY_STRING環(huán)境變量中,而POST方法提交的數(shù)據(jù)則可以從標(biāo)準(zhǔn)輸入流中獲取。

請(qǐng)求方式簡(jiǎn)介

GET通過(guò)請(qǐng)求URI得到資源
POST,用于添加新的內(nèi)容
PUT用于修改某個(gè)內(nèi)容
DELETE,刪除某個(gè)內(nèi)容
CONNECT,用于代理進(jìn)行傳輸,如使用SSL
OPTIONS詢(xún)問(wèn)可以執(zhí)行哪些方法
PATCH,部分文檔更改
PROPFIND, (wedav)查看屬性
PROPPATCH, (wedav)設(shè)置屬性
MKCOL, (wedav)創(chuàng)建集合(文件夾)
COPY, (wedav)拷貝
MOVE, (wedav)移動(dòng)
LOCK, (wedav)加鎖
UNLOCK (wedav)解鎖
TRACE用于遠(yuǎn)程診斷服務(wù)器
HEAD類(lèi)似于GET, 但是不返回body信息,用于檢查對(duì)象是否存在,以及得到對(duì)象的元數(shù)據(jù)

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

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

  • 一、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,409評(píng)論 6 152
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng),內(nèi)容來(lái)源于博客園作者M(jìn)IN飛翔的HTTP協(xié)...
    Sivin閱讀 5,246評(píng)論 3 82
  • HTTP概述 超文本傳輸協(xié)議(HTTP,HyperText Transfer Protocol) 是互聯(lián)網(wǎng)上應(yīng)用最...
    曹淵說(shuō)創(chuàng)業(yè)閱讀 3,859評(píng)論 2 61
  • 前言:最近發(fā)現(xiàn)自己在網(wǎng)絡(luò)相關(guān)這一塊基礎(chǔ)很是欠缺,所以準(zhǔn)備花時(shí)間了解一下,本文主要是講http協(xié)議的一些基礎(chǔ),和一些...
    justCode_閱讀 2,108評(píng)論 0 23
  • 本文整理自MIN飛翔博客 [1] 1. 概念 協(xié)議是指計(jì)算機(jī)通信網(wǎng)絡(luò)中兩臺(tái)計(jì)算機(jī)之間進(jìn)行通信所必須共同遵守的規(guī)定或...
    HoyaWhite閱讀 2,701評(píng)論 2 20