同源策略
- 瀏覽器的安全機制,要求端口,域名,協(xié)議一致
- 作用在于保護(hù)用戶數(shù)據(jù)安全,防止惡意網(wǎng)站獲取用戶信息,阻止CSRF,XSS攻擊
具體限制
- ajax請求:不同源請求會被阻止
- DOM訪問: iframe,window.open等創(chuàng)建的新的窗口只能訪問同源的頁面,不同源的DOM不允許直接修改
- Cookie,LocalStorage,IndexDB:這些存儲機制也遵循同源策略,不同源無法互相訪問
- service Workers:必須與注冊頁同源
繞過同源策略的手段
- CORS:允許服務(wù)器設(shè)置特定的HTTP頭來指示瀏覽器允許哪些來源的請求 Access-Control-Allow-Origin,
- JSONP:早期的跨域解決方案,通過script標(biāo)簽執(zhí)行遠(yuǎn)程腳本并利用毀掉函數(shù)處理返回的數(shù)據(jù),但是只能用于GET
- WebSocket
- PostMessage: 允許不同窗口間安全通信,通過window.postMessage()發(fā)送信息,在接收端通過message事件堅挺
- 服務(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í)行流程
- 瀏覽器發(fā)送OPTIONS請求,獲取服務(wù)器的CORS配置信息,此請求包含一些關(guān)鍵header,例如Access-Control-Request-Method, Access-Control-Request-Headers
- 服務(wù)器接收到預(yù)請求后,根據(jù)其牌紙返回相應(yīng)的CORS請求以及跨域請求相關(guān)的信息
- 瀏覽器處理響應(yīng):瀏覽器根據(jù)返回的響應(yīng)決定是否繼續(xù)發(fā)送實際請求。
性能優(yōu)化
- 設(shè)置緩存預(yù)檢請求,Access-Control-Max-Age,減少預(yù)檢請求的頻率
- 盡量使用簡單請求:(GET,HEAT , POST ,使用標(biāo)準(zhǔn)頭部字段,Accept,Accept-Language , Content-Type但是值必須是text/plain,application/x-www-form-urlencoded,multipart/form-data)
- 減少自定義頭部
總結(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 個請求。
- 在HTTP1.0迷人情況下是不支持的,需要明確設(shè)置Connection: keep-alive 頭部啟動
- HTTP1.1是默認(rèn)支持的,
GET方法中URL長度限制的原因
- 瀏覽器限制:瀏覽器是直接處理用戶輸入和展示頁面的工具,需要在性能和兼容之間權(quán)衡。
- 早期瀏覽器設(shè)定URL長度限制大約2083個字符,為了向后兼容
- 處理過長的URL會占用大量內(nèi)存,導(dǎo)致渲染效率降低
- 防止?jié)撛诠?,例如URL中包含大量無效數(shù)據(jù),會導(dǎo)致瀏覽器崩潰或者緩沖區(qū)溢出
- Web服務(wù)器限制
- 中間設(shè)備限制
- 客戶端和服務(wù)器之間的數(shù)據(jù)傳輸可能會經(jīng)過多個網(wǎng)絡(luò)設(shè)備,例如代理服務(wù)器,防火墻,負(fù)載均衡等,這些設(shè)備會對URL長度進(jìn)行限制
- 安全性考慮
- 超長的URL可能被用于各種攻擊,例如緩沖區(qū)溢出或拒絕服務(wù)器攻擊等
總結(jié)
為保證兼容性,安全性,還有性能通常URL長度控制在2000個字符以內(nèi)。如果傳輸大量數(shù)據(jù),使用POST
URL組成
- 定義:網(wǎng)絡(luò)中的唯一資源地址,是瀏覽器用于檢索已發(fā)布資源的關(guān)鍵機制之一
組成: - 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ù)的機密性,完整性和身份驗證
工作原理
- 客戶端發(fā)起HTTPS請求
- 服務(wù)端響應(yīng)并發(fā)送證書
- 證書包含:服務(wù)器的公鑰,CA證書,證書的有效期,持有者
- 客戶端驗證證書
- 證書鏈
- 證書有效期
- 證書撤銷狀態(tài)
- 協(xié)商會話密鑰(TLS握手)
- 密鑰交換
- 完成握手
- 加密通信
- 對稱加密
- MAC(消息認(rèn)證碼)
- 會話復(fù)用與優(yōu)化