網(wǎng)絡(luò)協(xié)議

同源策略

  1. 瀏覽器的安全機制,要求端口,域名,協(xié)議一致
  2. 作用在于保護(hù)用戶數(shù)據(jù)安全,防止惡意網(wǎng)站獲取用戶信息,阻止CSRF,XSS攻擊

具體限制

  1. ajax請求:不同源請求會被阻止
  2. DOM訪問: iframe,window.open等創(chuàng)建的新的窗口只能訪問同源的頁面,不同源的DOM不允許直接修改
  3. Cookie,LocalStorage,IndexDB:這些存儲機制也遵循同源策略,不同源無法互相訪問
  4. service Workers:必須與注冊頁同源

繞過同源策略的手段

  1. CORS:允許服務(wù)器設(shè)置特定的HTTP頭來指示瀏覽器允許哪些來源的請求 Access-Control-Allow-Origin,
  2. JSONP:早期的跨域解決方案,通過script標(biāo)簽執(zhí)行遠(yuǎn)程腳本并利用毀掉函數(shù)處理返回的數(shù)據(jù),但是只能用于GET
  3. WebSocket
  4. PostMessage: 允許不同窗口間安全通信,通過window.postMessage()發(fā)送信息,在接收端通過message事件堅挺
  5. 服務(wù)端代理: 在服務(wù)端設(shè)置代理,將跨域請求轉(zhuǎn)發(fā)個目標(biāo)服務(wù)器,將結(jié)果返回給客戶端

CSRF

惡意網(wǎng)站偽造用戶請求來執(zhí)行用戶在另一個網(wǎng)站上的操作

XSS

攻擊者注入惡意腳本,導(dǎo)致用戶信息泄露或賬戶劫持。

Node端

在Express 中使用cors 插件 設(shè)置 origin

Nginx

HTTP中的options預(yù)請求

當(dāng)涉及到跨域請求的時候,瀏覽器就會在某些情況下自動發(fā)送一個OPTIONS請求,主要是為了確保跨域請求對服務(wù)器不會產(chǎn)生意外的副作用,它會在實際請求之前,詢問目標(biāo)服務(wù)器是否允許這樣的請求,并檢查請求方法和頭部是否被接受,預(yù)檢請求主要用于“非簡單請求”。不是所有的跨域請求都會觸發(fā)預(yù)檢請求,是否觸發(fā)還取決于是否是簡單請求,簡單請求不會觸發(fā),非簡單請求會觸發(fā)

執(zhí)行流程

  1. 瀏覽器發(fā)送OPTIONS請求,獲取服務(wù)器的CORS配置信息,此請求包含一些關(guān)鍵header,例如Access-Control-Request-Method, Access-Control-Request-Headers
  2. 服務(wù)器接收到預(yù)請求后,根據(jù)其牌紙返回相應(yīng)的CORS請求以及跨域請求相關(guān)的信息
  3. 瀏覽器處理響應(yīng):瀏覽器根據(jù)返回的響應(yīng)決定是否繼續(xù)發(fā)送實際請求。

性能優(yōu)化

  1. 設(shè)置緩存預(yù)檢請求,Access-Control-Max-Age,減少預(yù)檢請求的頻率
  2. 盡量使用簡單請求:(GET,HEAT , POST ,使用標(biāo)準(zhǔn)頭部字段,Accept,Accept-Language , Content-Type但是值必須是text/plain,application/x-www-form-urlencoded,multipart/form-data)
  3. 減少自定義頭部

總結(jié)

OPTIONS預(yù)檢請求是CORS機制中的一個關(guān)鍵部分,幫助確??缬虻陌踩?。

Keep-Alive

Keep-Alive: 可以在同一個TCP連接上進(jìn)行多個請求個響應(yīng),從而減少連接建立和關(guān)閉的開銷,提高性能。需要根據(jù)業(yè)務(wù)需求和服務(wù)器負(fù)載情況來調(diào)整配置,避免潛在的資源枯竭問題。

Connection: keep-alive
Keep-Alive: timeout=5, max=100 
// timeout=5:表示連接在空閑 5 秒鐘后會被關(guān)閉。
// max=100:表示最多可以在該連接上發(fā)送 100 個請求。
  1. 在HTTP1.0迷人情況下是不支持的,需要明確設(shè)置Connection: keep-alive 頭部啟動
  2. HTTP1.1是默認(rèn)支持的,

GET方法中URL長度限制的原因

  1. 瀏覽器限制:瀏覽器是直接處理用戶輸入和展示頁面的工具,需要在性能和兼容之間權(quán)衡。
    1. 早期瀏覽器設(shè)定URL長度限制大約2083個字符,為了向后兼容
    2. 處理過長的URL會占用大量內(nèi)存,導(dǎo)致渲染效率降低
    3. 防止?jié)撛诠?,例如URL中包含大量無效數(shù)據(jù),會導(dǎo)致瀏覽器崩潰或者緩沖區(qū)溢出
  2. Web服務(wù)器限制
  3. 中間設(shè)備限制
    1. 客戶端和服務(wù)器之間的數(shù)據(jù)傳輸可能會經(jīng)過多個網(wǎng)絡(luò)設(shè)備,例如代理服務(wù)器,防火墻,負(fù)載均衡等,這些設(shè)備會對URL長度進(jìn)行限制
  4. 安全性考慮
    1. 超長的URL可能被用于各種攻擊,例如緩沖區(qū)溢出或拒絕服務(wù)器攻擊等

總結(jié)

為保證兼容性,安全性,還有性能通常URL長度控制在2000個字符以內(nèi)。如果傳輸大量數(shù)據(jù),使用POST

URL組成

  1. 定義:網(wǎng)絡(luò)中的唯一資源地址,是瀏覽器用于檢索已發(fā)布資源的關(guān)鍵機制之一
    組成:
  2. scheme(協(xié)議) HTTPS/ HTTP
    host(域名)
    port
    pathname
    parameter(查詢字符串)
    anchor(錨點) 是網(wǎng)頁內(nèi)部的定位點.比如:#anchor。瀏覽器加載頁面以后,會自動滾動到錨點所在的位置,錨點名稱通過網(wǎng)頁元素的id屬性命名。

HTTPS

是一種用于安全通信的協(xié)議,在HTTP的基礎(chǔ)上增加了SSL/TLS,確保了數(shù)據(jù)的機密性,完整性和身份驗證

工作原理

  1. 客戶端發(fā)起HTTPS請求
  2. 服務(wù)端響應(yīng)并發(fā)送證書
    1. 證書包含:服務(wù)器的公鑰,CA證書,證書的有效期,持有者
  3. 客戶端驗證證書
    1. 證書鏈
    2. 證書有效期
    3. 證書撤銷狀態(tài)
  4. 協(xié)商會話密鑰(TLS握手)
    1. 密鑰交換
    2. 完成握手
  5. 加密通信
    1. 對稱加密
    2. MAC(消息認(rèn)證碼)
  6. 會話復(fù)用與優(yōu)化
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容