1.http基礎(chǔ)概念
2.請求與響應(yīng)過程
3.請求頭響應(yīng)頭及請求方式簡述
4.客戶端緩存(cookie,session及其他緩存機制)
1.什么是http????
HTTP是一套計算機通過網(wǎng)絡(luò)進(jìn)行通信的規(guī)則。使HTTP客戶(如Web瀏覽器)能夠從HTTP服務(wù)器(Web服務(wù)器)請求信息和服務(wù),HTTP是一種無狀態(tài)的協(xié)議。
1.1無狀態(tài)的協(xié)議
無狀態(tài)是指Web瀏覽器和Web服務(wù)器之間不需要建立持久的連接,
這意味著當(dāng)一個客戶端向服務(wù)器端發(fā)出請求,然后Web服務(wù)器返回響應(yīng)(response),連接就被關(guān)閉了
2. 一次完整的http請求
域名解析:
(1) 瀏覽器首次搜索自身的DNS緩存,檢查自身的緩存(緩存時間大概為 幾分鐘)中有沒有相應(yīng)的域名IP地址。如果有,則檢查是否過期,如果沒有過期,那么將結(jié)果返回并結(jié)束域名解析的過程;否則,往下執(zhí)行;
(2) 在瀏覽器自身沒找到IP地址的話,瀏覽器就會在操作系統(tǒng)搜索DNS緩存。如果存在,同樣需要檢查是否過期;
(3) 如果操作系統(tǒng)中也沒有找到,那么就讀取本地的HOST文件(在C盤下:Windows\System32\drivers\etc),在本地文件里面查找;
(4) 如果在本地HOST文件下也沒能找到,那么瀏覽器發(fā)起一個DNS的系統(tǒng)調(diào)用。過程如下:
寬帶運營商服務(wù)器查看本地緩存,如果找到就結(jié)束該過程,否則繼續(xù)執(zhí)行;
寬帶運營商服務(wù)器代替瀏覽器發(fā)起一個迭代DNS的請求:首先找到根域的DNS IP地址拿到頂級域COM域的IP地址;接著在COM域服務(wù)器的地址中尋找主域名(如:imooc.com)的DNS服務(wù)器的地址;最后在主域名DNS服務(wù)器中找到請求的域名的IP地址,主域名DNS服務(wù)器就將該地址發(fā)送給運營商服務(wù)器。這個時候運營商服務(wù)器將結(jié)果返回給操作系統(tǒng)內(nèi)核,然后內(nèi)核從操作系統(tǒng)DNS服務(wù)器上拿去IP地址并返回給瀏覽器,最后就是瀏覽器拿到了請求域名的IP地址。
( 1 ) 建立TCP連接
三次握手 建立連接
( 2 ) 瀏覽器向服務(wù)器發(fā)送請求命令
( 3 ) 服務(wù)器響應(yīng)
( 4 ) Web服務(wù)器關(guān)閉TCP連接
請求方式:
GET
GET是http的默認(rèn)請求方式,一般用來獲取數(shù)據(jù),傳輸?shù)臄?shù)據(jù)經(jīng)過url編碼后放在路徑?之后,多個鍵值對通過&連接,另外get的傳輸長度一般不推薦超過255個字節(jié)。
GET方法一般被視為安全方法, 因為它僅用來獲取數(shù)據(jù)而不會對服務(wù)器有其他改動。像HEAD、GET、OPTIONS 和 TRACE這幾種http方法是被認(rèn)為是“安全的”,它們只會進(jìn)行獲取數(shù)據(jù)而不會修改服務(wù)器的狀態(tài),可用于記錄日志、創(chuàng)建緩存或者創(chuàng)建其他統(tǒng)計信息。相反,像POST、PUT、DELETE 和 PATCH 等方法是有可能產(chǎn)生副作用。網(wǎng)絡(luò)爬蟲等一般不會使用這些方式
POST
POST一般用來上傳文件或者提交一個完整的web表單。瀏覽器中提交表單時,這里與get類似,每個鍵值對都是通過&分割, 其他非字母數(shù)字會進(jìn)行url轉(zhuǎn)碼。
其他請求方式
- HEAD獲取某個URI響應(yīng)頭信息,基本與GET相同但是不返回響應(yīng)主體。
- PUT通過提供的URI獲取到特定的內(nèi)容主體,如果存在則修改內(nèi)容,如果不存在則創(chuàng)建。
- DELETE通過URI刪除指定內(nèi)容
- TRACE返回接受到的請求,用來查看數(shù)據(jù)經(jīng)過中間服務(wù)器時發(fā)生了哪些變動
- OPTIONS返回給定URL支持的所有HTTP方法,這樣可以用來檢查web服務(wù)器的功能
- CONNECT要求使用SSL和TLS進(jìn)行TCP通信
- PATCH請求修改局部數(shù)據(jù)
這些請求方法本質(zhì)上沒有區(qū)別,最終都是TCP請求,唯一的區(qū)別就是每個請求方法,使用的時候,規(guī)范規(guī)定的使用格式不同,原則上必須按照規(guī)范規(guī)定的格式使用,其實也可以違反規(guī)范使用,比如你可以使用GET方法請求數(shù)據(jù),也可以使用GET方法提交數(shù)據(jù),當(dāng)然你可以用POST方法提交數(shù)據(jù),也可以用POST方法獲取數(shù)據(jù)。
下面是Chrome發(fā)起的http請求報文頭部信息:

- Accept 就是告訴服務(wù)器端,我接受那些MIME類型
- Accept-Encoding 接受哪些壓縮方式的文件
- Accept-Lanague 告訴服務(wù)器能夠發(fā)送哪些語言
- Connection 告訴服務(wù)器支持keep-alive特性
- Cookie 每次請求時都會攜帶上Cookie以方便服務(wù)器端識別是否是同一個客戶端
- Host 用來標(biāo)識請求服務(wù)器上的那個虛擬主機,比如Nginx里面可以定義很多個虛擬主機.那這里就是用來標(biāo)識要訪問那個虛擬主機。
- User-Agent 用戶代理,一般情況是瀏覽器,也有其他類型,如:wget curl 搜索引擎的蜘蛛等
- 安全請求首部:
- Authorization: 客戶端提供給服務(wù)器的認(rèn)證信息;
- accessToken: 一般作為請求操作時的訪問令牌,比如你讓用戶用QQ登陸后要去拿用戶的QQ頭像,這時候向騰訊API發(fā)送請求時就需要帶上access_token。
響應(yīng)頭:

- Access-Control-Allow-Credentials: 允許跨域
- Access-Control-Allow-Headers: 允許訪問的請求頭
- Access-Control-Allow-Methods: 請求方式
- Access-Control-Allow-Origin: 域名
- Access-Control-Expose-Headers:
- Transfer-Encoding:chunked 分塊傳輸編碼 是http中的一種數(shù)據(jù)傳輸機制,允許HTTP由網(wǎng)頁服務(wù)器發(fā)送給客戶端應(yīng)用(通常是網(wǎng)頁瀏覽器)的數(shù)據(jù)可以分成多個部分
拓展:(WebSocket) 有狀態(tài)
需要通過瀏覽器發(fā)出websocket連線請求,然后服務(wù)器發(fā)出回應(yīng),瀏覽器和服務(wù)器之間就形成了一條快速通道。兩者之間就直接可以數(shù)據(jù)互相傳送。
特點:持久的連接
互相溝通的Header是很小的-大概只有 2 Bytes
服務(wù)器不再被動的接收到瀏覽器的請求之后才返回數(shù)據(jù),而是在有新數(shù)據(jù)時就主動推送給瀏覽器。
webSocket api
- 創(chuàng)建webSocket對象
var Socket = new WebSocket(url, [protocol] );//第一個參數(shù) url, 指定連接的 URL。第二個參數(shù) protocol 是可選的,指定了可接受的子協(xié)議。
-
方法:
QQ截圖20180114160210.png
詳細(xì)了解 參考資料(https://www.zhihu.com/question/20215561)
瀏覽器存儲機制
cookie、localstorage、sessionStorage

cookie的內(nèi)容主要包括:名字、值、過期時間、路徑和域
Secure – 安全
指定cookie的值通過網(wǎng)絡(luò)如何在用戶和WEB服務(wù)器之間傳遞。
這個屬性的值或者是“secure”,或者為空。缺省情況下,該屬性為空,也就是使用不安全的HTTP連接傳遞數(shù)據(jù)。如果一個 cookie 標(biāo)記為secure,那么,它與WEB服務(wù)器之間就通過HTTPS或者其它安全協(xié)議傳遞數(shù)據(jù)。不過,設(shè)置了secure屬性不代表其他人不能看到你機器本地保存的cookie。換句話說,把cookie設(shè)置為secure,只保證cookie與WEB服務(wù)器之間的數(shù)據(jù)傳輸過程加密,而保存在本地的 cookie文件并不加密。如果想讓本地cookie也加密,得自己加密數(shù)據(jù)。
Web Storage的概念和cookie相似,區(qū)別是它是為了更大容量存儲設(shè)計的。Cookie的大小是受限的,并且每次你請求一個新的頁面的時候Cookie都會被發(fā)送過去,這樣無形中浪費了帶寬,另外cookie還需要指定作用域,不可以跨域調(diào)用。
除此之外,Web Storage擁有setItem,getItem,removeItem,clear等方法,不像cookie需要前端開發(fā)者自己封裝setCookie,getCookie。
最主要的區(qū)別:
- localStorage生命周期是永久,這意味著除非用戶顯示在瀏覽器提供的UI上清除localStorage信息,否則這些信息將永遠(yuǎn)存在。
- sessionStorage生命周期為當(dāng)前窗口或標(biāo)簽頁,一旦窗口或標(biāo)簽頁被永久關(guān)閉了,那么所有通過sessionStorage存儲的數(shù)據(jù)也就被清空了。
Cache
1.Application Cache
html5提供的一種應(yīng)用緩存機制,使得基于web的應(yīng)用程序可以離線運行。優(yōu)點有如下幾點:
離線瀏覽: 用戶可以在離線狀態(tài)下瀏覽網(wǎng)站內(nèi)容。
更快的速度: 因為數(shù)據(jù)被存儲在本地,所以速度會更快。
減輕服務(wù)器的負(fù)載: 瀏覽器只會下載在服務(wù)器上發(fā)生改變的資源。
使用:
1.開啟應(yīng)用緩存:在html標(biāo)簽制定manifest,manifest特性與 緩存清單(cache manifest) 文件關(guān)聯(lián),這個文件包含了瀏覽器需要為你的應(yīng)用緩存的資源(文件)列表

2.編寫緩存清單文件

CACHE:
這是緩存文件中記錄所屬的默認(rèn)段落。在 CACHE: 段落標(biāo)題后(或直接跟在 CACHE MANIFEST 行后)列出的文件會在它們第一次下載完畢后緩存起來。
NETWORK:
在 NETWORK: 需要與服務(wù)器連接的白名單資源。所有類似資源的請求都會繞過緩存,即使用戶處于離線狀態(tài)??梢允褂猛ㄅ浞?”代表除以上指定之外全部需要從服務(wù)器拉取。
FALLBACK:
FALLBACK: 段指定了一個后備頁面,當(dāng)資源無法訪問時,瀏覽器會使用該頁面。該段落的每條記錄都列出兩個 URI—第一個表示資源,第二個表示后備頁面。兩個 URI 都必須使用相對路徑并且與清單文件同源。可以使用通配符,類似404.html。
CACHE, NETWORK, 和 FALLBACK 段落可以以任意順序出現(xiàn)在緩存清單文件中,并且每個段落可以在同一清單文件中出現(xiàn)多次。
