HTTP 筆記

一 . HTTP 簡(jiǎn)介

超文本傳輸協(xié)議(英文:HyperText Transfer Protocol,縮寫:HTTP)是互聯(lián)網(wǎng)上應(yīng)用最為廣泛的一種網(wǎng)絡(luò)協(xié)議。

設(shè)計(jì)HTTP最初的目的是為了提供一種發(fā)布和接收HTML頁(yè)面的方法。通過HTTP或者HTTPS協(xié)議請(qǐng)求的資源由統(tǒng)一資源標(biāo)識(shí)符(Uniform Resource Identifiers,URI)來(lái)標(biāo)識(shí)。

HTTP是一個(gè)客戶端終端(用戶)和服務(wù)器端(網(wǎng)站)請(qǐng)求和應(yīng)答的標(biāo)準(zhǔn)(TCP)。

通過使用網(wǎng)頁(yè)瀏覽器、網(wǎng)絡(luò)爬蟲或者其它的工具,客戶端發(fā)起一個(gè)HTTP請(qǐng)求到服務(wù)器上指定端口(默認(rèn)端口為80)。

我們稱這個(gè)客戶端為用戶代理程序(user agent)。

應(yīng)答的服務(wù)器上存儲(chǔ)著一些資源,比如HTML文件和圖像。我們稱這個(gè)應(yīng)答服務(wù)器為源服務(wù)器(origin server)。

在用戶代理和源服務(wù)器中間可能存在多個(gè)“中間層”,比如代理服務(wù)器、網(wǎng)關(guān)或者隧道(tunnel)。

盡管TCP/IP協(xié)議是互聯(lián)網(wǎng)上最流行的應(yīng)用,HTTP協(xié)議中,并沒有規(guī)定必須使用它或它支持的層。

事實(shí)上,HTTP可以在任何互聯(lián)網(wǎng)協(xié)議上,或其他網(wǎng)絡(luò)上實(shí)現(xiàn)。HTTP假定其下層協(xié)議提供可靠的傳輸。

因此,任何能夠提供這種保證的協(xié)議都可以被其使用。因此也就是其在TCP/IP協(xié)議族使用TCP作為其傳輸層。


二.HTTP協(xié)議特點(diǎn)

HTTP 協(xié)議一共有五大特點(diǎn):1、支持客戶/服務(wù)器模式;2、簡(jiǎn)單快速;3、靈活;4、無(wú)連接(1.0)/持久連接(1.1);5、無(wú)狀態(tài)。

無(wú)連接:是限制每次連接只處理一個(gè)請(qǐng)求。服務(wù)器處理完客戶的請(qǐng)求,并收到客戶的應(yīng)答后,即斷開連接。采用這種方式可以節(jié)省傳輸時(shí)間。

無(wú)狀態(tài):是指協(xié)議對(duì)于事務(wù)處理沒有記憶能力,服務(wù)器不知道客戶端是什么狀態(tài)。即我們給服務(wù)器發(fā)送 HTTP 請(qǐng)求之后,服務(wù)器根據(jù)請(qǐng)求,會(huì)給我們發(fā)送數(shù)據(jù)過來(lái),但是,發(fā)送完,不會(huì)記錄任何信息。


三.HTTP報(bào)文

HTTP請(qǐng)求報(bào)文由3部分組成( 請(qǐng)求行+請(qǐng)求頭+請(qǐng)求體 ):


HTTP Request Headers

這是這篇文章的請(qǐng)求報(bào)文

第一行為請(qǐng)求行 <請(qǐng)求方法><URL><HTTP協(xié)議和版本>

第二行開始為請(qǐng)求頭?

請(qǐng)求頭之后是空行

然后是請(qǐng)求數(shù)據(jù)

HTTP 響應(yīng)報(bào)文也由三部分組成 狀態(tài)行、消息報(bào)頭、響應(yīng)正文。


HTTP響應(yīng)報(bào)文

第一行為狀態(tài)行,包含各種狀態(tài)碼? ?1XX 代表消息 ?2XX 代表成功 3XX 代表重定向 4XX 代表客戶的錯(cuò)誤 5XX服務(wù)器錯(cuò)誤

第二行開始是消息報(bào)頭

消息報(bào)頭之后空一行,然后是響應(yīng)正文

常見的請(qǐng)求方式有 GET 和 POST

1.GET提交,請(qǐng)求的數(shù)據(jù)會(huì)附在URL之后(就是把數(shù)據(jù)放置在HTTP協(xié)議頭<request-line>中),以?分割URL和傳輸數(shù)據(jù),多個(gè)參數(shù)用&連接;例如:login.do?name=xxx&password=xxx。如果數(shù)據(jù)是英文字母/數(shù)字,原樣發(fā)送,如果是空格,轉(zhuǎn)換為+,如果是中文/其他字符,則直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX為該符號(hào)以16進(jìn)制表示的ASCII。

POST提交:把提交的數(shù)據(jù)放置在是HTTP包的包體<request-body>中

因此,GET提交的數(shù)據(jù)會(huì)在地址欄中顯示出來(lái),而POST提交,地址欄不會(huì)改變

2.傳輸數(shù)據(jù)的大?。?/p>

首先聲明,HTTP協(xié)議沒有對(duì)傳輸?shù)臄?shù)據(jù)大小進(jìn)行限制,HTTP協(xié)議規(guī)范也沒有對(duì)URL長(zhǎng)度進(jìn)行限制。 而在實(shí)際開發(fā)中存在的限制主要有:

GET:特定瀏覽器和服務(wù)器對(duì)URL長(zhǎng)度有限制,例如IE對(duì)URL長(zhǎng)度的限制是2083字節(jié)(2K+35)。對(duì)于其他瀏覽器,如Netscape、FireFox等,理論上沒有長(zhǎng)度限制,其限制取決于操作系統(tǒng)的支持。

因此對(duì)于GET提交時(shí),傳輸數(shù)據(jù)就會(huì)受到URL長(zhǎng)度的限制。

POST:由于不是通過URL傳值,理論上數(shù)據(jù)不受限。但實(shí)際各個(gè)WEB服務(wù)器會(huì)規(guī)定對(duì)post提交數(shù)據(jù)大小進(jìn)行限制,Apache、IIS6都有各自的配置。

3.安全性:

POST的安全性要比GET的安全性高。注意:這里所說的安全性和上面GET提到的“安全”不是同個(gè)概念。上面“安全”的含義僅僅是不作數(shù)據(jù)修改,而這里安全的含義是真正的Security的含義,比如:通過GET提交數(shù)據(jù),用戶名和密碼將明文出現(xiàn)在URL上,因?yàn)?1)登錄頁(yè)面有可能被瀏覽器緩存, (2)其他人查看瀏覽器的歷史紀(jì)錄,那么別人就可以拿到你的賬號(hào)和密碼了,

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,923評(píng)論 18 139
  • 一、概念(載錄于:http://www.cnblogs.com/EricaMIN1987_IT/p/3837436...
    yuantao123434閱讀 8,440評(píng)論 6 152
  • Http協(xié)議詳解 標(biāo)簽(空格分隔): Linux 聲明:本片文章非原創(chuàng),內(nèi)容來(lái)源于博客園作者M(jìn)IN飛翔的HTTP協(xié)...
    Sivin閱讀 5,252評(píng)論 3 82
  • 前言:最近發(fā)現(xiàn)自己在網(wǎng)絡(luò)相關(guān)這一塊基礎(chǔ)很是欠缺,所以準(zhǔn)備花時(shí)間了解一下,本文主要是講http協(xié)議的一些基礎(chǔ),和一些...
    justCode_閱讀 2,111評(píng)論 0 23
  • 1.網(wǎng)絡(luò)讓我們接近世界,但又讓我們遠(yuǎn)離生活。 2.有時(shí)候,我們喜歡一首歌,不是因?yàn)楦璩亩嗪寐?,而是因?yàn)楦柙~寫的像...
    伊熙玉涵閱讀 118評(píng)論 0 0