肆、HTTP協定

一、基本格式:

  1. 分成 HTTP HEAD 和 HTTP DATA 兩大段落,兩段之間用兩個換行隔開。
  2. HTTP HEAD 通常在首行放「方法 URI 協定版本」,如「GET /socketTest2.php?xx=yy HTTP/1.1」,協定版本也可以放在其他行。
  3. HEAD的其他部分放變數,變數名和變數值用「:」間開,變數與變數用空白或換行間開,換行較為安全。

二、請求方法:請求指定的Web頁面、程式或特定的URL。

  1. GET: 客戶端向伺服器請求指定頁面的資訊,並送回客戶端,也稱下載。所以只後送 header 不帶內容。
  2. POST:客戶端向伺服器傳送數據,也稱上傳。在 HEAD 部分說明上傳數據的種類及長度。
  3. HEAD:只請求頁面的首部。
  4. PUT: 從客戶端向伺服器傳送的數據取代指定的文檔的內容。
  5. DELETE:請求伺服器刪除指定的頁面。
  6. MOVE:請求伺服器將指定的頁面移至另一個網路地址。
  7. COPY:請求伺服器將指定的頁面拷貝至另一個網路地址。
  8. OPTIONS:允許客戶端查看伺服器的性能。
  9. TRACE:請求伺服器在響應中的實體主體部分返回所得到的內容。
  10. PATCH:實體中包含一個表,表中說明與該URI所表示的原內容的區別。
  11. LINK:請求伺服器建立鏈接關係。
  12. UNLINK:斷開鏈接關係。
  13. WRAPPED:允許客戶端發送經過封裝的請求。
  14. Extension-mothed:在不改動協定的前提下,可增加另外的方法。

三、伺服器回應狀態代碼:(status code)

status code
1 客戶方錯誤
  100  繼續
  101  交換協定
2 成功
  200  OK
  201  已創建
  202  接收
  203  非認證資訊
  204  無內容
  205  重置內容
  206  部分內容
3 重定向
  300  多路選擇
  301  永久轉移
  302  暫時轉移
  303  參見其它
  304  未修改(Not Modified)
  305  使用代理
4 客戶方錯誤
  400  錯誤請求(Bad Request)
  401  未認證
  402  需要付費
  403  禁止(Forbidden)
  404  未找到(Not Found)
  405  方法不允許
  406  不接受
  407  需要代理認證
  408  請求超時
  409  衝突
  410  失敗
  411  需要長度
  412  條件失敗
  413  請求實體太大
  414  請求URI太長
  415  不支援媒體類型
5 伺服器錯誤
  500  伺服器內部錯誤
  501  未實現(Not Implemented)
  502  網關失敗
  504  網關超時
  505 HTTP版本不支援

四、HEAD 中的常見變數:(舉例)

  1. 主機:host:jendo.org或host:127.0.0.1
  2. 內容長度:Content-length:整數(單位 byte )。POST必要。
  3. 內容類型:Content-type:見下段諸型別。POST必要。
  4. Referer:http://10.10.10.10/ly/index.php
  5. 瀏覽器:User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; .NET CLR 1.1.4322)
  6. 允許接收型別:Accept:image/gif,image/x-xbitmap,image/jpeg,image/pjpeg,*/*
  7. 允許接收編碼:Accept-Encoding: gzip, deflate
  8. 連線方式:Connection: Keep-Alive
  9. 持續連線:Keep-Alive: timeout=5, max=100
  10. 快取:Cache-Control: no-cache
  11. 允許的請求方法:Allow: GET, HEAD, OPTION, TRACE
  12. 時間:Date: Fri, 02 Sep 2011 08:51:40 GMT
  13. 伺服器資訊:Server: Apache/2.2.16 (Unix) PHP/5.3.3
  14. X-Powered-By: PHP/5.3.3
  15. 不同:Vary: Accept-Encoding
  16. 說明有無使用壓縮技術,如 gzip :Content-Encoding: gzip
  17. 說明採用的編碼變換類型,如 chunked(分塊):Transfer-encoding:chunked。
  18. 請求文檔的最近修改時間:Last Modified:。
  19. 請求文檔的過期時間:Expires:。
  20. 通知客戶端需要的認證資訊:WWW-authenricate:。

五、內容類型:(Content-Type)

使用 MIME (多用途網際網路郵件擴展,Multipurpose Internet Mail Extensions) 標準。格式為「Content-Type: [type]/[subtype]; parameter」。type 如下:

常見的 subtype 如下:

此外,尚未被接受為正式數據類型的subtype,可以使用x-開始的獨立名稱(例如application/x-gzip)。vnd-開始的固有名稱也可以使用(例:application/vnd.ms-excel)。

parameter可以用來指定附加的資訊,更多情況下是用於指定text/plain和text/htm等的文字編碼方式的charset參數。 MIME根據type制定了預設的subtype,當客戶端如不能確定內容的subtype,內容以預設的subtype進行處理。Text預設是 text/plain , Application 預設是 application/octet-stream 而 Multipart 預設情況下被看作 multipart/mixed。

六、版本差異:(請參考 https://codertw.com/程式語言/496897/)

操作講解:https://notfalse.net/39/http-message-format

七、例子:(/* 註解 */)

例一:請求一個網頁檔回來,要有 URI 
GET /index.html HTTP/1.1 /*瀏覽器使用Get方法請求檔案 /index.html*/
Accept: text/plain /*只允許接收純ASCII碼文本文件*/
Accept: text/html /*只允許接收HTML文本文件*/
User-Agent:Mozilla/4.5(WinNT) /*使用的引擎是Mozilla/4.5(Netscape)*/
例二:取回某網站的 HTTP header
HEAD / HTTP/1.1
host:www.fudan.edu.cn /*本行為輸入內容*/
回應
HTTP/1.1 501 Method Not Implemented
Date: Web, 01 Nov 2000 07:12:29 GMT /*當前的日期/時間*/
Server: Apache/1.3.12 (Unix) /*Web伺服器資訊*/
Allow: GET, HEAD, OPTION, TRACE /*支援的請求類型*/
Connection: close
Connect-Type: Text/html; charset=iso-8859-1/*連接的媒體類型*/
例三:POST後送兩變數給 /login.jsp,重要
POST /login.jsp HTTP/1.1
Host: www.mysite.com
User-Agent: Mozilla/4.0
Content-Length: 27 /* 資料的長度 */
Content-Type: application/x-www-form-urlencoded
/* 兩次換行 */
userid=joe&password=guessme