一 . HTTP 簡介
超文本傳輸協(xié)議(英文:HyperText Transfer Protocol,縮寫:HTTP)是互聯(lián)網上應用最為廣泛的一種網絡協(xié)議。
設計HTTP最初的目的是為了提供一種發(fā)布和接收HTML頁面的方法。通過HTTP或者HTTPS協(xié)議請求的資源由統(tǒng)一資源標識符(Uniform Resource Identifiers,URI)來標識。
HTTP是一個客戶端終端(用戶)和服務器端(網站)請求和應答的標準(TCP)。
通過使用網頁瀏覽器、網絡爬蟲或者其它的工具,客戶端發(fā)起一個HTTP請求到服務器上指定端口(默認端口為80)。
我們稱這個客戶端為用戶代理程序(user agent)。
應答的服務器上存儲著一些資源,比如HTML文件和圖像。我們稱這個應答服務器為源服務器(origin server)。
在用戶代理和源服務器中間可能存在多個“中間層”,比如代理服務器、網關或者隧道(tunnel)。
盡管TCP/IP協(xié)議是互聯(lián)網上最流行的應用,HTTP協(xié)議中,并沒有規(guī)定必須使用它或它支持的層。
事實上,HTTP可以在任何互聯(lián)網協(xié)議上,或其他網絡上實現(xiàn)。HTTP假定其下層協(xié)議提供可靠的傳輸。
因此,任何能夠提供這種保證的協(xié)議都可以被其使用。因此也就是其在TCP/IP協(xié)議族使用TCP作為其傳輸層。
二.HTTP協(xié)議特點
HTTP 協(xié)議一共有五大特點:1、支持客戶/服務器模式;2、簡單快速;3、靈活;4、無連接(1.0)/持久連接(1.1);5、無狀態(tài)。
無連接:是限制每次連接只處理一個請求。服務器處理完客戶的請求,并收到客戶的應答后,即斷開連接。采用這種方式可以節(jié)省傳輸時間。
無狀態(tài):是指協(xié)議對于事務處理沒有記憶能力,服務器不知道客戶端是什么狀態(tài)。即我們給服務器發(fā)送 HTTP 請求之后,服務器根據請求,會給我們發(fā)送數(shù)據過來,但是,發(fā)送完,不會記錄任何信息。
三.HTTP報文
HTTP請求報文由3部分組成( 請求行+請求頭+請求體 ):
這是這篇文章的請求報文
第一行為請求行 <請求方法><URL><HTTP協(xié)議和版本>
請求頭之后是空行
然后是請求數(shù)據
HTTP 響應報文也由三部分組成 狀態(tài)行、消息報頭、響應正文。
第一行為狀態(tài)行,包含各種狀態(tài)碼? ?1XX 代表消息 ?2XX 代表成功 3XX 代表重定向 4XX 代表客戶的錯誤 5XX服務器錯誤
第二行開始是消息報頭
消息報頭之后空一行,然后是響應正文
常見的請求方式有 GET 和 POST
1.GET提交,請求的數(shù)據會附在URL之后(就是把數(shù)據放置在HTTP協(xié)議頭<request-line>中),以?分割URL和傳輸數(shù)據,多個參數(shù)用&連接;例如:login.do?name=xxx&password=xxx。如果數(shù)據是英文字母/數(shù)字,原樣發(fā)送,如果是空格,轉換為+,如果是中文/其他字符,則直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX為該符號以16進制表示的ASCII。
POST提交:把提交的數(shù)據放置在是HTTP包的包體<request-body>中
因此,GET提交的數(shù)據會在地址欄中顯示出來,而POST提交,地址欄不會改變
2.傳輸數(shù)據的大小:
首先聲明,HTTP協(xié)議沒有對傳輸?shù)臄?shù)據大小進行限制,HTTP協(xié)議規(guī)范也沒有對URL長度進行限制。 而在實際開發(fā)中存在的限制主要有:
GET:特定瀏覽器和服務器對URL長度有限制,例如IE對URL長度的限制是2083字節(jié)(2K+35)。對于其他瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決于操作系統(tǒng)的支持。
因此對于GET提交時,傳輸數(shù)據就會受到URL長度的限制。
POST:由于不是通過URL傳值,理論上數(shù)據不受限。但實際各個WEB服務器會規(guī)定對post提交數(shù)據大小進行限制,Apache、IIS6都有各自的配置。
3.安全性:
POST的安全性要比GET的安全性高。注意:這里所說的安全性和上面GET提到的“安全”不是同個概念。上面“安全”的含義僅僅是不作數(shù)據修改,而這里安全的含義是真正的Security的含義,比如:通過GET提交數(shù)據,用戶名和密碼將明文出現(xiàn)在URL上,因為(1)登錄頁面有可能被瀏覽器緩存, (2)其他人查看瀏覽器的歷史紀錄,那么別人就可以拿到你的賬號和密碼了,