【JavaWeb】Http協議

Http協議入門

從一個簡單的例子入手

(1)啓動tomcat服務器;
(2)在瀏覽器(這裏用的Chrome)輸入URL:
http://localhost:8080/myweb/index.jsp(網頁事先已經建好);
這裏寫圖片描述
(3)右鍵審查元素(如果是火狐,需要使用firebug插件:右鍵->firebug->網絡);
(4)點擊Network -> Headers -> view source
這裏寫圖片描述

這時,就可以看到瀏覽器的請求和服務器的響應詳情。

http請求

  • 一個完整的HTTP請求包括:一個請求行、若干請求頭、以及實體內容
GET /myweb/index.jsp HTTP/1.1  //請求行

/*
*多個請求頭(多個key-value對象)
*/
Host: localhost:8080
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: zh-CN,zh;q=0.8
Cookie: JSESSIONID=27E506D9063D7F10CB3C4E1FE554E1EF

//一個空行

/*
*(可選)實體內容
*/

請求行

http協議版本:

  • http1.0:當前瀏覽器客戶端與服務器端建立連接之後,只能發送一次請求,一次請求之後連接關閉。
  • http1.1:當前瀏覽器客戶端與服務器端建立連接之後,可以在一次連接中發送多次請求。(基本都使用1.1)

請求資源:

  • URL: 統一資源定位符。http://localhost:8080/myweb/index.jsp。只能定位互聯網資源。是URI 的子集。
  • URI: 統一資源標記符。/myweb/index.jsp。用於標記任何資源。可以是本地文件系統,局域網的資源,也可以是互聯網資源。

請求方式:

  • 常見的請求方式: GET 、 POST、 HEAD、 TRACE、 PUT、 CONNECT 、DELETE 等 。

  • 常用的請求方式: , POST , DELETE , PUT , GET , 分別代表增刪改查。

請求頭

  • Accept:用於告訴服務器,客戶機支持的數據類型
  • Accept-Charset:用於告訴服務器,客戶機採用的編碼格式
  • Accept-Encoding:用於告訴服務器,客戶機支持數據壓縮格式
  • Accept-Language:客戶機的語言環境
  • Host:客戶機通過這個頭告訴服務器,想訪問的主機名
  • If-Modified-Since:客戶機通過這個頭告訴服務器,資源的緩存時間
  • Refer:客戶機通過這個頭告訴服務器,它是從哪個資源訪問服務器的(防盜鏈)
  • User-Agent:客戶機通過這個頭告訴服務器,客戶機的軟件環境
  • Cookie:客戶機通過這個頭向服務器帶數據
  • Connection:這個請求完了,是保持連接還是關閉
  • Range:斷點下載
    • bytes=n1-n2,傳輸範圍n1到n2字節
    • bytes=n-,傳輸web資源中第n個字節以後的所有內容
    • bytes=n,傳輸最後n個字節
  • Date: 請求發出的時間

實體內容

  • 只有POST提交的參數會放到實體內容中

http響應

  • 同樣的,一個完整的HTTP響應包括:一個響應行、若干響應頭、以及實體內容
HTTP/1.1 200 OK //響應行

/*
*若干個響應頭(多個key-value對象)
*/
Server: Apache-Coyote/1.1
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 953
Date: Mon, 13 Feb 2017 07:04:33 GMT

//一個空行

/*
*(可選)實體內容
*/

響應行

http協議版本:

  • 同上;

狀態碼: 服務器處理請求的結果(狀態):

這裏寫圖片描述

狀態描述:

  • 響應成功:OK
  • 找不到資源:Not Found
  • 等等

響應頭

  • Location:這個頭配合302狀態碼使用,用於告訴客戶機找誰(location和302實現請求重定向)
  • Server:服務器通過這個頭,告訴瀏覽器服務器的類型
  • Content-Encoding:服務器通過這個頭,數據的壓縮格式
    (相關java知識:GZIPOutputStream,包裝流/底層流)
  • Content-Length:服務器通過這個頭,告訴瀏覽器回送數據的長度
  • Content-Type:服務器通過這個頭,告訴瀏覽器回送數據的類型
  • Last-Modified:服務器通過這個頭,告訴瀏覽器當前資源的緩存時間
  • Refresh:服務器通過這個頭,告訴瀏覽器隔多長時間刷新一次
  • Content-Disposition:服務器通過這個頭,告訴瀏覽器以下載方式打開
  • Transfer-Encoding:服務器通過這個頭,告訴瀏覽器數據的傳送格式
  • Etag:緩存相關的頭部,用於實時性要求高的系統
  • Expires:服務器通過這個頭,告訴瀏覽器把回送的資源緩存多長時間,-1或0則不緩存
  • Cache-Control和Pragma:no-cache,服務器通過這兩個頭,也是控制瀏覽器不要緩存數據
  • Connection:斷開連接/保持連接
  • Date:當前時間
  • Accept-Ranges:用來說明web服務器是否支持range。支持返回bytes;不支持返回none
  • Content-Range:制定了返回web資源的字節範圍,格式:n1-n2/n_total
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章