1. 程式人生 > >http請求相關知識

http請求相關知識

 

請求

  1. 瀏覽器首先向伺服器傳送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協議的特點

  1. 基於B/S模式,即客戶伺服器模式。
  2. 通訊開銷小,簡單快速,傳輸成本低
  3. 使用靈活:超文字協議,允許伺服器和客戶端傳輸任意型別或者任意資料結構的資料物件。
  4. 節省傳輸時間。
  5. 可能影響傳輸效率,無狀態。
  6. 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、總結

  1. get是把引數資料佇列加到提交表單的action屬性所指的url中,post是通過http post機制,將表單內的各個欄位與其內容放置在html header中一起傳送到action屬性所致的url地址。使用者看不到這個過程。

  2. Get方式,伺服器端用request.queryString獲取變數的值,對於post方式,伺服器端用request.form獲取提交的資料。

  3. Get傳送的資料量比較小,不能大於2kb,post傳送的資料量比較大,一般預設為不受限制。但理論上IIS4為80k,IIS5為100k.

  4. Get安全性非常低,post安全性高,但是執行效率get比post好,建議:包含機密資訊的話用post方式,資料新增、修改、刪除用post方式,資料查詢讀取相關用get方式。