最權威的文檔html
https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html跨域
然而閱讀起來難度有點大呢
因此能夠看看HTTP權威指南 以及圖解HTTP(很好的入門書)數組
一個HTTP請求 是由請求頭和請求體組成的 不過呢GET請求是沒有請求體的 POST纔有瀏覽器
一個請求/響應的大體結構:
header(包括請求行 請求首部字段 通用首部字段 實體首部字段)
空行(CR+LF)
body
緩存
一個GET請求服務器
GET /books/?name=Professional%20Ajax HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Connection: Keep-Aliveapp
一個純文本的POST請求測試
POST / HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive
(此處空一行)
name=Professional%20Ajax&publisher=Wiley編碼
發送圖片等二進制數組的POST請求加密
POST / HTTP/1.1
Host: www.wrox.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: multipart/form-data; boundary=----WebKitFormBoundaryPh3G5pOw90P9pzQW
Content-Length: 35827
Connection: Keep-Alive
------WebKitFormBoundaryPh3G5pOw90P9pzQW
Content-Disposition: form-data; name="file"; filename="2015-11-20 235622.jpg"
Content-Type: image/jpeg
------WebKitFormBoundaryPh3G5pOw90P9pzQW--
一個響應
HTTP/1.1 200 OK
Date: Sat, 31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122
(此處空一行)
<html>
....
Allow: GET, POST, PUT, OPTIONS
PS 這些Action並非所有 還有一些擴展的方法
200 請求成功 響應有響應體
204 請求成功處理 可是返回的報文不包括body
206 Partical Content 響應的報文中包含了Content-Range指定的範圍實體內容
301 永久移動 表示資源已經被從新分配了URI
302 臨時移動 臨時移動並非說資源暫時移至別處後會回到原來的位置 實際意思是雖然資源分配了新的URI 可是這個URI仍是會改變的額
303 和302同樣 可是303表示客戶端應當使用GET
304 當客戶端發送了附帶條件的請求的時候 服務端運算後發現條件不成立 返回304 (條件不成立表示服務器的資源沒有更新 可使用緩存) 返回304的時候不包括響應體
條件請求 If-Match If-Modifiled-Since If-None-Match If-Range If-Unmodified-Since
307 臨時重定向 和302相似 可是302規定禁止從POST變成GET
400 Bad Request 報文存在語法錯誤
401 未受權 此時瀏覽器會彈出一個框要求輸入用戶名和密碼
403 禁止訪問這個資源(從未受權的IP地址發出的訪問)
404
500
503 服務器超負載狀態 或者處於停機維護
PS URL是URI(統一資源標識符)的子集
好比下面也都是URI
mailto:xxx@xx.com temlnet://xx.xx.xx.xx:80/
Web服務器能夠用文件的擴展名來講明MIME的類型
請求和響應都有的字段 (HTTP權威指南71頁)
首部字段名 | 說明 |
---|---|
Cache-Control | 控制緩存行爲 |
Connection | 容許客戶端和服務器指定與請求響應鏈接有關選項 |
Date | HTTP報文建立時間 |
Pragma | Cache-Control的HTTP1.0兼容 |
Trailer | .. |
Transfer-Encoding | 報文編碼方式 |
Upgrade | .. |
Via | 報文通過的中間節點 |
首部字段名 | 說明 |
---|---|
Accept | 用戶代理可處理的媒體類型 |
Accept-Charset | 優先的字符集 |
Accept-Encoding | 優先的內容編碼 |
Accept-Language | 用戶語言 |
Authorization | Web認證信息 |
Except | 期待服務器的特定行爲 |
HOST | 給出了接收請求的服務器的主機名和端口號 |
If-Match | 比較實體標記Etag |
If-Modified-Since | 比較資源更新時間 |
If-Unmodified-Since | If-Modified-Since相反 |
If-None-Match | 和If-Match相反 |
Max-Forwards | 最大傳輸跳數 |
Proxy-Authorization | 代理服務器認證信息 |
Range | 實體範圍請求 |
If-Range | 資源未更新時 發送實體範圍請求 單位是Byte |
Referer | URI來源 |
TE | 傳輸編碼優先級 |
User-Agent | HTTP客戶端信息 |
首部字段名 | 說明 |
---|---|
Accept-Ranges | 是否接受字節範圍的請求 |
Age | 原服務器建立響應後到如今通過的時間 單位爲秒 |
Etag | 資源的信息 |
Location | 重定向URI |
Proxy-Authenticate | 代理服務器與客戶端的認證信息 |
Retry-After | 若是資源不可用的話,在此日期或時間重試 |
Server | 服務器應用程序軟件的名稱和版本 |
WWW-Authenticate | 服務器和客戶端的認證信息 |
首部字段名 | 說明 |
---|---|
Allow | 該資源能夠支持的HTTP方法或其餘 好比是否容許跨域 |
Content-Type | 實體媒體類型 |
Content-Location | |
Content-Length | |
Content-Language | |
Content-MD5 | |
Expires | 過時時間 |
Last-Modified | 最後修改時間 |
在規定時間內 都認爲內容是新鮮的 緩存能夠任意使用這些副本 無需和服務器聯繫
Expires: Sat, 29 June 2002, 14:30:00 GMT
OR
Cache-Control: max-age=43220
max-age表示從服務器響應的時候開始 此資源處於新鮮狀態的時間長度
PS
Cache-Control是HTTP1.1中才有的 Expires是HTTP1.0就有
僅僅是資源超過了規定時間可是並不意味着服務器上的資源更新了
HTTP向原始服務器發送一個條件GET 服務器自行判斷 在緩存資源和服務器中的資源不一樣的時候才返回對象 (這個時候纔有響應體)
這也就是常說的條件GET 只有條件成立 服務器才返回對象 不成立 則返回304
最經常使用的是 If-Modified-Since 和 If-None-Match
在GET請求資源的時候降入這個首部
請求
If-Modified-Since: Sat, 29 June 2002, 14:30:00 GMT If-None-Match: <tags>
響應
HTTP/1.0 304 Not Modified Date: Wed, 03 Jul 2002, 19:22:00 GMT Expires: Fri, 05 Jul 2002, 19:22:00 GMT
那麼If-Modified-Since發送的時間到底是何時呢
一般是和 Last-Modefied 這個響應的首部 配合
一個資源第一次請求 服務器的響應包含了Last-Modefied的話
下一次再次發送請求就會有If-Modified-Since 字段 , 值就是Last-Modefied的值
If-None-Match也是一樣道理 配合服務器響應的Etag首部
Etag是文件的標識, 標識規則是服務器來肯定, 因此要發送的If-None-Match的值也就是
該資源第一次請求服務器響應的Etag值
PS 若是響應中既有Last-Modefied 和 Etag 只有二者都知足的時候才返回304