HTTP協議基礎

Leon Aries發表於2018-10-26

最近在慕課上買了Jokcy老師的HTTP課程 學習過程中做了一些總結

1.瀏覽器輸入URL後HTTP請求返回的完整過程

Redirect 跳轉 ----> App  cache 應用快取 ----> DNS   DNS查詢 ----> TCP 建立TCP連結 ---->Request 傳送請求 ----> Response 接收響應

HTTP協議基礎

2-1 網路模型介紹

HTTP協議基礎

低三層

物理層主要作用是定義物理裝置如何傳輸資料

資料鏈路層在通訊的實體間建立資料鏈路連線

網路層為資料在結點之間傳輸建立邏輯鏈路


傳輸層 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 三次握手

HTTP協議基礎

通過三次握手規避 網路傳輸中延遲導致資料丟失的連線空置未關閉的問題

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-Methods:‘GET, PUT, POST, DELETE, HEAD’允許的方法

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的使用



HTTP協議基礎

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協議基礎

在代理過程中 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解析

私鑰    只存在伺服器上,用於解密字串

公鑰    存在網際網路上,所有人都能拿到的加密字串

私鑰、公鑰 主要用在握手時進行一個傳輸

HTTP協議基礎

4-4 使用Nginx部署HTTPS服務

開啟SSL配置

HTTP協議基礎

ssl on 

HTTP協議基礎

4-5 HTTP2的優勢和Nginx配置HTTP2的簡單使用

HTTP2 優勢

通道複用

資料分幀傳輸      同一個連線中可以併發傳送不同的http請求,並沒有先後順序

Server Push 

Nginx開啟HTTP2配置 

HTTP協議基礎


HTTP原理

HTTP技術點

Nginx實踐、面向未來的HTTP


相關文章