首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >webpack-dev-server代理后端一直报CORS跨域或500错误

webpack-dev-server代理后端一直报CORS跨域或500错误

作者头像
人人都是码农
发布2025-05-12 15:10:01
发布2025-05-12 15:10:01
14600
代码可运行
举报
运行总次数:0
代码可运行

本地运行vue项目,打包工具是webpack,后端接口已经部署到开发域名上,接口用postman请求没问题,但是在项目中代理接口后运行就一直报500错误,报错信息如下:

代码语言:javascript
代码运行次数:0
运行
复制
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中的代理配置:

代码语言:javascript
代码运行次数:0
运行
复制
// 开发代理配置
devServer: {
    proxy: {
        '^/api/': {
            target: 'http://cafe123.cn',
            changeOrigin: true
        }
    }
}

探索原因

开始一直以为是devServer代理配置或者axios哪的问题,代理肯定是成功了的,因为500错误本身就是服务器返回的,然后各种调试axios都无效。

直接弃用devServer代理,换成whistle在浏览器上来转发代理接口,服务器上依然返回500错误。postman中请求没问题的cURL:

代码语言:javascript
代码运行次数:0
运行
复制
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请求头

代码语言:javascript
代码运行次数:0
运行
复制
// 开发代理配置
devServer: {
    proxy: {
        '^/api/': {
            target: 'http://cafe123.cn',
            changeOrigin: true,
            headers: {
                Origin: 'http://cafe123.cn'
            }
        }
    }
}

2、直接去掉请求中的Origin请求头

代码语言:javascript
代码运行次数:0
运行
复制
// 开发代理配置
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[1]
  • • HTTP Headers Origin[2]
引用链接

[1] webpack devServer.headers: https://webpack.js.org/configuration/dev-server/#devserverheaders [2] HTTP Headers Origin: https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Reference/Headers/Origin

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 秘密菜单 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 探索原因
  • 解决办法
  • http的origin请求头
  • devServer的changeOrigin配置
    • 引用链接
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档