精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

跨域是個什么鬼,你搞明白了嗎?

網絡 通信技術
跨域是個老生常談的話題了,最近不管在和后端聯調,或者搞微前端的時候都會遇到,正好寫篇文章來總結一下吧。

[[433686]]

跨域是個老生常談的話題了,最近不管在和后端聯調,或者搞微前端的時候都會遇到,正好寫篇文章來總結一下吧。

跨域是什么

這里的“跨域”指的是不同源之間的資源訪問。只要請求的 url 有以下不同,都屬于“跨域”:

  • 協議: http, https, ...
  • 域名
  • 端口

有人可能會覺得,我自己網站肯定只訪問自己服務器,肯定都是部署在一個域名的呀。

但是有的時候,一個網頁可能要對接后端多個服務:一會對接支付,一會對接用戶信息。每個組的后端可能都會有自己的域名。在這樣的場景下,跨域就非常常見了。

為什么會有跨域

我們常說的“跨域”問題,其實是在說“跨域”訪問的限制問題,相信大家對下面的報錯習以為常了:

這種“跨域”限制其實是 瀏覽器自帶的安全機制,只有 在瀏覽器上 發生跨域請求操作時,瀏覽器就會自動拋出上面的錯誤。

注意,這僅在瀏覽器上會出現這樣的限制,如果你用 Postman 這些工具訪問 url 是沒有“跨域”限制的,畢竟 Postman 連域名這些玩意都沒有,哪來的“跨域”。

CORS

雖然瀏覽器出于安全考慮做了“跨域”訪問的限制,但開發時不可避免會有這樣不同源資源訪問的需求,因此 W3C 就制定了 CORS(Cross-origin resource sharing 跨域資源共享) 的機制。

很多人一直以為 CORS = 跨域,其實 CORS 是一種解決“跨域”的方案。

需要注意的是,CORS 是一個“新”的協議(至少對于以前的 IE7 是新的),不僅需要瀏覽器支持,也后端服務器的支持。

瀏覽器支持沒什么好說的,就是瀏覽器版本是否支持的問題:

然后就是后端服務器支持了,服務器需要在 Response Header 上添加 Access-Control-xxx-yyy 的字段,瀏覽器識別到了,才能放行該請求。比如,最常見的就是加 Access-Control-Allow-Origin 這個返回頭,值設置為需要放行的域名。

簡單請求 VS 非簡單請求

瀏覽器將 CORS 請求分為 簡單請求 和 非簡單請求。

簡單請求 會在發送時自動在 HTTP 請求頭加上 Origin 字段,來標明當前是哪個源(協議+域名+端口),服務端來決定是否放行。

非簡單請求 則會先發一個 OPTIONS 預檢請求給服務端,當通過了再發正常的 CORS 請求。

對于 簡單請求,請求方法為以下三種之一:

  • Head
  • Post
  • Get

且 HTTP 請求頭字段不能超過以下字段:

  • Accept
  • Accept-Language
  • Content-Language
  • Last-Event-ID
  • Content-Type

同時 Content-Type 只能三個值:

  • application/x-www-form-urlencoded 對應普通表單
  • multipart/form-data 對應文件上傳
  • text/plain 對應文本發送(一般不怎么用)

只要不滿足上面條件的,都屬于 非簡單請求。

可能很多人會自然地覺得 POST 請求都是 非簡單請求,因為我們常看到發 POST 時,都會先發 OPTIONS。其實是因為我們一般都會傳 JSON 格式的數據,Content-Type 為 application/json,所以,這樣的 POST 請求才屬于 非簡單請求。

Access-Control-xxx-yyyy

當 CORS 請求為 簡單請求時,請求會檢測返回頭里的以下字段:

  • Access-Control-Allow-Origin:指定哪些源是可以共享資源的(包含協議、域名、端口)。
  • Access-Control-Allow-Credentials:當請求需要攜帶 Cookie 時,需要加上這個字段為 true 才能允許攜帶 Cookie。
  • Access-Control-Expose-Headers:由于 XMLHttpRequest 對象只能拿到 Cache-Control、Content-Language、Content-Type、Expires、Last-Modified、Pragma 這 6 個基本字段。想要在拿到別的字段,就需要在這里去指定。

而當 CORS 請求為 非簡單請求時,瀏覽器會先發一個 OPTIONS 預檢(preflight)請求,這個請求會檢查如下字段:

  • Access-Control-Request-Method:指定可訪問的方法,對于非簡單請求,可能會用到 PUT,PATCH,DELETE 等 RESTful 方法,服務端需要把這些方法名也加上。
  • Access-Control-Request-Headers:指定 HTTP 請求頭會額外添加的信息。一個很常見的場景就是,后端有時候會將一些環境參數放到請求頭里,如果不用這個字段來指定放行的字段,那么就會出現“跨域”限制了。

如果 OPTIONS 請求沒有通過服務端的校驗,就會返回一個正常的 HTTP 請求,不會帶上 CORS 的返回信息,所以瀏覽器就會認定為“跨域”了。

總結一句話就是,當 Console 報哪個錯,你就在服務端返回頭上加上哪個字段就可以了。

CORS 中間件

無論對于 Express 還是 KOA,我們都不需要再手動添加上面的字段了,直接加一個 cors 中間件就可以很方便地添加上面的字段,寫起來也更優雅:

  1. var cors = require('cors'); 
  2.  
  3. var corsOptions = { 
  4.   origin: function (origin, callback) { 
  5.     // db.loadOrigins is an example call to load 
  6.     // a list of origins from a backing database 
  7.     db.loadOrigins(function (error, origins) { 
  8.       callback(error, origins) 
  9.     }) 
  10.   } 
  11.  
  12. app.use('/', cors(corsOptions), indexRouter); 

JSONP

那對于瀏覽器不支持 CORS 的情況呢?雖然目前來看是不太可能,但是在還沒有 CORS 的時代,大家是怎么解決跨域的呢?答案就是 JSONP。

它的原理也非常簡單:雖然瀏覽器限制了 HTTP 的跨域,但是沒有限制獲取 script 標簽內容的跨域請求呀。

 

當我們插入一個 <script src="xxx.com"> 標簽的時候,會發一個獲取 xxx.com 的 GET 請求,而這個 GET 請求又不存在“跨域”限制,通過這樣的方法就能解決跨域的問題了。

服務端實現:

  1. router.get('/', (req, res) =>  { 
  2.   const { callback_name } = req.query; 
  3.   res.send(`${callback_name}('hello')`) // 返回 JS 代碼,調用 callback_name 這個函數,并傳入 hello 
  4. }); 

前端實現:

  1. function jsonpCallback(params) { 
  2.   alert('執行 public/index.html 里定義的 jsonpCallback 函數,并傳入' + params + '參數'); 
  3.  
  4.  
  5. const jsonp = async () => { 
  6.   // 制作 script 標簽 
  7.   const script = document.createElement('script'); 
  8.   script.type = 'text/javascript'
  9.   script.src = 'http://localhost:9000/user?callback_name=jsonpCallback' 
  10.   // 添加標簽 
  11.   document.body.appendChild(script); 
  12.   // 拿到數據再移除 
  13.   document.body.removeChild(script); 
  14.  
  15. jsonp(); 

當調用 jsonp 函數的時候,自動創建一個 script 標簽,再把請求放到 scr 里,就會自動發起 GET 請求。服務端會直接返回一串 JavaScript 代碼,然后前端執行這段從服務端獲取來的 JS 代碼,獲取到后端數據。

跨域場景

“跨域”不僅存在于接口訪問,還會有以下場景:

  • 前端訪問跨域 URL,最常見的場景,需要后端添加 cors 的返回字段
  • 微前端:主應用和子應用之間的資源訪問可能存在“跨域”操作,需要子應用/主應用添加 cors
  • 登錄重定向:本質上和第一條一樣,不過在現象層面不太一樣。比如訪問 abc.com 時,有的網站會重定向到自己的登錄頁 passport.abc.com,如果 passport.abc.com 沒有設置 cors,也會出現跨域

總結

總的來說,我們常說的“跨域”,其實就是獲取不同源(協議+域名+端口)的資源時,瀏覽器自身 做出的限制。

在以前,開發者會用 JSONP 這種通過生成一個 script 標簽,自動發起 GET 請求的方式來解決跨域,但是這種方式非常不安全,不推薦。

到了現在,瀏覽器都已經完美支持 CORS 機制了,只需要在服務端添加對應的返回頭 Access-Control-xxx-yyy 就可以了。當瀏覽器報“跨域”錯誤時,缺哪個字段,就在服務端配哪個字段即可。

Node 端開發時,我們可以直接使用 cors 中間件來配置,就不用手寫返回頭里的字段了。

 

責任編輯:武曉燕 來源: 寫代碼的海怪
相關推薦

2022-12-30 08:35:00

2024-05-30 08:19:52

微服務架構大型應用

2022-05-04 08:38:32

Netty網絡框架

2015-05-21 15:45:13

2015-09-18 09:17:06

數據分析

2023-08-26 21:42:08

零拷貝I/O操作

2023-07-27 08:26:36

零拷貝I/O操作

2022-09-27 07:31:57

Property模式數據

2017-06-14 11:18:40

2022-10-10 18:38:56

inert屬性鍵盤

2023-12-08 08:38:15

EventLoopAPI瀏覽器

2022-04-07 11:15:22

PulseEventAPI函數

2023-12-28 08:43:28

前端算法搜索

2022-10-19 08:19:32

動態基線預警

2024-01-08 20:05:32

2018-04-03 14:49:24

2023-06-14 08:15:34

算法合并操作Winner

2023-12-06 08:01:03

CSSPostCSS

2024-03-27 13:33:00

MySQLInnoDB事務

2022-10-24 20:25:40

云原生SpringJava
點贊
收藏

51CTO技術棧公眾號

涩涩av在线| 麻豆影视在线| 国产日韩亚洲欧美精品| 亚洲视频视频在线| 在线视频观看一区二区| 黄色小说在线播放| 国产日产欧产精品推荐色| 成人疯狂猛交xxx| 精品在线播放视频| 国产精品成人一区二区不卡| 欧美精品一区二区不卡 | www.自拍偷拍| 日韩国产91| 精品国产999| 在线观看成人av电影| 五月婷中文字幕| 久久成人麻豆午夜电影| 国产91|九色| 欧美精品99久久久| 欧美亚洲精品在线| 亚洲黄色片网站| 特种兵之深入敌后| 亚洲www啪成人一区二区| 亚洲综合图片区| 在线观看欧美一区| 欧美扣逼视频| 成人短视频下载| 91久久精品日日躁夜夜躁国产| 成年人视频在线免费看| 国内精品福利| 精品国内产的精品视频在线观看| av网站有哪些| 国产精品丝袜在线播放| 欧美一级日韩不卡播放免费| 韩国日本美国免费毛片| 日本在线高清| 亚洲电影激情视频网站| 国产 国语对白 露脸 | 久久综合九色欧美综合狠狠| 99久久99久久精品国产片| 91精品人妻一区二区三区果冻| 乱人伦精品视频在线观看| 97在线视频一区| 日韩久久久久久久久| 午夜久久久久| 久久成人在线视频| www.99re7| 欧美激情四色| 国产亚洲精品久久| 三级黄色片网站| 国产精品视频3p| 欧美精品一区二区三区蜜桃| 天天躁日日躁狠狠躁av| 极品尤物一区| 亚洲第一男人av| 国产人妻黑人一区二区三区| 久草精品视频| 日韩精品免费观看| 欧美丰满少妇人妻精品| 亚洲欧洲av| 亚洲欧美制服第一页| 亚洲欧洲久久久| 欧美最新另类人妖| 久久精品国产99国产精品澳门| 午夜黄色福利视频| 亚洲成人精品| 久久久久久国产精品| 中文字幕在线观看免费视频| 一本色道久久| 国产成人综合精品在线| 亚洲天堂国产精品| 国产一区二区三区黄视频 | 野战少妇38p| 精品亚洲免a| 亚洲欧美在线x视频| 成人黄色a级片| 中文字幕午夜精品一区二区三区| 欧美激情2020午夜免费观看| 日韩欧美三级视频| 日本不卡视频在线| 亚洲最大福利视频网| 日韩一级片免费在线观看| 99久久精品情趣| 日韩精品欧美专区| 91麻豆免费在线视频| 午夜精品久久久久久| 九热视频在线观看| 亚洲精品一区在线| 亚洲欧洲国产精品| 全网免费在线播放视频入口 | 成人黄色一区二区| 久久精品九色| 日韩黄在线观看| 四虎影视一区二区| 亚洲黄色三级| 国产精品稀缺呦系列在线| 精品久久国产视频| 国产午夜精品一区二区三区嫩草| 尤物国产精品| 亚洲色图官网| 91精品国产aⅴ一区二区| 久久精品综合视频| 欧美jjzz| 国产精品黄色av| 亚洲女人18毛片水真多| 欧美激情一区在线观看| av高清在线免费观看| 亚州欧美在线| 国产亚洲激情在线| 亚洲国产综合久久| 精品午夜一区二区三区在线观看| 久久99欧美| 久草在线新免费首页资源站| 欧美视频在线不卡| 黄色在线观看av| 欧美私人啪啪vps| 国产欧美日韩专区发布| 欧美伦理影视网| 精品av在线播放| 久久久久99人妻一区二区三区| 欧美综合在线视频观看| 欧美中文在线视频| 色香蕉在线视频| 伊人色综合久久天天人手人婷| 亚欧在线免费观看| 亚洲精品白浆高清| 国产91对白在线播放| 免费a视频在线观看| 亚洲黄色片在线观看| www.色就是色.com| 成久久久网站| 国产精品99一区| 美国成人毛片| 色国产综合视频| aaaaa级少妇高潮大片免费看| 亚洲一级黄色| 国产精品10p综合二区| 中文字幕中文字幕在线中高清免费版| 欧美日韩电影在线| 女性裸体视频网站| 九九**精品视频免费播放| 四虎影院一区二区三区| 忘忧草在线www成人影院| 国产视频一区在线| 欧美性猛交bbbbb精品| 91免费视频网| 男女av免费观看| 免费欧美一区| 国产成人精品优优av| 你懂的在线看| 在线区一区二视频| 精品国产aaa| 另类小说一区二区三区| 一区二区三区av在线| 一区二区三区无毛| 久久国产视频网站| 亚洲精品.www| 精品久久中文字幕| 色哟哟精品观看| 日本不卡的三区四区五区| 亚洲国产精品www| 啪啪av大全导航福利综合导航| 中文字幕久精品免费视频| 一本一道精品欧美中文字幕| 中文字幕一区二区三区四区不卡| 视频免费1区二区三区| 在线国产一区二区| 国产aⅴ精品一区二区三区黄| 岛国毛片av在线| 亚洲精品小视频| 中文字幕欧美在线观看| 中文字幕在线不卡一区二区三区| 亚洲在线观看网站| 亚洲高清二区| 五码日韩精品一区二区三区视频| 色综合视频一区二区三区日韩| 欧美成人精品一区二区| 天天色棕合合合合合合合| 欧洲日韩一区二区三区| 亚洲少妇xxx| 国产91色综合久久免费分享| 国产精品999视频| 精品久久精品| 亚洲a一级视频| 中文字幕资源网在线观看免费| 中文国产成人精品久久一| 亚洲爱情岛论坛永久| 欧美午夜影院在线视频| 亚洲 欧美 变态 另类 综合| 成人avav在线| www.这里只有精品| 亚洲高清av| 欧美 日韩 国产 在线观看| 红杏视频成人| 成人写真视频福利网| 中文字幕21页在线看| 久久中文字幕国产| 户外极限露出调教在线视频| 日韩视频免费观看高清完整版 | 樱空桃在线播放| 琪琪久久久久日韩精品| 成人日韩在线电影| 日韩电影网站| 久久久久五月天| 欧美性天天影视| 亚洲男人第一网站| 丰满人妻一区二区三区四区53 | 91精品国产91久久久久久久久| 91社区在线观看播放| 亚洲大尺度美女在线| 91中文字幕在线视频| 一本在线高清不卡dvd| 久久久综合久久| 中文字幕在线播放不卡一区| 可以直接看的无码av| 成人福利电影精品一区二区在线观看 | 国产精品午夜av在线| 成人国产精品久久| 国产精品日韩欧美综合| 午夜影院一区| 久久97久久97精品免视看| 麻豆av免费在线观看| 亚洲一区二区黄| 四虎影院在线域名免费观看| 精品久久久久av影院| 精品国产一级片| 欧美一区二区三区在| 亚洲天堂中文在线| 欧美专区日韩专区| 在线观看 亚洲| 亚洲一级二级在线| 欧美黄色免费在线观看| 亚洲欧美区自拍先锋| 乱老熟女一区二区三区| 国产蜜臀97一区二区三区 | 网红女主播少妇精品视频| 成人欧美一区二区三区视频xxx | 欧美日韩三级在线观看| 亚洲三级免费观看| 亚洲一级生活片| 综合色天天鬼久久鬼色| 黄色香蕉视频在线观看| 综合网在线视频| 国产高潮国产高潮久久久91| 尤物在线观看一区| 久久久久久久极品内射| 亚洲综合免费观看高清完整版在线| 可以直接看的黄色网址| 樱桃视频在线观看一区| 久久久久亚洲av片无码下载蜜桃| 亚洲激情男女视频| 国产一级免费av| 亚洲电影激情视频网站| 日本高清www免费视频| 福利二区91精品bt7086| 国产情侣免费视频| 欧美精品vⅰdeose4hd| 99热这里只有精品在线观看| 日韩视频一区二区在线观看| 欧美一级在线免费观看| 日韩高清有码在线| 国产资源在线播放| 少妇久久久久久| 在线视频自拍| 久久6免费高清热精品| 黄色18在线观看| 国产不卡在线观看| 亚洲精品无播放器在线播放| 亚洲一区二区三区香蕉| 加勒比色综合久久久久久久久 | 黄色电影免费在线看| 精品国产欧美一区二区五十路 | 午夜国产不卡在线观看视频| 亚洲成人av影片| 欧美日韩国产天堂| 亚洲国产www| 亚洲深夜福利网站| 伊人春色在线观看| 日本不卡视频在线播放| 粉嫩av国产一区二区三区| 国产一区在线免费观看| 欧美精品一区二区久久| 69精品丰满人妻无码视频a片| 亚洲精品精选| 亚洲久久中文字幕| 成人国产在线观看| 国产一级淫片久久久片a级| 亚洲激情在线激情| 91久久国产综合久久91| 欧美一区二区三区影视| 可以在线观看的av| 欧美大片免费观看| 四虎影视4hu4虎成人| 国产精品久久国产精品| 精品一二三区| koreanbj精品视频一区| 久久99精品久久久久久| 99re久久精品国产| 亚洲靠逼com| 18国产免费视频| 亚洲а∨天堂久久精品9966| 日本免费在线观看| 欧美中文字幕精品| 懂色av一区二区| 日本特级黄色大片| 日本午夜精品一区二区三区电影 | 激情六月丁香婷婷| 风间由美性色一区二区三区 | 性xxxxbbbb| 九色成人免费视频| 欧美日韩伦理一区二区| 欧美精彩一区二区三区| 国产一在线精品一区在线观看| 天天爽夜夜爽一区二区三区| 99re6这里只有精品视频在线观看| 日韩三级久久久| 欧美视频一区二| 欧美日韩影视| 国产91精品高潮白浆喷水| 91夜夜蜜桃臀一区二区三区| 在线观看精品视频| 蜜臀av性久久久久av蜜臀妖精| 成人精品在线观看视频| 午夜欧美视频在线观看| 亚洲成人77777| 久久99亚洲热视| 国产精品中文| 欧美美最猛性xxxxxx| 97人人澡人人爽人人模亚洲 | 日韩黄色片视频| 99久久国产免费看| 精品无码免费视频| 精品久久久久99| 国模雨婷捆绑高清在线| 99久久99久久| 精久久久久久| 国产免费a级片| 亚洲一区二区在线免费看| 99久久久久久久| 九九久久久久久久久激情| www.欧美| 伊人久久在线观看| 国产.欧美.日韩| 黄色小说在线观看视频| 精品福利一二区| 啦啦啦中文在线观看日本| 99视频网站| 91久久综合| 51调教丨国产调教视频| 色婷婷精品久久二区二区蜜臂av| 男生女生差差差的视频在线观看| 日韩av免费在线看| 国语产色综合| 奇米视频7777| 樱花影视一区二区| 色一情一乱一乱一区91av| 91精品国产自产91精品| 一区二区三区日本久久久 | 尤物国产精品| 国产激情一区二区三区| 精品少妇一二三区| 精品无人区乱码1区2区3区在线 | 999视频在线免费观看| 欧美三级第一页| 亚洲狠狠婷婷综合久久久久图片| 一本到高清视频免费精品| av电影在线播放高清免费观看| 成人免费午夜电影| 亚洲性色视频| 精品人伦一区二区| 欧美一卡二卡在线观看| 成人黄色动漫| 午夜久久资源| 豆国产96在线|亚洲| 伊人手机在线视频| 精品国产一区二区在线| 超碰在线成人| 手机看片福利盒子久久| 亚洲精品一二三四区| 四虎永久在线观看| 国产免费成人av| 在线观看一区| 日日碰狠狠添天天爽| 亚洲高清在线观看| 久久精品国产精品亚洲毛片| 妺妺窝人体色www看人体| 国产欧美一区二区精品性色超碰| 精品人妻无码一区二区| 国产xxx69麻豆国语对白| 一区二区三区四区在线观看国产日韩 | 日韩毛片在线视频| 色综合影院在线| 精品丝袜久久| 日本高清免费在线视频| 日本道免费精品一区二区三区| 性欧美1819sex性高清大胸| 日韩激情视频| 99久久国产综合色|国产精品| 国产又粗又猛又爽又黄视频| 琪琪第一精品导航|