关于 vue 跨域访问遇到的一个神奇的 bug,想问问万能的 V 友有遇到过么

2019-04-19 14:49:18 +08:00
 guoke360

楼主在做一个 vue 的项目的时候遇到了跨域访问的问题,后来采取了代理的解决方案 proxyTable: { '/api': { target: '',//设置你调用的接口域名和端口号 changeOrigin: true, //跨域 pathRewrite: { '^/api': '' // }, }, 这边使用了之后经过测试本地使用 get 接口访问基本上没有啥问题,但是一旦使用了 post 接口并且带参数的情况下就会直接没反应(经过测试觉得是代理没有被启用 Error occurred while trying to proxy request /shop/order_pay from localhost to https: (ECONNRESET) ( https://nodejs.org/api/errors.html#errors_common_system_errors) npm 直接抱着个错误 http 的返回值也是 504 Gateway Timeout 经过测试接口丢到线上访问没有问题 但是开发环境还是无法与后端 POSt 握手成功 试了下 get 参数传递入参却没有问题,谷歌了半天好像大部分也没有遇到过这种情况想问一下万能的 V 友有啥解决方案么(本地写个了 node 程序直接 post 链接感觉没啥问题,想了半天想不出是什么问题

10892 次点击
所在节点    问与答
35 条回复
guoke360
2019-04-19 14:49:51 +08:00
楼主在做一个 vue 的项目的时候遇到了跨域访问的问题,后来采取了代理的解决方案
proxyTable: {
'/api': {
target: '',//设置你调用的接口域名和端口号
changeOrigin: true, //跨域
pathRewrite: {
'^/api': '' //
},
},
这边使用了之后经过测试本地使用 get 接口访问基本上没有啥问题,但是一旦使用了 post 接口并且带参数的情况下就会直接没反应(经过测试觉得是代理没有被启用
Error occurred while trying to proxy request /shop/order_pay from localhost to https:
(ECONNRESET) ( https://nodejs.org/api/errors.html#errors_common_system_errors)
npm 直接抱着个错误 http 的返回值也是 504 Gateway Timeout
经过测试接口丢到线上访问没有问题
但是开发环境还是无法与后端 POSt 握手成功
试了下 get 参数传递入参却没有问题,谷歌了半天好像大部分也没有遇到过这种情况想问一下万能的 V 友有啥解决方案么(本地写个了 node 程序直接 post 链接感觉没啥问题,想了半天想不出是什么问题
额上面的格式太乱了试试看这样会好一点么
fishlium
2019-04-19 14:57:57 +08:00
是 option 请求报错了么?
guoke360
2019-04-19 15:01:07 +08:00
@fishlium Request failed with status code 504 http 直接报错 504 超时鸭,后台和我说都没有进入接口..我感觉像是代理失效了一样
romoo
2019-04-19 15:08:12 +08:00
加上 xfwd: false 试试
guoke360
2019-04-19 15:21:07 +08:00
@romoo 不行啊,还是 504
wly19960911
2019-04-19 15:34:20 +08:00
pathRewrite 去掉看看。你具体看看 pathRewrite 干什么的就知道了
deepdark
2019-04-19 15:37:06 +08:00
应该是 options 方法爆了后端,504 是后端的锅,让后端检查是否支持 options 方法
Terry05
2019-04-19 15:40:27 +08:00
能好好排版下吗
guoke360
2019-04-19 15:43:17 +08:00
@wly19960911 pathRewrite 查了下是替换代理,我把他删掉以后改了下格式但是好像我自己没有发送过去,这个是最郁闷的。
guoke360
2019-04-19 15:43:55 +08:00
@deepdark 放到线上以后好像就没问题了,post 后端操作也是正常的,郁闷的地方也是在这一点
wly19960911
2019-04-19 15:49:47 +08:00
@guoke360 #10 线上不存在 反向代理。

proxyTable: {
'/api': {
target: 'example.com/project',
changeOrigin: true, //跨域
pathRewrite: {
'^/api': '' //
},
},

这个规则的话,假设有个请求 是 /api/user/1.
会转发成 example.com/project/user/1; 我说明下,我不清楚你具体怎么设置的,你参考看看你的写法是不是符合你要求?
Lax
2019-04-19 15:51:13 +08:00
是 localhost 发起的 OPTIONS 请求?
504 一定会在服务端产生日志的,可能在负载均衡就被拦下来了
guoke360
2019-04-19 15:54:57 +08:00
@wly19960911 先感谢下层主抽出时间,我现在遇到的问题查了下好像是走了代理以后协议发送不出去(仅限 post 方式并且传入了参数的情况下),正常 get 方法到后台都没有问题,这个也是目前最郁闷的地方
wly19960911
2019-04-19 15:57:51 +08:00
@guoke360 #13 不好意思,写着写着都忘记了这个问题.....丢人了
guoke360
2019-04-19 16:01:00 +08:00
@Lax 后端那好像根本接收不到,好像我发送的请求在本地被拦截了
wake1bear
2019-04-19 16:10:51 +08:00
用 easymock 建一个 post 接口发过去试试,如果没问题,那估计是后端把 options 请求给拦掉了
jin5354
2019-04-19 16:14:34 +08:00
打开浏览器控制台看发出去的请求,是不是 options 的问题
guoke360
2019-04-19 16:22:35 +08:00
@jin5354 额这个怎么看啊 Error occured while trying to proxy to:接口的返回值直接是这个,看了下感觉好像没发出去
XHR 的报错是 XHR failed loading 这个
jin5354
2019-04-19 16:28:44 +08:00
@guoke360 chrome 浏览器,command+option+i 或者 f12 开控制台,进入 network 面板点击 XHR。。。
v2chou
2019-04-19 16:30:50 +08:00
Error occured while trying to proxy to: 搜这个很多人出现这个问题啊,按他们的解决方法试试吧,代码都没有详细贴出,怎么叫人排查问题

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/556784

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX