资讯专栏INFORMATION COLUMN

一篇文章搞明白CORS跨域

tanglijun / 1602人阅读

摘要:跨域实在是面试官一个人的利器。首先,什么是是一个标准,全称是跨域资源共享。它的值是一个布尔值,表示是否允许发送。设为,即表示服务器明确许可,可以包含在请求中,一起发给服务器。

面试问到数据交互的时候,经常会问跨域如何处理。大部分人都会回答JSONP,然后面试官紧接着就会问:“JSONP缺点是什么啊?”这个时候坑就来了,如果面试者说它支持GET方式,然后面试官就会追问,那如果POST方式发送请求怎么办?基础扎实一些的面试者会说,使用CORS跨域,不扎实的可能就摇摇头了。

这还没结束,如果公司比较正规或者很在乎技术功底,你面试的又是重要岗位,HR还想砍你的工资,就会再补一刀,CORS跨域有什么问题呢?这时候能回答上来的就没几个了,就算是你答出来兼容性不好,需要IE10+浏览器,对方依然有话说,那兼容性怎么处理呢?应试者就没话了,要么被Pass掉,即便留下来,谈工资的时候就没底气了。

CORS跨域实在是面试官pass一个人的利器。

为什么会这样呢?

1.遇到CORS请求的情况不多,开发者使用这个场景的很少,大部分都JSONP搞定了。

2.开发者自身技能不扎实,偷懒心态,平常没有意识和意愿去提升自己的技术水平。

3.相关的学习资料少、纯前端小白搭建可测试的环境难度大。

面对这条拦路虎,我们今天就彻底解决掉它,让它不再是我们的软肋,而是彰显我们技术实力的亮点。

首先,什么是CORS?

CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。
它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。

优缺点

优点:

1.支持POST以及所有HTTP请求
2.安全性相对JSOP更高
3.前端要做的事儿比较少

缺点:

1.不兼容老版本浏览器,如IE9及其以下
2.需要服务端支持
3.使用起来稍微复杂了些

怎么用?

前端部分:




    
    
    
    CORS跨域请求
    


    


注意点:

1.上面代码兼容IE8,因为用了XDomainRequest

2.其它代码你就当成XMLHttpRequset用,别考虑什么2.0不2.0的

3.如果你想post数据,可以往 xhr.send()里面搞

4.这里不建议大家研究"simple methdod"之类的知识,代码弄懂了会用就行,遇到问题了再查也不晚

后台部分:


注意点:

1.Access-Control-Allow-Origin: 表示允许任何域名跨域访问,如果需要指定某域名才允许跨域访问,只需把Access-Control-Allow-Origin:改为Access-Control-Allow-Origin:允许的域名,实际工作也要这么做2.Access-Control-Allow-Methods:GET,POST 规定允许的方法,建议控制严格些,不要随意放开DELETE之类的权限

2.Access-Control-Allow-Credentials

该字段可选。它的值是一个布尔值,表示是否允许发送Cookie。默认情况下,Cookie不包括在CORS请求之中。设为true,即表示服务器明确许可,Cookie可以包含在请求中,一起发给服务器。这个值也只能设为true,如果服务器不要浏览器发送Cookie,删除该字段即可。

最后,面试常考问题:

CORS和JSONP的应用场景区别?

CORS要求浏览器(>IE10)和服务器的同时支持,是跨域的根本解决方法,由浏览器自动完成。优点在于功能更加强大支持各种HTTP Method,缺点是兼容性不如JSONP。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/99419.html

相关文章

  • 前端跨域大总结

    摘要:跨域正确的打开方式经过对同源策略的了解,我们应该要消除对浏览器的误解,同源策略是浏览器做的一件好事,是用来防御来自邪门歪道的攻击,但总不能为了不让坏人进门而把全部人都拒之门外吧。 跨域这两个字就像一块狗皮膏药一样黏在每一个前端开发者身上,无论你在工作上或者面试中无可避免会遇到这个问题。为了应付面试,我每次都随便背几个方案,也不知道为什么要这样干,反正面完就可以扔了,我想工作上也不会用到...

    Wuv1Up 评论0 收藏0
  • 再也不学AJAX了!(三)跨域获取资源 ② - JSONP & CORS

    摘要:浏览器的同源策略固然保障了互联网世界的数据隐私与数据安全,但是如果当我们需要使用跨域请求资源时,同源策略又会成为开发者的阻碍。我们之前提到过,如果想要绕过浏览器同源策略,实现使用技术跨域获取资源,需要服务端和客户端的协同合作。 浏览器的同源策略固然保障了互联网世界的数据隐私与数据安全,但是如果当我们需要使用AJAX跨域请求资源时,同源策略又会成为开发者的阻碍。在本文中,我们会简单介绍需...

    enda 评论0 收藏0
  • 跨域请求出现 OPTIONS 请求的问题及解决方法

    摘要:实际使用时,由于向提交的长度限制在字符,超过了则被浏览器拒绝,因此不采用。前端发起跨域请求就是正常的请求即可。 问题背景浏览器从一个域名的网页去请求另一个域名的资源时,域名、端口、协议任一不同,都是跨域 在前后端开发过程经常会遇到跨域问题。网上也都有解决方案。 写这篇文章时,我们碰到的一个场景是:要给s系统做一个扩展,前端的html、js放在s系统里,后端需要做一个单独的站点N.B....

    余学文 评论0 收藏0
  • AJAX的学习笔记

    摘要:的学习笔记是异步和的缩写,它的作用是执行异步的网络请求。这就是一个格式的,向这个地址请求,将得到一个回调函数,执行就得到数据。 AJAX的学习笔记 AJAX是异步JavaScript和XML的缩写,它的作用是执行异步的网络请求。因为JS是线性同步,如果需要用户向浏览器发送一个请求,那么就需要等浏览器接收到了结果才能继续运行,如果发送到接受的时间太长,浏览器就会很长时间处于假死状态,这样...

    RobinTang 评论0 收藏0
  • 什么是跨域以及几种简单解决方案

    摘要:什么是跨域要明白什么是跨域之前,首先要明白什么是同源策略同源策略就是用来限制从一个源加载的文档或脚本与来自另一个源的资源进行交互。最后,解决跨域问题还有一个更通用更强大的方法,我单独把它拿出来总结了一篇文章跨域问题的根本解决方案。 什么是跨域? 要明白什么是跨域之前,首先要明白什么是同源策略? 同源策略就是用来限制从一个源加载的文档或脚本与来自另一个源的资源进行交互。那怎样判断是否是同...

    zhaofeihao 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<