在开发网站时通过框架或是浏览器的 fetchXHR 请求过外部 API,那么一定遇到过跨域请求,还有错误信息;今天来讨论跨域问题的原因及解决方法。

跨域请求

跨域是开发过程中必定遇到过的问题,当通过 js对不同的来源发送请求时,这个请求的响应就会被浏览器拦截,不交给 js处理。这里的“不同来源”指的是目标资源与当前网页的域(domain)、通讯协议(protocol)或网络端口(port)只要有任一项不同,就算是不同来源。例如下面这几个例子:

假设当前用户在:https://a.com :
[✔] https://a.com/test -> 同域
[✖] https://m.a.com -> 不同域
[✖] https://a.com:8800-> 端口不同
[✖] http://a.com -> 通讯协议不同

理解什么是跨域了,那为什么浏览器要把跨域请求资源拦截掉呢?

这主要是考虑到用户的信息安全。

假如A是一个恶意开发者,他编写的网站会尝试通过 XHR 打向百度、csdn等目标网站;如果使用者原先就有目标网站的登录状态,A便能窥探他的隐私,得到不该取得的数据。再想想看,如果目标网站换成 Email、银行、电商,如果没有浏览器限制跨域请求的保护,恶意开发者便能为所欲为。

   注意:跨域请求虽然会被浏览器拦截下来,但拦截的是响应(Response)而不是请求(Request)。

解决方案

关于跨域请求的解决方案有很多,例如 JSONP,也就是通过 HTML 中没有跨域限制的标签如 imgscript 等,再通过指定回调函数,将响应的内容介接回 JavaScript 中;或是通过iframe,绕过跨域保护获取目标资源等。下面说明两种常见也相对正规的解决方式。

CORS

最标准、正确的解决方法是通过 W3C 规范 的“ 跨域资源共享(Cross-Origin Resource Sharing ,CORS)”,通过服务器在 HTTP 头中的设置,可以使浏览器能够获取不同来源的资源。

CORS 规范中,清楚定义了跨域存取控制的运作方式。

首先服务器端需要在响应头中加上如Access-Control-Allow-Origin、Access-Control-Request-Method、Access-Control-Request-Headers 等设定,来限制服务器所能接受的来源、请求的方法、可携带的头等等。

当浏览器发送资源请求时,如果是简单请求便会直接送出请求;若不符合前述条件,则会通过预检(Preflighted)请求,确认是否可以通过服务器的限制,然后才会发送正式的请求。

CORS 除了上述內容外,也有关于 Cookies 的传送方式,如何允许跨域写入 Cookies 等内容。

代理服务器

由于 CORS 的头设置是在服务器端,如果服务器是自己的,那么可以轻易的调整服务器设置,让前端能取得必要的资源;但如果你请求的是外部 API,就不能要求别人去修改头设置吧。

简单的方法就是通过代理服务器帮我们获取资源;由于跨域保护的限制是浏览器的规范,只要不通过浏览器发送请求,自然也就不会有限制。

关注前端公众号(前端中心),获取更多前端技术,共同成长

跨域错误的原因及处理方法相关推荐

  1. 跨域产生的原因及解决方法

    跨域产生的原因及解决方法 参考文章: (1)跨域产生的原因及解决方法 (2)https://www.cnblogs.com/keai/p/11418138.html 备忘一下.

  2. 出现跨域问题的原因及其解决方法

    1.出现跨域问题的原因: 同源策略 2.同源策略 三同 协议相同 域名相同 端口相同同源策略目的 保证用户信息安全,防止恶意网站窃取数据.同源策略是必须的,否则cookie可以共享. 3.同源策略目的 ...

  3. 跨域产生的原因和解决方法_幼儿语言障碍产生的原因及其解决方法

    中科未来-南宁市梧桐雨儿童康复中心 所谓语言障碍,指的是个人的语言理解或语言表达能力与同龄儿童相比较,有明显的偏离和异常现象,造成交往困难的现象,幼儿语言障碍通常分为构音障碍,声音障碍,语流障碍,发展 ...

  4. 跨域产生的原因和解决方法_针织面料染色折痕/产生的原因及解决方法

    找  纺织 印染  印花 工作就找[世界印染科技]! 每日准时推送最新招聘信息 欢迎关注.愿您早日找到满意的工作! 进求职群.企业招聘合作 扫码添加微信 针织面料即是利用织针将纱线弯曲成圈并相互串套而 ...

  5. 跨域产生的原因和解决方法_ABS注塑制品产生色差的原因及解决方法

    我们日常生活中随处可见ABS塑胶原料注塑制品的身影,为了使用产品具有有良好外观和视觉效果,要求外观件具有不同的色调,同时要求构成设备外观的各个部件具有一致的色调.色差是着色ABS塑胶原料注塑制品中常见 ...

  6. 跨域产生的原因和解决方法_板式家具开料机加工过程产生崩边原因及解决方法...

    家具厂数控开料机加工材料的时候会遇到材料崩边的问题,下面我们系统的分析下产生的原因以及解决的办法 产生崩边现象的原因? 其一是材料本身问题.目前除了实木家具,目前使用较多的就是 板式贴皮的材料,板材的 ...

  7. sliverlight 访问WCF服务跨域错误解决方法

    sliverlight访问wcf服务提示跨域错误! 一般是由于跨域文件不存在造成的,方法是创建XML 文件重命名为clientaccesspolicy(必须是这个名字)内容 <?xml vers ...

  8. 谷歌新版本跨域错误深度剖析与解决:request client is not a secure context and the resource is in more-private address

    快速解决: ====================================================== 最近在测试http服务时,谷歌浏览器报了以下错误 "The requ ...

  9. “网页内容无法访问”可能是跨域错误!

    5G 时代的宣传热火朝天,万物互联的生活沉浸到方方面面,网络资源的访问成了人们生活中不可或缺的存在.访问使用的多了也经常会遇到无法访问的情况,这个时候打开 Console 往往会看到下面这种红彤彤一片 ...

最新文章

  1. 栈的逆转(递归实现)
  2. 计算机作文点评,未来的电脑作文评语
  3. v-bind单向绑定与v-model双向绑定
  4. 【微服务学习】Polly:熔断降级组件
  5. Kafka 为什么能那么快的 6 个原因
  6. 从零搭建LNMP环境(三) - 安装MySQL数据库服务器
  7. vue项目启动出现cannot GET /服务错误
  8. android如何关闭响应程序,android – 如何修复应用程序没有响应?
  9. 搜索引擎:获取并处理mdx英汉词典文件为数据库
  10. 漫画小说听书三合一分销平台源码
  11. 【c4d学习笔记】OC渲染器安装问题
  12. 百度离线地图瓦片下载器
  13. [UML] 如何找参与者、找用例
  14. python 版权保护,python爬虫篇4——爬取专利著作权信息
  15. 我们穷极一生,究竟追寻的是什么?
  16. 两大主流存储架构介绍:软件定义存储与超融合
  17. 1.Unity之Shader新手入门
  18. 【机器学习】sklearn机器学习入门案例——使用k近邻算法进行鸢尾花分类
  19. Ecshop 2.7.1 B2B2C 小京东 商城网站 商品详情页二维码显示出错
  20. 简易聊天室代码分享 js+socket.io

热门文章

  1. ConcurrentHashMap源码解析
  2. Pytorch学习(二)—— nn模块
  3. 2016OSC源创会年终盛典-综合技术专场-George Neville-Neil
  4. 常见软件系统的供应商
  5. 【邂逅Django】——(三)视图
  6. 10以内随机加、减法练习题
  7. 全国水稻优高产技术 国稻种芯·中国水稻节:广西南宁研讨会
  8. 浅谈*迭代加深*深度优先搜索
  9. 解决Win10系统由于INF文件失效导致安卓MTP驱动安装失败的问题
  10. 使用css和js实现刮刮乐(简单易懂还有趣)