关键词:
作为前端开发,你还在为解决跨域而烦恼吗?
跨域怎么产生就不在细说了,详看浏览器的同源策略
这里我推荐这两种方式跨域,其它的跨域方式都还有很多但都不推荐,主流的也就这两种方式。
解决方案如下:
开发环境 | 生产环境 | |
---|---|---|
方案一 | cors | cors |
方案二 | proxy | nginx |
方案一:cors~
cors
全称为 Cross Origin Resource Sharing(跨域资源共享)。这种方案对于前端来说没有什么工作量,和正常发送请求写法上没有任何区别,工作量基本都在后端这里。每一次请求,浏览器必须先以 OPTIONS
请求方式发送一个预请求(也不是所有请求都会发送 options, cors),通过预检请求从而获知服务器端对跨源请求支持的 HTTP
方法。在确认服务器允许该跨源请求的情况下,再以实际的 HTTP
请求方法发送那个真正的请求。推荐的原因是:只要第一次配好了,之后不管有多少接口和项目复用就可以了,一劳永逸的解决了跨域问题,而且不管是开发环境还是正式环境都能方便的使用。详细 MDN 文档
但总有后端觉得麻烦不想这么搞,那纯前端也是有解决方案的。
方案二:proxy+nginx
在 dev
开发模式下可以下使用 webpack 的 proxy
使用也是很方便,参照 文档 就会使用了。但这种方法在生产环境是不能使用的。在生产环境中需要使用 nginx
进行反向代理。不管是 proxy
和 nginx
的原理都是一样的,通过搭建一个中转服务器来转发请求规避跨域的问题。
开发环境
- 本地开发的话如果你是框架之类的,直接使用
proxy
进行代理即可 - 如果没有使用框架以及
webpack
之类的,最简单的就是禁用谷歌浏览器的安全策略
devServer:
proxy:
\'/common-backend\':
target: `http://url:port/`,
changeOrigin: true
,
生产环境
生产环境的话还是比较推荐nginx
的
- nginx
比如后端地址为http://localhost:8089/mall_war/*.do
那么前端在代码里只需要访问/mall_war/*.do
就可以,默认发的是部署服务器的ip
来访问
然后再nginx
里配置如下
server
listen 8066;
server_name commonFronted;
# 项目静态资源目录
location /
alias /xxx/dist;
index index.html;
location ^~/mall_war/
proxy_pass http://localhost:8089/mall_war/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-Proto https;
proxy_set_header X-NginX-Proxy true;
proxy_buffers 256 4k;
proxy_max_temp_file_size 0k;
proxy_connect_timeout 30;
proxy_send_timeout 60;
proxy_read_timeout 60;
proxy_next_upstream error timeout invalid_header http_502;
这里推荐第二种方式,开发线上都是很方便的,简单进行下配置即可实现了。
如何解决跨域问题(代码片段)
(1)考察目标1)跨域出现的原因2)解决的跨域的方式有哪些。(2)题目分析1)跨域出现的原因:同源策略。什么是同源策略:同源策略(Sameoriginpolicy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策... 查看详情
关于前端如何解决跨域问题(代码片段)
跨域什么是跨域 浏览器为保证安全,增加的同源限制,其实请求是发出了,服务器也相应了,但是被浏览器劫持了。所谓同源是指,域名,协议,端口均相同,浏览器才会觉得符合要求。 一旦有一个不同源,浏览器便会... 查看详情
跨域问题如何解决?(代码片段)
????????关注后回复 “进群” ,拉你进程序员交流群????????作者丨超哥哥来源丨main方法“ 今天的内容比较大众,相信广大程序猿都有遇到过,那么咱们就不多BB了,直接往下看。”首先聊聊为什么会出现跨域问题... 查看详情
为什么会有跨域的问题出现,如何解决跨域问题(代码片段)
为什么会有跨域的问题出现,如何解决跨域问题什么是跨域定义:跨域是指a页面想获取b页面资源,如果a、b页面的协议、域名、端口、子域名不同,所进行的访问行动都是跨域的,而浏览器为了安全问题一般都... 查看详情
为什么会有跨域的问题出现,如何解决跨域问题.(代码片段)
目录 什么是跨域 什么是同源策略解决方式1、jsonp1.1)去创建一个script标签1.2)script的src属性设置接口地址1.3)接口参数,必须要带一个自定义函数名要不然后台无法返回数据。1.4)通过定义函数名去接收后... 查看详情
如何解决跨域问题(代码片段)
解决跨域三种方法什么是跨域,为什么要解决跨域。根据浏览器的同源策略。当浏览器不能响应执行网站的脚本时候,首先想到第一个问题点是否存在跨域问题。就是所谓同源策略,何为同源就我们经常上网是通过网址访问网站... 查看详情
解决跨域问题,实例调用百度地图(代码片段)
...问我跨域的问题了九种“姿势”让你彻底解决跨域问题2.如何解决跨域?JSONP: 查看详情
项目出现跨域问题,如何解决(代码片段)
现象昨天在做下载图片的时候,出现下图的现象.昨天在做下载图片的时候,出现下图的现象.后端数据库存储的是图片的url,要根据这个url请求图片服务器得到图片进行下载。为什么会出现跨域?像上面的情况就... 查看详情
cors和jsonp的区别,如何解决跨域问题?(代码片段)
在我们了解JSONP和CORS之前我们先明确一下:我们为什么要使用cors和jsonp呢?实际上,cors和jsonp都是用于解决跨域问题,当两个页面的协议、域名、端口号中有一个不一致时就存在了跨域,一旦出现跨域,浏... 查看详情
实战,springboot中如何解决cors跨域问题~(文末送书)(代码片段)
CORS(Cross-OriginResourceSharing)"跨域资源共享",是一个W3C标准,它允许浏览器向跨域服务器发送Ajax请求,打破了Ajax只能访问本站内的资源限制。在前后分离的架构下,我们经常会遇到跨域CORS问题,... 查看详情
pythonflask框架跨域问题的解决方法(代码片段)
文章目录一、跨域是什么二、如何解决跨域问题1.跨域请求的过程总结一、跨域是什么从一个域名去请求另一个域名,这个过程称之为跨域。浏览器从一个域名的网页去请求另一个域名的资源,域名、端口、协议有一个不... 查看详情
vue中如何解决跨域(代码片段)
1、配置代理跨域 config/index.jsproxyTable:'/api':target:'http://shuige.wicp.vip/',//目标接口域名changeOrigin:true,//是否跨域pathRewrite:'^/api':'/'//重写接口后台接口指向不统一所以指向所有/,cssSourceMap 查看详情
实战,springboot中如何解决cors跨域问题~(文末送书)(代码片段)
...trol-Allow-Origin'headerispresentontherequestedresource.下面看一下如何让你的SpringBoot项目支持CORS跨域。SpringBoot处理跨域在SpringBoot后端处理跨域比较简单,只需要在项目中添加如下一个配置类即可:/** * Spring Boot 2.0 解决跨域... 查看详情
nodejs+koa2如何解决跨域问题(代码片段)
基础知识同源策略是指三同:同协议/同域名/同端口对比双方:当前页面的地址和Ajax获取数据的地址(这里可能有点抽象,下面我会举例子说明)常见报错场景描述场景一:我在浏览器地址栏中输入http://12... 查看详情
问题:跨域及解决方案(代码片段)
...致css、js或者ajax对后端请求等资源无法访问的情况。要想解决跨域问题,首先先得了解什么是跨域问题。问题:什么是跨域跨越问题是由于浏览器的同源策略,是浏览器强制要求的安全策略,所以想要了解跨域,首先得了解同源... 查看详情
解决跨域session同步问题(代码片段)
跨域来源:(前端站点和后端API布署到不同的站点) 解决方案一.服务端设置1.配置允许跨域请求publicclassBaseAction/***支持跨域请求*@authorfxd*@paramresponse*@sinceJDK1.6*/protectedvoidcrossComain(HttpServletRequestrequest,HttpServletResponserespo 查看详情
springboot如何优雅的解决ajax+自定义headers的跨域请求[转](代码片段)
...页面地址不同即为跨域。具体可以查看下表:2、springboot如何解决跨域问题1.普通跨域请求解决方案:①请求接口添加注解@CrossOrigin(or 查看详情
springsecurity系列教程解决springsecurity环境中的跨域问题(代码片段)
...c;我会带大家进行代码实现,看看在SpringSecurity环境中如何解决跨域问题。一.启用SpringSecurity的CORS支持1.创建web接口我先在SpringBoot环境中,创建一个端 查看详情