HTTP
1.基本概念
1.1.1 URI
URI包含URL和URN
2. 請求和響應報文
2.1.請求報文
=GET和POST請求的實例=
GET /search/users?q=JakeWharton HTTP/1.1 ---請求行
-----以下都是請求頭
Host: api.github.com
Connection: keep-alive 指定與連接相關的屬性,例如(Keep_Alive,長連接)
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/73.0.3683.86 Safari/537.36 發送請求的應用名稱
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3
Accept-Encoding: gzip, deflate, br通知服務器端可以發送的數據壓縮格式
Accept-Language: zh-CN,zh;q=0.9通知服務器端可以發送的語言
Cookie: _octo=GH1.1.1623908978.1549006668; _ga=GA1.2.548087391.1549006688; logged_in=yes; dotcom_user=GoMarck; _gid=GA1.2.17634150.1554639136; _gat=1
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-urlencode d
Content-Length: 40
Connection: Keep-Alive ----以上是請求頭
----空行
name=Professional%20Ajax&publisher=Wiley--請求數據(正文)
2.2.響應報文
3.HTTP報文實現細節
3.1響應頭主要字段
3.2HTTP狀態碼
-
1xx 服務器收到請求 ,需要請求者繼續執行操作
100 Continue:表明到目前爲止都很正常,客戶端可以繼續發送請求或者忽略這個響應
-
2xx
200 OK 204 No Content :請求已經成功處理,但是返回的響應報文不包含實體的主體部分。一般在只需要從客戶端 往服務器發送信息,而不需要返回數據時使用。 206 Partial Content :表示客戶端進行了範圍請求,響應報文包含由 Content-Range 指定範圍的實體內容。
3xx 重定向
301 Moved Permanently :永久性重定向 資源(網頁等)被永久轉移到其它URL 302 Found :臨時性重定向 資源臨時移動 303 See Other :和 302 有着相同的功能,但是 303 明確要求客戶端應該採用 GET 方法獲取資源。 注:雖然 HTTP 協議規定 301、302 狀態下重定向時不允許把 POST 方法改成 GET 方法,但是大多數瀏覽器都 會在 301、302 和 303 狀態下的重定向把 POST 方法改成 GET 方法。 304 Not Modified :如果請求報文首部包含一些條件,例如:If-Match,If-Modified-Since,If-NoneMatch,If-Range,If-Unmodified-Since,如果不滿足條件,則服務器會返回 304 狀態碼。 307 Temporary Redirect :臨時重定向,與 302 的含義類似,但是 307 要求瀏覽器不會把重定向請求的 POST 方法改成 GET 方法。資源已經重新分配
-
4xx 客戶端請求錯誤:
400 Bad Request :請求報文中存在語法錯誤 401 Unauthorized :該狀態碼錶示發送的請求需要有認證信息(BASIC 認證、DIGEST 認證)。如果之前已進 行過一次請求,則表示用戶認證失敗。 403 forbidden請求資源被拒絕,通常原因是服務器上某些文件或目錄設置了權限,客戶端權限不夠 404 not found、找不到請求資源,用戶輸入錯誤的鏈接,該鏈接指向的網頁不存在;除此之外,也可以在服務器端拒絕請求且不想說明理由時使用。
-
5xx 服務器錯誤:
500 internal server error服務器故障,服務器內部錯誤(比如瀏覽器代理除了問題,ip,端口不對等)該狀態碼錶明服務器端在執行請求時發生了錯誤。也有可能是Web應用存在的bug或某些臨時的故障 502,Bad Gateway,作爲網關或者代理工作的服務器嘗試執行請求時,從遠程服務器接收到了一個無效的響應 503,服務器超載或停機維護 504,Gateway Timeout網關超時 服務器作爲網關或代理,未及時從上游服務器接收請求。 505 HTTP Version Not Supported
3.3 HTTP方法
3.3.1 GET方法
當前網絡請求中,絕大部分使用的是 GET 方法。
作用:獲取資源
3.3.2 HEAD
和 GET 方法類似,但是不返回報文實體主體部分。 主要用於確認 URL 的有效性以及資源更新的日期時間等。
作用:獲取報文首部
3.3.3 POST
POST 主要用來傳輸數據,而 GET 主要用來獲取資源
作用:傳輸實體主體
3.3.4 PUT
由於自身不帶驗證機制,任何人都可以上傳文件,因此存在安全性問題,一般不使用該方法。
作用:上傳文件
PUT /new.html HTTP/1.1
Host: example.com
Content-type: text/html Content-length: 16
<p>New File</p>
3.3.5 PATCH
PUT 也可以用於修改資源,但是隻能完全替代原始資源,PATCH 允許部分修改。
作用:對資源進行部分修改
PATCH /file.txt HTTP/1.1
Host: www.example.com
Content-Type: application/example If-Match: "e0023aa4e"
Content-Length: 100
[description of changes]
3.3.6 DELETE
與 PUT 功能相反,並且同樣不帶驗證機制。
作用:刪除文件
DELETE /file.html HTTP/1.1
3.3.7 OPTIONS
查詢指定的 URL 能夠支持的方法。
會返回 Allow: GET, POST, HEAD, OPTIONS 這樣的內容。
作用:查詢支持的方法
3.3.8 CONNECT
作用:要求在與代理服務器通信時建立隧道
使用 SSL(Secure Sockets Layer,安全套接層)和 TLS(Transport Layer Security,傳輸層安全)協議把通信內容 加密後經網絡隧道傳輸
3.4 HTTP首部(頭部)
有 4 種類型的首部字段:通用首部字段、請求首部字段、響應首部字段和實體首部字段。
1.通用首部字段
2.請求首部字段
3.響應首部字段
4.實體首部字段
4.具體應用
4.1 連接管理
4.1.1 短連接與長連接
4.1.2 流水線
4.2 Cookie
HTTP 協議是無狀態的,主要是爲了讓 HTTP 協議儘可能簡單,使得它能夠處理大量事務。HTTP/1.1 引入 Cookie 來 保存狀態信息。
】
4.2.1 Cookie的用途
4.2.2 創建過程
服務器發送的響應報文包含 Set-Cookie 首部字段,客戶端得到響應報文後把 Cookie 內容保存到瀏覽器中。
HTTP/1.0 200 OK
Content-type: text/html
Set-Cookie: yummy_cookie=choco
Set-Cookie: tasty_cookie=strawberry
[page content]
4.2.3 Cookie的分類
- 會話期 Cookie:瀏覽器關閉之後它會被自動刪除,也就是說它僅在會話期內有效。
- 持久性 Cookie:指定過期時間(Expires)或有效期(max-age)之後就成爲了持久性的 Cookie。
Set-Cookie: id=a3fWa; Expires=Wed, 21 Oct 2015 07:28:00 GMT;
4.2.4 Secure
4.3 Session
除了可以將用戶信息通過 Cookie 存儲在用戶瀏覽器中,也可以利用 Session 存儲在服務器端,存儲在服務器端的信 息更加安全。
Session在服務器的存儲位置
使用 Session 維護用戶登錄狀態的過程如下:
安全性:
4.4 瀏覽器禁用Cookie
4.5 Cookie和Session的選擇
4.6 緩存
1.優點
2.實現
1.讓代理服務器進行緩存
2.讓客戶端瀏覽器進行緩存
3. Cache-Control
HTTP/1.1 通過 Cache-Control 首部字段來控制緩存。
4.緩存操作
1.禁止緩存
2.強制確認緩存
3.私有緩存和公共緩存
4.緩存過期機制
ps:圖片大部分來源於cyc大佬,然後自己截圖並添加備註,僅供自己學習並做筆記使用