跨域错误的原因及处理方法
在开发网站时通过框架或是浏览器的 fetch
、XHR
请求过外部 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 中没有跨域限制的标签如 img
、script
等,再通过指定回调函数,将响应的内容介接回 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)跨域产生的原因及解决方法 (2)https://www.cnblogs.com/keai/p/11418138.html 备忘一下.
- 出现跨域问题的原因及其解决方法
1.出现跨域问题的原因: 同源策略 2.同源策略 三同 协议相同 域名相同 端口相同同源策略目的 保证用户信息安全,防止恶意网站窃取数据.同源策略是必须的,否则cookie可以共享. 3.同源策略目的 ...
- 跨域产生的原因和解决方法_幼儿语言障碍产生的原因及其解决方法
中科未来-南宁市梧桐雨儿童康复中心 所谓语言障碍,指的是个人的语言理解或语言表达能力与同龄儿童相比较,有明显的偏离和异常现象,造成交往困难的现象,幼儿语言障碍通常分为构音障碍,声音障碍,语流障碍,发展 ...
- 跨域产生的原因和解决方法_针织面料染色折痕/产生的原因及解决方法
找 纺织 印染 印花 工作就找[世界印染科技]! 每日准时推送最新招聘信息 欢迎关注.愿您早日找到满意的工作! 进求职群.企业招聘合作 扫码添加微信 针织面料即是利用织针将纱线弯曲成圈并相互串套而 ...
- 跨域产生的原因和解决方法_ABS注塑制品产生色差的原因及解决方法
我们日常生活中随处可见ABS塑胶原料注塑制品的身影,为了使用产品具有有良好外观和视觉效果,要求外观件具有不同的色调,同时要求构成设备外观的各个部件具有一致的色调.色差是着色ABS塑胶原料注塑制品中常见 ...
- 跨域产生的原因和解决方法_板式家具开料机加工过程产生崩边原因及解决方法...
家具厂数控开料机加工材料的时候会遇到材料崩边的问题,下面我们系统的分析下产生的原因以及解决的办法 产生崩边现象的原因? 其一是材料本身问题.目前除了实木家具,目前使用较多的就是 板式贴皮的材料,板材的 ...
- sliverlight 访问WCF服务跨域错误解决方法
sliverlight访问wcf服务提示跨域错误! 一般是由于跨域文件不存在造成的,方法是创建XML 文件重命名为clientaccesspolicy(必须是这个名字)内容 <?xml vers ...
- 谷歌新版本跨域错误深度剖析与解决:request client is not a secure context and the resource is in more-private address
快速解决: ====================================================== 最近在测试http服务时,谷歌浏览器报了以下错误 "The requ ...
- “网页内容无法访问”可能是跨域错误!
5G 时代的宣传热火朝天,万物互联的生活沉浸到方方面面,网络资源的访问成了人们生活中不可或缺的存在.访问使用的多了也经常会遇到无法访问的情况,这个时候打开 Console 往往会看到下面这种红彤彤一片 ...
最新文章
- 栈的逆转(递归实现)
- 计算机作文点评,未来的电脑作文评语
- v-bind单向绑定与v-model双向绑定
- 【微服务学习】Polly:熔断降级组件
- Kafka 为什么能那么快的 6 个原因
- 从零搭建LNMP环境(三) - 安装MySQL数据库服务器
- vue项目启动出现cannot GET /服务错误
- android如何关闭响应程序,android – 如何修复应用程序没有响应?
- 搜索引擎:获取并处理mdx英汉词典文件为数据库
- 漫画小说听书三合一分销平台源码
- 【c4d学习笔记】OC渲染器安装问题
- 百度离线地图瓦片下载器
- [UML] 如何找参与者、找用例
- python 版权保护,python爬虫篇4——爬取专利著作权信息
- 我们穷极一生,究竟追寻的是什么?
- 两大主流存储架构介绍:软件定义存储与超融合
- 1.Unity之Shader新手入门
- 【机器学习】sklearn机器学习入门案例——使用k近邻算法进行鸢尾花分类
- Ecshop 2.7.1 B2B2C 小京东 商城网站 商品详情页二维码显示出错
- 简易聊天室代码分享 js+socket.io