vue&php解决跨域的方法

博客介绍了解决跨域的CORS方式,分两种情况:一是不需要带cookie,前端发请求不携带,后台无需处理,相关响应头按需设置;二是需要带cookie,Access-Control-Allow-Origin必须设为具体域名,不能为*。

解决跨域有两种情况:
CORS方式:
1:不需要带cookie的情况下:

前端:

import axios from 'axios'
axios.defaults.withCredentials = false;

设置 发请求不携带 cookie
后台: 由于不需要带cookie后台不需要拿到cookie做如何处理;
so:

'Access-Control-Allow-origin': '*'
'Access-Control-Allow-Credentials': 'false'
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS'
'Access-Control-Allow-Headers': ‘Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With'
'Content-Type': 'text/html; charset=utf-8'

需要注意就是
‘Access-Control-Allow-origin’: '
‘Access-Control-Allow-Credentials’: ‘false’
设置为具体的域名,能设置为

不携带cookie

2:需要带cookie的情况下:
前端

import axios from 'axios'
axios.defaults.withCredentials = true;

后台:

'Access-Control-Allow-origin': "http://localhost:9530"
'Access-Control-Allow-Credentials': 'true'
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS'
'Access-Control-Allow-Headers': ‘Origin, No-Cache, X-Requested-With, If-Modified-Since, Pragma, Last-Modified, Cache-Control, Expires, Content-Type, X-E4M-With'
'Content-Type': 'text/html; charset=utf-8'

Access-Control-Allow-Origin必须设置为具体的域名,而不能设置为*。
例如:
Access-Control-Allow-Origin:https://mp.youkuaiyun.com;

希望对看了这篇文章的你有帮助!

### Vue3 Axios 解决方案 #### 后端配置CORS解决请求问题 对于Vue3项目中的Axios问题,主要通过调整后端来实现资源共享(CORS)[^1]。具体来说,在Spring Boot环境下可以通过两种方式处理: - **针对单一Controller的方法** 如果只需要特定接口支持,则可以在对应的`@RestController`类上添加注解`@CrossOrigin(origins = "http://指定名")`,从而仅使该控制器下的API开放给指定来源的请求。 - **全局启用CORS** 对于整个应用都需要开启的情况,推荐修改项目的Web配置文件或编写自定义过滤器来统一设置响应头信息,允许来自任意合法站点的HTTP/HTTPS请求访问资源[^2]。 ```java // Java Spring Boot Example for Global CORS Configuration @Bean public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override public void addCorsMappings(CorsRegistry registry) { registry.addMapping("/**") .allowedOrigins("*") // Allow all origins, or specify a list of allowed domains. .allowedMethods("GET", "POST", "PUT", "DELETE", "OPTIONS"); } }; } ``` #### 前端Axios基础配置 尽管前端不做特殊处理也能正常发起带有凭证(如Cookie)的请求,但在实际开发过程中还是建议按照最佳实践来进行适当封装[^3]。这不仅有助于提高代码可维护性和复用率,还能更好地管理错误和拦截逻辑。 ```javascript import axios from 'axios'; const service = axios.create({ baseURL: process.env.VUE_APP_BASE_API, timeout: 5000 }); service.interceptors.request.use( config => { // Add Authorization header with token here if needed return config; }, error => Promise.reject(error) ); export default service; // Usage example in component methods async fetchData() { try { const response = await this.$axios.get('/example'); console.log(response.data); } catch (error) { console.error('Error fetching data:', error.message); } } ``` 上述做法能够有效简化每次调用时重复编写的部分,并且便于后续扩展功能特性,比如身份验证、日志记录等操作[^4]。 #### 实际案例展示 考虑如下场景:从前端发送包含用户名字与年龄的数据至服务器端进行保存。此时即使存在不同源的情况下也可以顺利完成交互过程[^5]。 ```javascript try { const { data: res1 } = await this.$axios.post('/api/sys.php', { name: "张三", age: 23 }); } catch (err) { console.error(err); } ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值