网站首页 > 文章精选 正文
本地运行vue项目,打包工具是webpack,后端接口已经部署到开发域名上,接口用postman请求没问题,但是在项目中代理接口后运行就一直报500错误,报错信息如下:
Uncaught runtime errors:
ERROR
Request failed with status code 500
at createError (webpack-internal:///./node_modules/axios/lib/core/createError.js:16:15)
at settle (webpack-internal:///./node_modules/axios/lib/core/settle.js:17:12)
at XMLHttpRequest.handleLoad (webpack-internal:///./node_modules/axios/lib/adapters/xhr.js:61:7)
vue.config.js中的代理配置:
// 开发代理配置
devServer: {
proxy: {
'^/api/': {
target: 'http://cafe123.cn',
changeOrigin: true
}
}
}
探索原因
开始一直以为是devServer代理配置或者axios哪的问题,代理肯定是成功了的,因为500错误本身就是服务器返回的,然后各种调试axios都无效。
直接弃用devServer代理,换成whistle在浏览器上来转发代理接口,服务器上依然返回500错误。postman中请求没问题的cURL:
curl --location --request POST 'https://cafe123.cn/api/login' \
--header 'Content-Type: application/json' \
--data-raw '{
"account": "admin",
"password": "1345102704"
}'
然后直接复制出来浏览器中的请求cURL,放到postman中发送请求,发现浏览器加了很多请求头,然后再一个请求头一个请求头测试,最终发现原因在Origin请求头上。
解决办法
找到问题的原因就好办了,origin请求头有问题,那就直接改它,方式也有下面两种:
1、在devServer代理中添加Origin请求头
// 开发代理配置
devServer: {
proxy: {
'^/api/': {
target: 'http://cafe123.cn',
changeOrigin: true,
headers: {
Origin: 'http://cafe123.cn'
}
}
}
}
2、直接去掉请求中的Origin请求头
// 开发代理配置
devServer: {
proxy: {
'^/api/': {
target: 'http://cafe123.cn',
changeOrigin: true,
router: function(request) {
delete request.headers.origin
},
}
}
}
http的origin请求头
请求头 Origin 表示请求的来源(协议、主机、端口)。如果一个用户代理需要请求一个页面中包含的资源,或者执行脚本中的 HTTP 请求(fetch),那么该页面的来源(origin)就可能被包含在这次请求中,浏览器中请求会出现 Origin 请求头的2种情形:
- 跨源请求
- 除 GET 和 HEAD 以外的同源请求(即它会被添加到同源的 POST、OPTIONS、PUT、PATCH 和 DELETE 请求中)
devServer的changeOrigin配置
changeOrigin: true/false, Default: false - changes the origin of the host header to the target URL。
changeOrigin是用来将host请求头修改为target的URL,注意这里修改的并不是origin header,这个配置实际跟解决跨域问题没啥关系。
参考文档
- webpack devServer.headers:https://webpack.js.org/configuration/dev-server/#devserverheaders
- HTTP Headers Origin:https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Reference/Headers/Origin
猜你喜欢
- 2025-05-24 前端人必看!10 个实战优化技巧,让项目性能直接起飞!
- 2025-05-24 使用 nginx 同域名下部署多个 vue 项目,并使用反向代理
- 2025-05-24 React 组件频繁重绘?5 个实战技巧让页面流畅度暴涨 70%!
- 2025-05-24 前端踩坑血泪史!5 个 TypeScript 实战技巧拯救你的代码
- 2025-05-24 安装Node.js
- 2025-05-24 【HarmonyOS Next之旅】兼容JS的类Web开发(一)
- 2025-05-24 什么,你还使用 webpack?别人都在用 vite 搭建项目了
- 2025-05-24 微信百度字节小程序包过大解决方案(实战经验总结)
- 2025-05-24 从 Element UI 源码的构建流程来看前端 UI 库设计
- 2025-05-24 Tree Shaking 原理:如何让 JavaScript 包体积减少高达50%?
- 最近发表
-
- 五分钟轻松熟悉一个k8s Operator应用制作
- iLogtail 使用入门 - K8S 环境日志采集到 SLS
- k8s之配置CNI网络(k8s 网络配置)
- Linux系统K8S集群架构及常用操作命令之K9S安装及使用
- Centos 安装部署Kubernetes(K8s)(k8s环境搭建 centos)
- 集群外部署Prometheus+Grafana监控K8S解析
- k8s安装UI管理工具Kuboard安装(k8s安装步骤)
- k8s中使用Helm安装生产级别redis集群
- K8s集群(K8s集群添加新节点更新步骤)
- Kubernetes (k8s) 基本命令速查(k8s kubernetes教程)
- 标签列表
-
- newcoder (56)
- 字符串的长度是指 (45)
- drawcontours()参数说明 (60)
- unsignedshortint (59)
- postman并发请求 (47)
- python列表删除 (50)
- 左程云什么水平 (56)
- 计算机网络的拓扑结构是指() (45)
- 编程题 (64)
- postgresql默认端口 (66)
- 数据库的概念模型独立于 (48)
- 产生系统死锁的原因可能是由于 (51)
- 数据库中只存放视图的 (62)
- 在vi中退出不保存的命令是 (53)
- 哪个命令可以将普通用户转换成超级用户 (49)
- noscript标签的作用 (48)
- 联合利华网申 (49)
- swagger和postman (46)
- 结构化程序设计主要强调 (53)
- 172.1 (57)
- apipostwebsocket (47)
- 唯品会后台 (61)
- 简历助手 (56)
- offshow (61)
- mysql数据库面试题 (57)