最近在慕課上買了Jokcy老師的HTTP課程 學習過程中做了一些總結
1.瀏覽器輸入URL後HTTP請求返回的完整過程
Redirect 跳轉 ----> App cache 應用快取 ----> DNS DNS查詢 ----> TCP 建立TCP連結 ---->Request 傳送請求 ----> Response 接收響應
2-1 網路模型介紹
低三層
物理層主要作用是定義物理裝置如何傳輸資料
資料鏈路層在通訊的實體間建立資料鏈路連線
網路層為資料在結點之間傳輸建立邏輯鏈路
傳輸層 TCP UDP
向使用者提供可靠的端到端(End-to-End)服務,傳輸層向高層遮蔽了下層資料通訊的細節
應用層 HTTP
構建於TCP協議之上 ,遮蔽了網路傳輸相關細節
2-2 HTTP協議的發展歷史
HTTP/0.9 只有一個命令GET 沒有HEADER等描述資料的資訊 伺服器傳送完畢 就關閉TCP連線
HTTP/1.0 增加了命令 staus code 和 header
HTTP/1.1 持久連線 增加了host(同一個物理伺服器 選擇node還是java等軟體伺服器)和其他一些命令
HTTP/2 完全多路複用的,而非有序並阻塞的 , 所有資料以二進位制傳輸 , 同一個連線裡面傳送多個請求不再需要按照順序來 ,頭資訊壓縮以及推送(伺服器可以主動向客戶端傳送資源 如 在伺服器端解析HTML文字 不等客戶端來解析HTML檔案 同步傳送CSS JS等資源)等提高效率的功能
2-3 三次握手
通過三次握手規避 網路傳輸中延遲導致資料丟失的連線空置未關閉的問題
2-4 URI、URL 、URN
Uniform Resource Identifier/統一資源標誌符
Uniform Resource Locator/統一資源定位器
http://user:pass@host.com:80/path?query = string#hash
協議 使用者資訊驗證 IP地址 埠號 路由? 引數 #hash
URN 永久統一資源定位符
2-5 HTTP報文格式
首行 URL METHOD STATUS CODE等
HEADER Connection Content-Type等
HTTP方法 用來定義對於資源的操作 GET POST PUT DELETE OPTIONS
HTTP CODE 定義伺服器對請求的處理結果
3 HTTP各種特效
3-2 CORS跨域請求的限制與解決
Content-Tpye 設定 瀏覽器解析的 檔案格式 text/html 、 text/plain等
伺服器 設定 Access-Control-Allow-Origin:‘*’, 跨域時, 伺服器得到請求後是返回了資料 只是瀏覽器收到的Access-Control-Allow-Origin告訴瀏覽器跨域了 不需要解析 就將響應結果 攔截掉 並在控制行 報錯
瀏覽器允許 link img script等標籤 載入資源 不需要伺服器設定允許跨域的頭
JSONP 實現原理 在script等標籤里載入了一個連結
3-3 CORS跨域限制以及預請求驗證
CORS限制
預設允許方法 GET HEAD POST
允許Content-Type text/plain 、multipart/form-data 、 application/x-www-form-urlencoded
其他限制
請求頭限制 自定義請求頭等
XMLHttpRequestUpload物件均沒有註冊任何事件監聽器
設定允許
Access-Control-Allow-Origin:'*' 允許的URL
Access-Control-Allow-Headers:‘允許的headers’
Access-Control-Max-Age:'1000' 允許的跨域時間
預請求驗證 客戶端會有一個OPTIONS去驗證正式的請求是否允許傳送
3-4 快取頭Cache-Control的含義和使用
可快取性 public 、private 只有發起的客戶端才能快取、 no-cache 只有通過伺服器端驗證才能使用客戶端快取
到期時間 max-age =<seconds> 、s-maxage=<seconds>代理伺服器才會應用 、max-stale=<seconds>
重新驗證 must-revalidate 、proxy-revalidate
其他 no-store 不使用快取 直接重新請求資料 、no-transform
3-5 快取驗證Last-Modified和Etag的使用
Last-Modified 上次修改時間
Etag 資源簽名 判斷客戶端快取的資原始檔與 在伺服器端的資原始檔 是否相同 如果相同則直接使用客戶端快取資源 如果不同則需要重新請求
3-6 cookie和session
max-age 和 expires設定過期時間
Secure只有HTTPS的時候傳送
HttpOnly無法通過document.cookie訪問
3-7 HTTP長連線
Connection: keep-alive 長連線 /close 短連線 可以在伺服器設定 長連線關閉時間
HTTP請求是基於 TCP連線上 進行傳送的 ,一個TCP連線上可以傳送多個HTTP請求,HTTP1.1中 HTTP請求在TCP連線上傳送有先後順序 HTTP2.0中 一個TCP連線可以併發多個同域的HTTP請求
3-8 資料協商
Accept:text/html, application/xhtml+xml, application/xml, image/webp , image/apng
客戶端希望伺服器返回的資源型別,並非強限制
Accept-Encodeing: gzip , defalate ,br 壓縮檔案的演算法
Accept-Language: zh-CN,zh,q=0.9 ,en;q=0.8 接收的語言 和對應的優先順序權重
Content-Type text/plain 檔案原始碼 、multipart/form-data 將表單(enctype)提交的資料分為多個部分,檔案不能作為字串傳輸,要轉為二進位制進行傳輸 、 application/x-www-form-urlencoded URL上的CODE
3-8 Redirect
302 臨時跳轉
301 永久跳轉 告知瀏覽器快取 當前URL永久跳轉到新的URL 不需要伺服器告知
3-9 CSP
Content-Security-Policy 內容安全策略
Content-Security-Policy:‘default-src http:https’只能載入http https請求的資料 script外聯載入的資源就不允許
Content-Security-Policy:‘default-src \‘self’\’只能載入本站伺服器的資源
Content-Security-Policy:‘script-src \‘self’\’只限制Script需要是本站伺服器資源
4-1 Nginx安裝和基礎代理配置
http://nginx.org/en/download.html 下載nginx 壓縮包然後解壓
git bash 裡面 通過 在目錄下 ./nginx.exe 執行
在代理過程中 http明文傳輸的所有東西是不可靠的 可以被代理修改 https可以保證 內容在傳輸過程中不被修改
4-2 Nginx代理配置和代理快取的用處
Cache-Control:'max-age=5,s-maxage=20,private' max-age表示本地快取時間 ,s-maxage表示代理快取時間 private表示只有本地快取時間生效 no-store表示都不快取
Vary:'X-Test-Cache = 0' 驗證頭資訊一致再使用快取
4-3 HTTPS解析
私鑰 只存在伺服器上,用於解密字串
公鑰 存在網際網路上,所有人都能拿到的加密字串
私鑰、公鑰 主要用在握手時進行一個傳輸
4-4 使用Nginx部署HTTPS服務
開啟SSL配置
ssl on
4-5 HTTP2的優勢和Nginx配置HTTP2的簡單使用
HTTP2 優勢
通道複用
資料分幀傳輸 同一個連線中可以併發傳送不同的http請求,並沒有先後順序
Server Push
Nginx開啟HTTP2配置
HTTP原理
HTTP技術點
Nginx實踐、面向未來的HTTP