http請求相關知識
請求
- 瀏覽器首先向伺服器傳送http請求,請求包括:
方法:get/post,get僅請求資源,post會附帶使用者資料;
路徑:/html/path;
域名:由host頭指定:Host:www.sina.com.cn;
其他header;
如果是post,請求還會包括一個body,包含使用者資料。
2、 伺服器向瀏覽器返回HTTP響應,響應包括:
響應程式碼:200表示成功,3xx表示重定向,4xx表示客戶端傳送的請求有錯誤,5xx表示服務端處理時發生了錯誤;
響應型別:由content-type指定;
其他相關header;
響應內容:有一個body,包含響應的內容,網頁的html原始碼就在body中。
3、如果瀏覽器還要繼續向伺服器請求其他資源,比如圖片,就再次發出http請求,重複步驟1和2;
Web採用的http協議採用了非常簡單的請求-響應模式,從而大大簡化了開發。當我們編寫一個頁面時,我們只需要在http請求中把html傳送出去,不需要考慮如何附帶圖片、視訊等,瀏覽器如果需要請求圖片和視訊,它會發送另一個http請求,因此,一個http請求只處理一個資源。
http協議同時具備極強的擴充套件性,雖然瀏覽器請求的是http://www.sina.com.cn的首頁,但是新浪在html中可以鏈入其他伺服器的資源,比如
<img src="http://i1.sinaimg.cn/home/2015/1008/U8455PxDT20131008135420.png">
從而將請求壓力分散到各個伺服器上,並且一個站點可以連結到其他站點,無數個站點互相連結起來,就形成了world wide web ,簡稱www.
http格式
每個http請求和響應都遵循相同的格式,一個http包含header和body兩部分,其中body是可選的。
http協議是一種文字協議,所以,它的格式也非常簡單。格式如下:
Get請求: GET/test.jsp HTTP/1.1 Accept:image/test.image/jpeg,*/* Accept-Language:zh-cn Connection:Keep-Alive Host:222.35.232.103 User-Agent:Mozila/5.0(compatible;MSIE5.01;Window NT5.0) Accept-Encoding:gzip,deflate username=bingyue&password=bingyue ...
body data。。。 Post請求: Post/test.jsp HTTP/1.1 Accept:image/test.image/jpeg,*/* Accept-Language:zh-cn Connection:Keep-Alive Host:222.35.232.103 User-Agent:Mozila/5.0(compatible;MSIE5.01;Window NT5.0) Accept-Encoding:gzip,deflate username=bingyue&password=bingyue ...
body dataHeader2:Value2 ... Body data |
每個header一行一個,換行符是\r\n,當連續遇到兩個換行符時,Header部分結束,後面的資料全部是body。
http響應格式示例:
HTTP/1.1 200 OK Server:Apache Tomcat/7.0.1 Date:Mon,6Oct2014 13:23:42 GMT Content-Length:102
<html> <head> <title>HTTP響應檔案<title> </head> <body> 這是HTTP響應檔案! </body> </html> |
http響應如果包含body,也是通過兩個分隔符來分割的。請再次注意:body的資料型別由content-Type頭來確定,如果是網頁,body就是文字,如果是圖片,body就是圖片的二級制資料。
當存在content-encoding時,body資料是被壓縮的,最常見的壓縮方式是gzip,所以,看到content-encoding:gizp時,需要將body資料先解壓縮,才能得到真正的資料。壓縮的目的在減少body的大小,加快網路傳輸。
設定壓縮方式:response.setHeader("Content-Encoding","gzip");
請求壓縮方式:Accept-Encoding: gzip, deflate, br
http協議的特點
- 基於B/S模式,即客戶伺服器模式。
- 通訊開銷小,簡單快速,傳輸成本低
- 使用靈活:超文字協議,允許伺服器和客戶端傳輸任意型別或者任意資料結構的資料物件。
- 節省傳輸時間。
- 可能影響傳輸效率,無狀態。
- https://www.cnblogs.com/binyue/p/4500578.html
doGet和doPost
1、生成方式
Get有四種:
A、直接在url位址列中輸入url
B、網頁中的超連結
C、form中的method為get
D、form中的method為空時,模式是get提交
Post只知道有一種,form中method屬性為post
2、資料傳送方式
Get方式:表單資料存放在url地址後面,所有get方式提交時HTTP中沒有訊息體。
Post方式:表單資料存放在http協議體中以實體的方式傳送到伺服器。
3、伺服器獲取資料方式
Get方式:伺服器採用request.QueryString來獲取變數的值。
Post方式:伺服器採用request.Form來獲取資料。
4、傳送的資料量
Get方式:資料量有長度限制,一般不超過2kb.因為是引數傳遞,且在位址列中,所有資料量有限制。
Post方式:適合大規模的資料傳送。因為是以實體的方式傳送的。
5、安全性
Get方式:安全性差,因為是直接將資料顯示在位址列中,瀏覽器有快取,可記錄使用者資訊,所以安全性低。
Post方式:安全性高。因為post方式提交資料時是採用的http post機制,是將表單中的欄位與值防止在http header內一起傳送到action所指的url中,使用者是看不見的。
6、在使用者重新整理時:
Get方式:不會有任何提示。
Post方式:會彈出提示框,問使用者是否重新提交。
7、總結
-
get是把引數資料佇列加到提交表單的action屬性所指的url中,post是通過http post機制,將表單內的各個欄位與其內容放置在html header中一起傳送到action屬性所致的url地址。使用者看不到這個過程。
-
Get方式,伺服器端用request.queryString獲取變數的值,對於post方式,伺服器端用request.form獲取提交的資料。
-
Get傳送的資料量比較小,不能大於2kb,post傳送的資料量比較大,一般預設為不受限制。但理論上IIS4為80k,IIS5為100k.
-
Get安全性非常低,post安全性高,但是執行效率get比post好,建議:包含機密資訊的話用post方式,資料新增、修改、刪除用post方式,資料查詢讀取相關用get方式。