vue + vue-resource 跨域访问

使用vue + vue-resource进行数据提交,后台使用RESTful API的方式存取数据,搞了一天,终于把后台搞好了。进行联合调试时,数据不能提交,报403错误:

XMLHttpRequest cannot load http://localhost:8090/xxx/xxx. Response to preflight request doesn‘t pass access control check: No ‘Access-Control-Allow-Origin‘ header is present on the requested resource. Origin ‘http://localhost:8080‘ is therefore not allowed access. The response had HTTP status code 403.

当时就懵逼了,愣了半天,突然脑子里灵光一闪,这**的不会是没有权限进行跨域访问的错误吧?然后就赶紧上网查找解决方案,有前端解决方案 和 后端解决放案两种:

前端解决方案是在 build/webpack.dev.conf.js 文件中加个代理,但好像要把访问的API一一映射,工作量有点大,遂没有使用这种方式。这种方式没试过,不知可不可行。

后端方案为在后台站点中加入允许指定的站点访问的信息:

/**
 * 解决前端站点(主要为JavaScript发起的Ajax请求)访问的跨域问题
 */
@Configuration
public class CorsConfig extends WebMvcConfigurerAdapter {  

    @Override
    public void addCorsMappings(CorsRegistry registry) {  

        registry.addMapping("/**")
                .allowedOrigins("*")    //允许所有前端站点调用
                .allowCredentials(true)
                .allowedMethods("GET", "POST", "DELETE", "PUT")
                .maxAge(1728000);
    }
}

原来发起Ajax跨域请求后,事先会对目标站点进行一次询问,是否允许访问,允许后,才会发起真实的请求(参考:构建public APIs与CORSHTTP访问控制(CORS)),上述java代码正是在返回的信息里设置其允许访问的意思。

时间: 2024-10-27 11:52:23

vue + vue-resource 跨域访问的相关文章

springboot允许跨域访问

前后端开发学习中,vue里面需要跨域访问后台数据 可在springboot后台里面添加个配置类即可: package com.springboottest.config; import org.springframework.beans.factory.annotation.Configurable; import org.springframework.context.annotation.Configuration; import org.springframework.web.servle

解决vue+springboot前后端分离项目,前端跨域访问sessionID不一致导致的session为null问题

问题: 前端跨域访问后端接口, 在浏览器的安全策略下默认是不携带cookie的, 所以每次请求都开启了一次新的会话. 在后台打印sessionID我们会发现, 每次请求的sessionID都是不同的, 既然每次请求都是一个新的会话, 那我们去获取session的时候自然就是null了. 解决办法如下: 环境: vue 2.0 springboot 2.1.6 一.前端部分 1.  在vue引入axios的位置添加以下代码 import axios from 'axios' axios.defau

Vue之Axios跨域问题解决方案

// axios 中的GET请求 axios.get('/user', { params: { ID: '001' } }) .then(function (response) { console.log(response); }) .catch(function (error) { console.log(error); }); // axios 中的POST请求 axios.post('/user', { firstName: '1', lastName: '2' }) .then(func

js跨域访问,No 'Access-Control-Allow-Origin' header is present on the requested resource

js跨域访问提示错误:XMLHttpRequest cannot load http://...... No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'null' is therefore not allowed access. 解决方法: 1.如果请求的url是aspx页面,则需要在aspx页面中添加代码:Response.AddHeader("Access-Contro

用CORS 解决vue.js django跨域调用

Cross-Origin Resource Sharing(CORS)跨域资源共享是一份浏览器技术的规范,提供了 Web 服务从不同域传来沙盒脚本的方法,以避开浏览器的同源策略,是 JSONP 模式的现代版.与 JSONP 不同,CORS 除了 GET 要求方法以外也支持其他的 HTTP 要求.用 CORS 可以让网页设计师用一般的 XMLHttpRequest,这种方式的错误处理比 JSONP 要来的好.另一方面,JSONP 可以在不支持 CORS 的老旧浏览器上运作.现代的浏览器都支持 CO

[转]No 'Access-Control-Allow-Origin' header is present on the requested resource.'Ajax跨域访问解决方案

原 https://blog.csdn.net/zhoucheng05_13/article/details/53580683 No 'Access-Control-Allow-Origin' header is present on the requested resource. 什么是跨域访问 举个栗子:在A网站中,我们希望使用Ajax来获得B网站中的特定内容.如果A网站与B网站不在同一个域中,那么就出现了跨域访问问题.你可以理解为两个域名之间不能跨过域名来发送请求或者请求数据,否则就是不安

浏览器禁止跨域访问及解决: No 'Access-Control-Allow-Origin' header is present on the requested resource.

一.出现报错 二.原因: 1.跨域访问是浏览器做的一个保护机制(html5页面需要浏览器渲染) 2.如果页面所访问的后端没有部署在同一个浏览器也会报错 三.跨域问题的解决方式: A.通过后端访问后端的方式解决.     B.通过页面的漏洞来解决--jsonp(不常用) C.现在浏览器支持cors,当然需要我们后端代码也要支持跨域,springMVC是支持cors 写一个配置类:通过接口WebMvcConfigurer来放行跨区域访问 注意事项: 1.跨区域的路径必须是全路径(URL+端口号) 如

vue cli 解决跨域 线上 nginx 反向代理配置

前后分离 axios 接 api 跨域问题如图: 解决办法: 1. npm start 本地开发环境解决: 在webpack配置文件 /config/index.js 里找到 proxyTable 开启代理 changeOrigin:true, proxyTable: { '/api':{ target:'http://xx.xx.xx.xx:5568', changeOrigin:true, pathRewrite:{ '^/api':'/api' } } }, 2. npm run buil

Swagger跨域访问

我们用springboot开发完后,需要前端vue用swagger跨域,默认是不能跨域的,所以需要我们后台设置跨域访问,将下面代码完整复制即可. 在springboot项目中新建class : CorsConfig.java 完整跨域代码如下: @Configuration public class CorsConfig extends WebMvcConfigurerAdapter { @Override public void addCorsMappings(CorsRegistry reg