百分百源码网-让建站变得如此简单! 登录 注册 签到领金币!

主页 | 如何升级VIP | TAG标签

当前位置: 主页>网站教程>JS教程> CORS跨域资源同享具体介绍(附代码)
分享文章到:

CORS跨域资源同享具体介绍(附代码)

发布时间:09/01 来源:未知 浏览: 关键词:

本篇文章给大家带来的内容是关于CORS跨域资源同享具体介绍(附代码),有必然的参照 价值,有需要的伴侣可以参照 一下,但愿对你有所帮忙。

理解下同源战略

源(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"
})

发明有些恳求可以成功,但是有些还是会报错:

2407386697-5c85e5eb77716_articlex.png

恳求被同源战略阻挠,预恳求的响应没有通过检查:http返回的不是ok?

并且发明发送的是OPTIONS恳求:

822118313-5c85e72ba57fb_articlex.png

发明:CORS标准将恳求分为两品种型,一种是简便恳求,别的一种是带预检的非简便恳求

简便恳求和非简便恳求

阅读器发送跨域恳求推断方式:

阅读器在发送跨域恳求的时候,会先推断下是简便恳求还是非简便恳求,假如是简便恳求,就先施行效劳端程序,然后阅读器才会推断可否跨域;而关于非简便恳求,阅读器会在发送实际恳求此前先发送一个OPTIONS的HTTP恳求来推断效劳器可否能接受该跨域恳求;假如不克不及接受的话,阅读器会直接阻挠接下来实际恳求的发生。什么是简便恳求

恳求办法是如下之一:

GETHEADPOST

所有的Header都只包括如以下表中(没有自定义header):

Cache-ControlContent-LanguageContent-TypeExpiresLast-ModifiedPragma除此之外都是非简便恳求

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“积跬步、行千里”—— 连续更新中~,喜爱的话留下个赞和关注哦!

往期经典好文:

效劳器(CentOS)安置配置mongodbKoa日志中心件封装开发(log4js)团队合作必备的Git操纵使用pm2摆设node生产环境

以上就是CORS跨域资源同享具体介绍(附代码)的具体内容,更多请关注百分百源码网其它相关文章!

打赏

打赏

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦

百分百源码网 建议打赏1~10元,土豪随意,感谢您的阅读!

共有152人阅读,期待你的评论!发表评论
昵称: 网址: 验证码: 点击我更换图片
最新评论

本文标签

广告赞助

能出一分力是一分吧!

订阅获得更多模板

本文标签

广告赞助

订阅获得更多模板