关于前端跨域及解决方案详解
关于前端跨域
跨域指的是一个域下的文档或脚本试图去请求另一个域下的资源。我们常说的跨域,也就是指由浏览器同源策略限制的一类请求场景。
同源指的是协议,域名和端口号相同,一旦有一个不相同,则为不同源。同源策略其实是一个安全策略,是为了保证用户信息安全,防止恶意的网站窃取数据,如CSRF(跨站请求伪造)攻击。
跨域解决方案
1、CORS:(Cross-origin resource sharing)跨域资源共享
实现:
客户端无需处理,浏览器会自动在请求头中增加一些字段。如果是需要发送跨域Cookie,请求头要设置withCredentials
属性
服务端响应头需要加Access-Control-Allow-Origin
、Access-Control-Allow-Headers
、Access-Control-Allow-Credentials
属性
CORS分为两类:简单请求和非简单请求
如果请求方法是HEAD,GET,POST其中一种,http头只有Accept,Accept-Language,Content-Language,Last-Event-ID,Content-Type这几个字段的话,则为简单请求,不满足的均为非简单请求。
这两类的跨域流程也不同。
简单请求的话,在头信息之中,服务器端根据Origin
判断源是否在许可范围,再决定是否同意这次请求
非简单请求的话,
客户端会增加一次 HTTP 查询(“预检”)请求,即options请求,浏览器先询问服务器,只有得到肯定答复,浏览器才会发出正式的请求。
服务器收到预检请求后,检查了Origin
、Access-Control-Request-Method
和Access-Control-Request-Headers
字段以后,确认允许跨源请求,就可以做出回应。
2.代理接口跨域
在本地调试开发还可以利用webpack + webpack-dev-server
代理接口跨域。
需要使用本地开发插件:webpack-dev-server
在config.js配置如下:
module.exports = {devServer: {proxy: {'/api': {target: 'http://xxx.com/',pathRewrite: {'^/api' : ''}, changeOrigin: true, // target是域名的话,需要这个参数,secure: false, // 设置支持https协议的代理}}}
}
以上是前端目前较为常用的跨域解决方案,以前也有一些比较常用的跨域解决方案,大概了解一下,就不详细展开:
- websocket
- JSONP(只支持get请求)
- window.postMessage
- document.domain
- window.name+iframe
- location.hash+iframe
还有一个也特别常用的跨域解决方案是nginx方向代理。只需要修改 nginx 的配置即可解决跨域问题,支持所有浏览器,支持session,不需要修改任何代码,并且不会影响服务器性能。这个具体就不展开啦。
关于前端跨域及解决方案详解相关推荐
- 前端跨域之CORS详解
CORS:跨源资源分享Cross-Origin Resource Sharing. 它是W3C标准,是跨源AJAX请求的根本解决方法.相比JSONP只能发GET请求,CORS允许任何类型的请求.COR ...
- 前端跨域之PostMessage详解
window.postMessage() 方法可以安全地实现跨源通信.通常,对于两个不同页面的脚本,只有当执行它们的页面位于具有相同的协议(通常为https),端口号(443为https的默认值),以 ...
- python跨域攻击教学_关于python 跨域处理方式详解
因为浏览器的同源策略限制,不是同源的脚本不能操作其他源下面的资源,想操作另一个源下面的资源就属于跨域了,这里说的跨域是广义跨域,我们常说的代码中请求跨域,是狭义的跨域,即在脚本代码中向非同源域发送ht ...
- 跨域资源共享CORS详解
最近深入了解了CORS的相关东西,觉得阮一峰老师的文章写得最详细易懂了,所有转载作为学习笔记. 原文地址:跨域资源共享 CORS 详解 CORS是W3C的一个标准,全称是跨域资源共享(Cross-or ...
- 前端跨域的理解和解决跨域的方案详解(全)
作为前端开发,我们遇到最多的应该就是跨域问题,对于萌新来说,跨域就是一道墙,不知所措,其实只要理解了跨域的含义和原理,解决它是不难的,今天给大家介绍下什么是跨域和跨域的解决方案! 什么是跨域? 跨域是 ...
- 前端跨域问题解决方案汇总
下面我以简单的两台node服务器来说明如何使用nginx进行前端跨域访问. node1服务器 在localhost:8083上启动 const app = express(); app.get('/w ...
- ajax的跨域和请求——详解
什么是Ajax跨域? Ajax跨域指的是将Ajax请求进行跨域处理,而不是说在Ajax中提供了跨域的方法.同源政策中明确规定Ajax请求只能发给同源的网址,否则就会发生跨域报错.除了设置代理之外页面中 ...
- 前端:下载文件实现方式及跨域下载(详解)
前言:本文详细介绍在开发过程中前端如何与后端配合实现文件下载至本地,并详细说明特殊格式文件如何处理.如果你是一名前端开发者,恰好需要实现后端文件下载至本地的需求,那么恭喜你本篇文章一定会帮到你! 需求 ...
- php跨域请求解决方案_swoft2 -跨域与中间件详解
本方案用于开发环境,在生产环境不建议使用,生产环境可以使用 nginx 的反向代理 一.什么是跨域? 同源策略是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,浏览器很容易受到XSS ...
最新文章
- Ubuntu 14.04 64位安装深度音乐和深度影音
- hdoj5792 【树状数组】【未完待续】
- TCP、UDP、IP 协议分析
- 《C++ Primer》7.3.3节练习
- 2020下半场:10本书教会你学习、思考和生活
- Oracle死锁解决常用方法
- 小米牵手宜家,成立亿元开发者基金,雷军不仅要当AIoT开拓者,还要当扛把子...
- GDAL C#中文路径,中文属性名称乱码问题
- mysql的bht_BHT
- 关于在VMware上装lFEDORA系统
- ndows优化大师 免费版,Windows7优化大师
- 对称网络的电路分析方法
- 建设容器云平台之前不能忽视3个评估,你的企业能得多少分? | 某银行最佳实践分享
- 【超纯水制备技术分享】超纯水工艺设计流程以及纯水系统前处理技术——离子交换脱盐工艺介绍
- [Solved] Pandas--TypeError: ‘bool‘ object is not iterable
- python中五个一行输出_python 如何将一系列数字十个一行输出
- MATLAB处理EXCEL文件
- 【20考研】如何度过一个有意义的寒假?
- IDC连续三年商用计算机排名前3名,IDC:2017年销量1.118亿 OPPO稳居全球第四
- 用 Python 实现马丁格尔交易策略(附代码)
热门文章
- VB编程:代码实现窗体居中显示-59
- 图文详解 HDFS 的工作机制及其原理
- 华兴资本业绩预增三倍:IPO首日破发后,历经两年半重回发行价
- 张正友相机标定(全流程,含畸变,matlab源代码解析)
- wsctf.exe病毒专杀
- 如何从61850中获益
- 做个合格的软件测试员
- java复制文件的4种方式及拷贝文件到另一个目录下与删除单个文件和删除整个文件夹
- 自己研发的mac端日志文本分析软件notepadmm
- python 因果推断_因果推断书Causal inference:What if简介(附:因果推断书单推荐)...