HTTP協議是Hyper Text Transfer Protocol(超文本傳輸協議)的縮寫
HTTP是一個基於TCP/IP通訊協議來傳遞數據
HTTP是一個屬於應用層的面向對象的協議
(1) 基於TCP/IP協議,做用於應用層
(2) 基於請求響應
(3) 無鏈接
無鏈接的含義是限制每次鏈接只處理一個請求。服務器處理完客戶的請求,
並收到客戶的應答後,即斷開鏈接。採用這種方式能夠節省傳輸時間。
(4) 無狀態
HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。
缺乏狀態意味着若是後續處理須要前面的信息,則它必須重傳,
這樣可能致使每次鏈接傳送的數據量增大。另外一方面,在服務器不須要先前信息時它的應答就較快。
(1) URI,是uniform resource identifier,統一資源標識符,用來惟一的標識一個資源。
Web上可用的每種資源如HTML文檔、圖像、視頻片斷、程序等都是一個來URI來定位的
URI通常由三部組成:
-訪問資源的命名機制
-存放資源的主機名
-資源自身的名稱,由路徑表示,着重強調於資源。
(2)URL是uniform resource locator,統一資源定位器,它是一種具體的URI,即URL能夠用來標識一個資源,並且還指明瞭如何locate這個資源。
URL是Internet上用來描述信息資源的字符串,主要用在各類WWW客戶程序和服務器程序上。
採用URL能夠用一種統一的格式來描述各類信息資源,包括文件、服務器的地址和目錄等。
URL通常由三部組成:
-協議(或稱爲服務方式)
-存有該資源的主機IP地址(有時也包括端口號)
-主機資源的具體地址。如目錄和文件名等
客戶端發送一個HTTP請求到服務器的請求消息包括如下格式:
請求行(request line)、請求頭部(header)、空行和請求數據四個部分組成。
HTTP響應也由四個部分組成,分別是:狀態行、消息報頭、空行和響應正文。
狀態代碼有三位數字組成,第一個數字定義了響應的類別,共分五種類別:
1xx:表示服務器接受數據,正在處理,能夠繼續提交其餘數據
2xx:成功--表示請求已被成功處理,並返回數據
3xx:重定向--要完成請求必須進行更進一步的操做
4xx:客戶端錯誤--請求有語法錯誤或請求沒法實現
5xx:服務器端錯誤--服務器未能實現合法的請求
常見狀態碼:
200 OK //客戶端請求成功
400 Bad Request //客戶端請求有語法錯誤,不能被服務器所理解
401 Unauthorized //請求未經受權,這個狀態代碼必須和WWW-Authenticate報頭域一塊兒使用
403 Forbidden //服務器收到請求,可是拒絕提供服務
404 Not Found //請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error //服務器發生不可預期的錯誤
503 Server Unavailable //服務器當前不能處理客戶端的請求,一段時間後可能恢復正常
根據HTTP標準,HTTP請求可使用多種請求方法。
HTTP1.0定義了三種請求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五種請求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
GET 請求指定的頁面信息,並返回實體主體。
HEAD 相似於get請求,只不過返回的響應中沒有具體的內容,用於獲取報頭
POST 向指定資源提交數據進行處理請求(例如提交表單或者上傳文件)。數據被包含在請求體中。POST請求可能會致使新的資源的創建和/或已有資源的修改。
PUT 從客戶端向服務器傳送的數據取代指定的文檔的內容。
DELETE 請求服務器刪除指定的頁面。
CONNECT HTTP/1.1協議中預留給可以將鏈接改成管道方式的代理服務器。
OPTIONS 容許客戶端查看服務器的性能。
TRACE 回顯服務器收到的請求,主要用於測試或診斷。
HTTP協議定義Web客戶端如何從Web服務器請求Web頁面,以及服務器如何把Web頁面傳送給客戶端。
HTTP協議採用了請求/響應模型。客戶端向服務器發送一個請求報文,請求報文包含請求的方法、URL、協議版本、請求頭部和請求數據。
服務器以一個狀態行做爲響應,響應的內容包括協議的版本、成功或者錯誤代碼、服務器信息、響應頭部和響應數據。
如下是 HTTP 請求/響應的步驟:
一、客戶端鏈接到Web服務器
一個HTTP客戶端,一般是瀏覽器,與Web服務器的HTTP端口(默認爲80)創建一個TCP套接字鏈接。例如,http://www.baidu.com。
二、發送HTTP請求
經過TCP套接字,客戶端向Web服務器發送一個文本的請求報文,一個請求報文由請求行、請求頭部、空行和請求數據4部分組成。
三、服務器接受請求並返回HTTP響應
Web服務器解析請求,定位請求資源。服務器將資源複本寫到TCP套接字,由客戶端讀取。
一個響應由狀態行、響應頭部、空行和響應數據4部分組成。
四、釋放鏈接TCP鏈接
若connection 模式爲close,則服務器主動關閉TCP鏈接,客戶端被動關閉鏈接,釋放TCP鏈接;
若connection 模式爲keepalive,則該鏈接會保持一段時間,在該時間內能夠繼續接收請求;
五、客戶端瀏覽器解析HTML內容
客戶端瀏覽器首先解析狀態行,查看代表請求是否成功的狀態代碼。
而後解析每個響應頭,響應頭告知如下爲若干字節的HTML文檔和文檔的字符集。
客戶端瀏覽器讀取響應數據HTML,根據HTML的語法對其進行格式化,並在瀏覽器窗口中顯示。
例如:在瀏覽器地址欄鍵入URL,按下回車以後會經歷如下流程:
一、瀏覽器向 DNS 服務器請求解析該 URL 中的域名所對應的 IP 地址;
二、解析出 IP 地址後,根據該 IP 地址和默認端口 80,和服務器創建TCP鏈接;
三、瀏覽器發出讀取文件(URL 中域名後面部分對應的文件)的HTTP 請求,該請求報文做爲 TCP 三次握手的第三個報文的數據發送給服務器;
四、服務器對瀏覽器請求做出響應,並把對應的 html 文本發送給瀏覽器;
五、釋放 TCP鏈接;
六、瀏覽器將該 html 文本並顯示內容;
一、GET提交,請求的數據會附在URL以後(就是把數據放置在HTTP協議頭中),以?分割URL和傳輸數據,多個參數用&鏈接; 例 如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。 若是數據是英文字母/數字,原樣發送,若是是空格,轉換爲+,若是是中文/其餘字符,則直接把字符串用BASE64加密, 得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX爲該符號以16進製表示的ASCII。 POST提交:把提交的數據放置在是HTTP包的包體中。 所以,GET提交的數據會在地址欄中顯示出來,而POST提交,地址欄不會改變
二、傳輸數據的大小
首先聲明:HTTP協議沒有對傳輸的數據大小進行限制,HTTP協議規範也沒有對URL長度進行限制。
而在實際開發中存在的限制主要有:
GET:特定瀏覽器和服務器對URL長度有限制,
例如:IE對URL長度的限制是2083字節(2K+35)。
對於其餘瀏覽器,如Netscape、FireFox等,理論上沒有長度限制,其限制取決於操做系 統的支持。
所以對於GET提交時,傳輸數據就會受到URL長度的 限制。
POST:因爲不是經過URL傳值,理論上數據不受 限。
但實際各個WEB服務器會規定對post提交數據大小進行限制,Apache、IIS6都有各自的配置。
三、安全性
POST的安全性要比GET的安全性高。
好比:經過GET提交數據,用戶名和密碼將明文出如今URL上,由於(1)登陸頁面有可能被瀏覽器緩存;
(2)其餘人查看瀏覽器的歷史紀錄,那麼別人就能夠拿到你的帳號和密碼了,除此以外,使用GET提交數據還可能會形成Cross-site request forgery攻擊
2019-06-05 16:57:17html