vue拦截器设置请求头失败,laravel设置前端请求头跨域

前端同事在vue的request里面的拦截器中设置请求头,发现'Authorization'可以正常添加到请求头,可以正常访问,但是添加其他的如'browserVersion'参数就不行,

会出现Request header field browserversion is not allowed by Access-Control-Allow-Headers in preflight response错误。

随后怀疑是nginx配置有问题,不过看了下nginx.conf中没并没有做相关跨域的配置项。后来就在laravel项目中找,全局搜索Access-Control-Allow-Headers字样,还真找到一个中间件文件,如下,

只要在允许头后面增加相应的参数,然后前端就可以设置其他的请求头了

### Vue3 中 Axios 设置请求头的方法 在 Vue3 项目中使用 Axios 设置请求头可以通过多种方式实现,具体取决于项目的实际需求以及后端接口的要求。以下是几种常见的设置请求头的方式: #### 方法一:全局默认配置 通过 `Axios` 的全局默认配置可以为所有的请求统一设置请求头。 ```javascript import axios from 'axios'; // 全局设置请求头 axios.defaults.headers.common['Authorization'] = `Bearer ${localStorage.getItem('token')}`; axios.defaults.headers.post['Content-Type'] = 'application/json'; ``` 这种方式适用于所有请求都需要相同的头部信息的情况[^1]。如果某些特定的请求不需要这些头部信息,则可以在单独的请求中覆盖它们。 --- #### 方法二:实例级别的配置 创建一个新的 Axios 实例并为其指定自定义的请求头。 ```javascript import axios from 'axios'; const instance = axios.create({ baseURL: 'https://api.example.com', timeout: 5000, headers: { 'Content-Type': 'application/json', // 默认 JSON 格式的请求体 'Authorization': `Bearer ${localStorage.getItem('token')}` } }); export default instance; ``` 这种方法适合于需要针对不同模块或功能区分开来的场景[^4]。例如,在登录模块和数据查询模块之间可能有不同的认证机制或者不同的基础 URL。 --- #### 方法三:单次请求中的动态配置 对于一些特殊的请求,可以直接在每次调用时传递具体的头部信息。 ```javascript this.$axios({ method: 'post', url: '/login', data: { username, password }, headers: { 'Content-Type': 'application/x-www-form-urlencoded', // 或者其他格式 'Custom-Header': 'custom-value' } }).then(response => { console.log(response.data); }); ``` 当某个 API 接口有特殊的需求(比如上传文件时需要 multipart/form-data 类型),则推荐此方法来灵活调整请求头[^3]。 --- #### 方法四:拦截器修改请求头 利用 Axios 提供的拦截器功能,可以在发送请求之前自动添加所需的头部字段。 ```javascript axios.interceptors.request.use(config => { const token = localStorage.getItem('token'); if (token) { config.headers.Authorization = `Bearer ${token}`; } return config; }, error => Promise.reject(error)); ``` 这种做法特别有用,尤其是在用户身份验证过程中需要用到令牌的情况下。它能够减少重复代码量,并保持逻辑的一致性和可维护性。 --- #### 注意事项 1. 如果遇到问题导致自定义 Header 被拒绝访问,请确认服务器端已经正确设置了 CORS 头部响应项,如 `Access-Control-Allow-Headers` 包含了客户端所使用的 Headers 名称列表。 2. 对于敏感信息(如 Token),建议存储在 HTTP-only Cookies 中而不是 LocalStorage,从而提高安全性。 3. 当 Content-Type 设定为 application/json 并且传输复杂对象作为 payload 数据时,通常还需要借助 JavaScript 原生函数 `JSON.stringify()` 将其序列化成字符串形式再提交给服务端解析处理[^2]。 --- ### 总结 以上介绍了四种主要的技术手段用于解决如何在 Vue3 应用程序里边适配 Axios 客户库完成对远程 RESTful Web Service 进行交互前预设必要的 Meta Data 属性值这一类典型开发任务的实际应用场景下的最佳实践方案。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值