亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 開發 > JS > 正文

你可能不知道的CORS跨域資源共享

2024-05-06 16:49:01
字體:
來源:轉載
供稿:網友

什么是CORS?

默認情況下,為預防某些而已行為,瀏覽器的XHR對象只能訪問來源于同一個域中的資源。但是我們在日常實際開發中,常常會遇到跨域請求的需求,因此就出現了一種跨域請求的方案:CORS(Cross-Origin Resource Sharing)跨域資源共享。

CORS背后的原理是:使用自定的HTTP頭部與服務器進行溝通,從而由服務器決定響應是否成功。

了解下同源策略

  • 源(origin)*:就是協議、域名和端口號;
  • 同源: 就是源相同,即協議、域名和端口完全相同;
  • 同源策略:同源策略是瀏覽器的一個安全功能,不同源的客戶端腳本在沒有明確授權的情況下,不能讀寫對方資源;
  • 同源策略的分類:
    • DOM 同源策略:即針對于DOM,禁止對不同源頁面的DOM進行操作;如不同域名的 iframe 是限制互相訪問。
    • XMLHttpRequest 同源策略:禁止使用 XHR 對象向不同源的服務器地址發起 HTTP 請求。
  • 不受同源策略限制:
    • 頁面中的鏈接,重定向以及表單提交(因為表單提交,數據提交到action域后,本身頁面就和其沒有關系了,不會管請求結果,后面操作都交給了action里面的域)是不會受到同源策略限制的。
    • 資源的引入不受限制,但是js不能讀寫加載的內容:如嵌入到頁面中的<script src="..."></script>,<img>,<link>,<iframe>等

為什么要跨域限制

  • 如果沒有 DOM 同源策略:那么就沒有啥xss的研究了,因為你的網站將不是你的網站,而是大家的,誰都可以寫個代碼操作你的網站界面
  • 如果沒有XMLHttpRequest 同源策略,那么就可以很輕易的進行CSRF(跨站請求偽造)攻擊:
    • 用戶登錄了自己的網站頁面 a.com,cookie中添加了用戶標識。
    • 用戶瀏覽了惡意頁面 b.com,執行了頁面中的惡意 AJAX 請求代碼。
    • b.com 向 a.com發起 AJAX HTTP 請求,請求會默認把 a.com對應cookie也同時發送過去。
    • a.com從發送的 cookie 中提取用戶標識,驗證用戶無誤,response 中返回請求數據;數據就泄露了。而且由于Ajax在后臺執行,這一過程用戶是無法感知的。
  • (附)有了XMLHttpRequest 同源策略就可以限制CSRF攻擊?別忘了還有不受同源策略的:表單提交和資源引入,(安全問題下期在研究)

跨域決解方案

  • JSONP 跨域:借鑒于 script 標簽不受瀏覽器同源策略的影響,允許跨域引用資源;因此可以通過動態創建 script 標簽,然后利用 src 屬性進行跨域;
    • 缺點:
    • 所有網站都可以拿到數據,存在安全性問題,需要網站雙方商議基礎token的身份驗證。
    • 只能是GET,不能POST。
    • 可能被注入惡意代碼,篡改頁面內容,可以采用字符串過濾來規避此問題。
  • 服務器代理:瀏覽器有跨域限制,但是服務器不存在跨域問題,所以可以由服務器請求所要域的資源再返回給客戶端。
  • document.domain、window.name 、location.hash:借助于iframe決解DOM同源策略
  • postMessage:決解DOM同源策略,新方案
  • CORS(跨域資源共享):這里講的重點

CORS(跨域資源共享)

  • HTML5 提供的標準跨域解決方案,是一個由瀏覽器共同遵循的一套控制策略,通過HTTP的Header來進行交互;主要通過后端來設置CORS配置項。

CORS簡單使用

之前說得CORS跨域,嗯嗯,后端設置Access-Control-Allow-Origin:*|[或具體的域名]就好了;

第一次嘗試:

app.use(async(ctx,next) => { ctx.set({ "Access-Control-Allow-Origin": "http://localhost:8088"})

發現有些請求可以成功,但是有些還是會報錯:

CORS,跨域,資源共享

請求被同源策略阻止,預請求的響應沒有通過檢查:http返回的不是ok?

并且發現發送的是OPTIONS請求:

CORS,跨域,資源共享

發現:CORS規范將請求分為兩種類型,一種是簡單請求,另外一種是帶預檢的非簡單請求

簡單請求和非簡單請求

瀏覽器發送跨域請求判斷方式:

  • 瀏覽器在發送跨域請求的時候,會先判斷下是簡單請求還是非簡單請求,如果是簡單請求,就先執行服務端程序,然后瀏覽器才會判斷是否跨域;
  • 而對于非簡單請求,瀏覽器會在發送實際請求之前先發送一個OPTIONS的HTTP請求來判斷服務器是否能接受該跨域請求;如果不能接受的話,瀏覽器會直接阻止接下來實際請求的發生。

什么是簡單請求

1、請求方法是如下之一:

  • GET
  • HEAD
  • POST

2、所有的Header都只包含如下列表中(沒有自定義header):

  • Cache-Control
  • Content-Language
  • Content-Type
  • Expires
  • Last-Modified
  • Pragma

除此之外都是非簡單請求

CORS非簡單請求配置須知

正如上圖報錯顯示,對于非簡單請求,瀏覽器會先發送options預檢,預檢通過后才會發送真是的請求;

發送options預檢請求將關于接下來的真實請求的信息給服務器:

Origin:請求的源域信息
Access-Control-Request-Method:接下來的請求類型,如POST、GET等
Access-Control-Request-Headers:接下來的請求中包含的用戶顯式設置的Header列表

服務器端收到請求之后,會根據附帶的信息來判斷是否允許該跨域請求,通過Header返回信息:

Access-Control-Allow-Origin:允許跨域的Origin列表
Access-Control-Allow-Methods:允許跨域的方法列表
Access-Control-Allow-Headers:允許跨域的Header列表,防止遺漏Header,因此建議沒有特殊需求的情況下設置為*
Access-Control-Expose-Headers:允許暴露給JavaScript代碼的Header列表
Access-Control-Max-Age:最大的瀏覽器預檢請求緩存時間,單位為s

CORS完整配置

koa配置CORS跨域資源共享中間件:

const cors = (origin) => { return async (ctx, next) => {  ctx.set({   "Access-Control-Allow-Origin": origin, //允許的源  })  // 預檢請求  if (ctx.request.method == "OPTIONS") {   ctx.set({    'Access-Control-Allow-Methods': 'OPTIONS,HEAD,DELETE,GET,PUT,POST', //支持跨域的方法    'Access-Control-Allow-Headers': '*', //允許的頭    'Access-Control-Max-Age':10000, // 預檢請求緩存時間    // 如果服務器設置Access-Control-Allow-Credentials為true,那么就不能再設置Access-Control-Allow-Origin為*,必須用具體的域名    'Access-Control-Allow-Credentials':true // 跨域請求攜帶身份信息(Credential,例如Cookie或者HTTP認證信息)   });   ctx.send(null, '預檢請求')  } else {   // 真實請求   await next()  } }}export default cors

現在不管是簡單請求還是非簡單請求都可以跨域訪問啦~

跨域時如何處理cookie

cookie:

  • 我們知道http時無狀態的,所以在維持用戶狀態時,我們一般會使用cookie;
  • cookie每次同源請求都會攜帶;但是跨域時cookie是不會進行攜帶發送的;

問題:

  • 由于cookie對于不同源是不能進行操作的;這就導致,服務器無法進行cookie設置,瀏覽器也沒法攜帶給服務器(場景:用戶登錄進行登錄操作后,發現響應中有set-cookie但是,瀏覽器cookie并沒有相應的cookie)

決解:

  • 瀏覽器請求設置withCredentials為true即可讓該跨域請求攜帶 Cookie;使用axios配置axios.defaults.withCredentials = true
  • 服務器設置Access-Control-Allow-Credentials=true允許跨域請求攜帶 Cookie

總結

以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,謝謝大家對VeVb武林網的支持。


注:相關教程知識閱讀請移步到JavaScript/Ajax教程頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩欧美在线视频观看| 国产成人精品久久| 麻豆成人在线看| 亚洲图片欧美日产| 欧美亚洲成人xxx| 日韩精品中文字幕有码专区| 国产一区二区成人| 国产精品综合网站| 国产成人精品av在线| 国产mv免费观看入口亚洲| 在线精品播放av| 欧美高清不卡在线| 久久在线免费视频| 欧美国产日韩中文字幕在线| 欧美激情一级欧美精品| 亚洲肉体裸体xxxx137| 日韩经典中文字幕在线观看| 久久这里有精品视频| 色播久久人人爽人人爽人人片视av| 亚洲国产精品资源| 久久人人爽人人爽人人片av高请| 91高清视频免费| 亚洲国产黄色片| 国产日韩欧美夫妻视频在线观看| 97精品国产97久久久久久春色| 国产一区二区视频在线观看| 亚洲欧美第一页| 97久久超碰福利国产精品…| 97av在线影院| 久久91亚洲精品中文字幕奶水| 久久精品视频在线| 日本欧美在线视频| 国产精品极品在线| 亚洲国产中文字幕在线观看| 亚洲最大的成人网| 深夜成人在线观看| 色七七影院综合| 日韩成人av一区| 91免费高清视频| 免费av一区二区| 97视频色精品| 日本精品久久久久影院| 亚洲自拍偷拍色片视频| 日韩黄色av网站| 国产精品久久久久久久app| 97精品国产91久久久久久| 日韩精品高清在线| 最近2019年中文视频免费在线观看| 午夜精品久久久久久久白皮肤| 538国产精品一区二区在线| 精品国产欧美成人夜夜嗨| 日本最新高清不卡中文字幕| 国产精品一区二区三区久久久| 欧美一级片久久久久久久| 久久天天躁狠狠躁夜夜躁| 色哟哟亚洲精品一区二区| 欧美性20hd另类| 亚洲国内高清视频| 成人黄色免费片| 欧美性在线视频| 国产精品xxxxx| 欧美性xxxxxx| 97视频免费在线看| 色综合五月天导航| 精品无码久久久久久国产| 亲子乱一区二区三区电影| 亚洲精品久久久久久久久久久| 亚洲嫩模很污视频| 欧美日韩在线视频首页| 亚洲成色999久久网站| 日本午夜人人精品| 中文字幕亚洲专区| 中文字幕日韩精品在线观看| 日韩av影视综合网| 欧美性猛交丰臀xxxxx网站| 久久久99免费视频| 国产精品流白浆视频| 色偷偷88888欧美精品久久久| 日韩亚洲欧美成人| 国产免费一区二区三区香蕉精| 国产91在线播放精品91| 欧美—级a级欧美特级ar全黄| 欧美性受xxxx白人性爽| 亚洲女人天堂色在线7777| 狠狠躁夜夜躁人人爽天天天天97| 欧美在线欧美在线| 26uuu另类亚洲欧美日本老年| 国产精品国模在线| 欧美高清视频一区二区| 久久久久久久久久婷婷| 丁香五六月婷婷久久激情| 国产日韩在线免费| 91网站在线看| 97超级碰碰人国产在线观看| 97免费中文视频在线观看| 韩国日本不卡在线| 日韩中文字幕免费视频| 在线观看精品国产视频| 国内精品久久影院| 亚洲男人天堂久| 亚洲的天堂在线中文字幕| 欧美在线影院在线视频| 色伦专区97中文字幕| 欧美日韩一区二区在线播放| 中文国产成人精品| 日韩av电影在线免费播放| 精品无人区太爽高潮在线播放| 国产婷婷成人久久av免费高清| 亚洲色图综合久久| 日韩成人av在线播放| 久久久久久久一| 国产成人精品久久二区二区| 亚洲精品国精品久久99热| 国产精品久久婷婷六月丁香| 91久久精品国产91久久| 亚洲国产精品资源| 91国语精品自产拍在线观看性色| 日韩电影中文字幕一区| 不卡毛片在线看| 国产精品成人aaaaa网站| 日韩av手机在线观看| 国产精品免费在线免费| 欧美性猛xxx| 欧美性生活大片免费观看网址| 亚洲欧美另类自拍| 亚洲精品黄网在线观看| 国产成人aa精品一区在线播放| 成人免费网站在线看| 久久影视电视剧凤归四时歌| 91国偷自产一区二区三区的观看方式| 亚洲精品福利免费在线观看| 久久91精品国产91久久跳| 最新国产精品亚洲| 精品一区精品二区| 欧美黑人性猛交| 欧美二区在线播放| 久久中文字幕在线视频| 国产精品高清在线| 久久全球大尺度高清视频| 欧美在线性爱视频| 亚洲xxxxx| 亚洲欧洲第一视频| 性色av一区二区咪爱| 国内精品视频在线| 亚洲精品有码在线| 97婷婷大伊香蕉精品视频| 亚洲成色999久久网站| 日本最新高清不卡中文字幕| 日本久久久久亚洲中字幕| 日韩av在线精品| 亚洲精品影视在线观看| 色综合久久久久久中文网| 国产福利精品av综合导导航| 久久中文字幕一区| 国内偷自视频区视频综合| 2019亚洲男人天堂| 亚洲欧美精品suv| 77777亚洲午夜久久多人| 亚洲精品午夜精品| 亚洲a级在线播放观看| 欧美亚洲伦理www| 亚洲理论电影网| 欧美日韩在线一区| 午夜剧场成人观在线视频免费观看|