近期沒需求,也沒什么心情去看書,就總結一下自己以前看的HTTP協議基礎內容吧。(會很亂,可能不適合一點都沒接觸過HTTP協議的人觀看)
一、HTTP Request header
1、Cache頭域
if-Modified-since:緩存
if-None-Match:可提高性能(在Response中添加ETag信息,客戶端再次請求資源,Request中加入if-None-Match(ETag的值),服務器驗證ETag,若沒改變返回狀態碼304,有改變,返回狀態碼200)
Pragma:防止頁面被緩存
Cache-Control:Response—Request遵循的緩存機制
public:可以被任何緩存所緩存
private:內容只緩存在私有緩存中
no-cache:所有內容都不會被緩存
2、Client頭域
Accept:瀏覽器可以接受的文件類型(Accept:text/html 表示瀏覽器可接受服務器返回的文件類型為text/html)
Accept-Encodig:指定壓縮方法,是否支持壓縮,支持什么壓縮方法(gzip、deflate)
Accept-Language:瀏覽器申明自己的接收語言
User-Accept:告知服務器客戶端使用的操作系統與瀏覽器的名稱和版本
Accept-chareset:瀏覽器申明自己接收的字符集。如gb2312,UTF_8
3、Cookie/Login頭域
Cookie:將cookie的值發送給服務器
4、Entity頭域
Content-Length:發送給HTTP服務器的數據長度
Content-Type:決定文件接收方將以什么形式、什么編碼讀取此文件
5、Miscellaneous頭域
Referer:提供了Request的上下文信息,告訴服務器我是從哪個鏈接過來的
A------>B(B的服務器從Referer中統計有多少用戶是從A過來的)
6、Transport頭域
connection:Keep—alive TCP連接不會關閉
connection:close 一個Request完成后,TCP連接關閉
7、Host:發送請求時,該報頭域是必需的。主要用於指定被請求資源的Internet主機和端口號,通常從HTTP URL 中提取出來
二、HTTP Response header
1、Cache頭域
Date:生成消息的具體時間和日期
Expires:瀏覽器在指定過期時間內使用本地緩存
2、Cookie/Login頭域
P3P:用戶跨域設置cookie,可以解決iframe跨域訪問cookie的問題
Set-Cookie:重要的header,用於把cookie發送到客戶端瀏覽器,每一個寫入cookie都會生成一個set-cookie
3、Entity頭域
ETag:與if-None-Match配合使用
Last-Modified:用於指示資源的最后修改日期和時間
Content-Type:Web服務器告知瀏覽器自己響應對象的類型和字符集
Content-Length:指明實體正文長度,以字節方式存儲的十進制數字表示。在數據下行中,要預先在服務器中緩存所有數據,然后所有數據一並發給客戶端
Content-Encoding:Web服務器表明自己用了什么壓縮方式(gzip、deflate)壓縮響應中的對象
Content-Language:服務器告知瀏覽器自己響應的對象語言
4、Miscellaneous頭域
Server:指明HTTP服務器的軟件信息
X-Powered-By:表明網站是用什么技術開發的
X-AspNet-Version:如果網站是用Asp/Net開發的,這個header用來表明Asp/Net的版本
5、Transport頭域
connection:Keep—alive TCP連接不會關閉
connection:close 一個Request完成后,TCP連接關閉
6、Location頭域
Location:用於重定向一個新的位置,包括新的URL地址
三、網絡分層(這個是順手加上)
下層只會向上層提供服務,但不會從上層獲取服務。
1、OSI模型(從低到高)
物理層---->數據鏈路層---->網絡層---->傳輸層---->會話層---->表示層---->應用層
2、TCP/IP模型(從低到高)
網絡接口層------>網絡層(IP)------>傳輸層(TCP、UDP)------>應用層(HTTP/FTP等協議)
3、實際應用中的因特網協議棧
物理層---->鏈路層---->網絡層---->傳輸層---->應用層
四、HTTP認證過程
1、客戶端發送HTTP Request給服務器;
2、Request中未包含Authorization header,服務器會返回一個401錯誤給客戶端,且在Response中的header“www-Authenticate”中添加信息;
3、客戶端將用戶名和密碼以base64加密后,放在Authorization中發送給服務器,認證成功;
4、服務器將Authorization header中的用戶名和密碼去除,進行驗證。如果驗證通過,將根據請求發送資源給客戶端;
HTTP OAuth認證:OAuth對於http來說,就是放在Authorization header中的不是用戶名密碼,而是一個token(令牌)。
客戶端的使用:客戶端若要跟“使用基本認證的網站”進行交互,將用戶名密碼加載Authorization header中即可。