什麼是HTTP協議
協議是計算機網絡中兩臺計算機之間進行通信所必須共同準守的規定和準則,超文本傳輸協議(HTTP)是一種通信協議,允許超文本標記語言(HTML)文檔從web服務器傳送到客戶端瀏覽器中。
web服務器,瀏覽器,代理服務器
打開瀏覽器,在地址欄輸入url,可以打開需要的網站,原理如下:
輸入url後,瀏覽器給web服務器發送request請求,服務器接收解析後生成相應的response,然後返回給瀏覽器,瀏覽器解析response中的HTML,就可以看到相應的網頁
request有可能是經歷了代理服務器,纔到達服務器,過程入下圖:
代理服務器爲網絡信息的中轉站,具體功能入下
1.提高訪問速度,大多數代理服務器都有緩存功能
2.突破限制,翻牆
3.隱藏身份
URL詳解
url(Uniform Resource Locator)地址用於描述網絡上的資源,格式如下:
schema:指定底層使用的協議(eg:http,https,ftp)
host: http服務器的ip地址和域名
port: HTTP服務器的默認端口是80,這種情況下端口號可以省略。如果使用了別的端口,必須指明,例如 http://www.cnblogs.com:8080/
path:訪問資源的路徑
query-string:發送給http服務的路徑
Anchor: 錨
HTTP協議是無狀態的
http協議是無狀態的,同一個客戶端的這次請求和上次請求是沒有關係的,對http請求來說,他並不知道這兩個請求是來自同一個客戶端的,爲了解決這個問題,web程序引入cookie機制來維持狀態
打開一個網頁需要瀏覽器發送多個request請求
1.在瀏覽器的輸入url:https://mp.csdn.net時,瀏覽器發送一個request去獲取https://mp.csdn.net的HTML,服務器把response發送回給瀏覽器
2.瀏覽器分析Response中的 HTML,發現其中引用了很多其他文件,比如圖片,CSS文件,JS文件。
3.瀏覽器會自動再次發送Request去獲取圖片,CSS文件,或者JS文件。
4.等所有的文件都下載成功後。 網頁就被顯示出來了。
HTTP消息的結構
Request 消息的結構爲三部分:1.Request line,2.Request header,3.body (Request header和body中間有個空行)
第一行中method表示請求方法,eg:‘post’,‘get’;path-to-resource表示請求資源;http/version-number表示協議版本號
當使用的是"GET" 方法的時候, body是爲空的
看Response消息的結構, 和Request消息的結構基本一樣。 同樣也分爲三部分,第一部分叫Response line, 第二部分叫Response header,第三部分是body. header和body之間也有個空行。
HTTP/version-number表示HTTP協議的版本號, status-code 和message
get和post方法的區別
http協議定義了很多與服務器交互的方法,最基本的有4種,get,post,put,delete,一個url用於描述網絡上的資源,http中的get,post,put,delete對應着這個資源的查,改,增,刪4個操作,最常見的爲get和post,get用於查詢/獲取資源信息,post用於更新資源信息
get和post的區別:
1.get提交的數據會放在url之後,以?分割url和傳輸數據,參數之間以&連接;post是把提交的數據放到http包的body中
2.get提交的數據大小有限制(瀏覽器對url長度有限制),而post提交的數據沒有限制
3.GET方式需要使用Request.QueryString來取得變量的值,而POST方式通過Request.Form來獲取變量的值(??)
4.用get方法提交數據,會有安全問題,eg:用get請求登錄頁面,賬號和密碼會顯示在url上,如果頁面可以被緩存或其他人可以訪問該電腦,會通過歷史記錄獲得密碼和賬號
狀態碼
response消息的第一行叫做狀態行,由http協議版本號,狀態碼,狀態消息三部分組成
狀態碼告訴http客戶端(瀏覽器),http服務器是否達到了預期的response
HTTP/1.1定義了5種狀態碼:
1XX:提示信息,表示請求被成功接受,繼續處理
2XX:成功,表示請求被成功接受,理解,處理
3XX:重定向,要完成請求,必須進行更近一步的處理
4XX:客戶端錯誤,表示請求語法錯誤或請求無法實現
5XX:服務器端錯誤,服務器未能實現合法的請求