Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

接口测试的时候出现跨域问题,可是后端已经开启跨域了 #15

Closed
Ttxy0105 opened this issue Nov 6, 2017 · 15 comments
Closed

Comments

@Ttxy0105
Copy link

Ttxy0105 commented Nov 6, 2017

The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. Origin 'http://localhost:8080' is therefore not allowed access. The credentials mode of requests initiated by the XMLHttpRequest is controlled by the withCredentials attribute.

@wuomzfx
Copy link
Contributor

wuomzfx commented Nov 6, 2017

你这个开启跨域的后端,不是指 api-mocker的服务端吧?api-mocker服务端默认就是开启跨域的

@Ttxy0105
Copy link
Author

Ttxy0105 commented Nov 6, 2017

不是,是我们自己的服务端开启了跨域。我这边点击测试的时候,看console里面的报错好像是localhost不能去请求。有点疑问

@Ttxy0105
Copy link
Author

Ttxy0105 commented Nov 6, 2017

用postman测试接口的时候,能成功

@wuomzfx
Copy link
Contributor

wuomzfx commented Nov 6, 2017

@Ttxy0105 postman测试接口,本来也不会存在跨域问题的。http://oyrpdvj2f.bkt.clouddn.com/ 方便的话,你可以先在我这个测试的api-mocker系统里注册一个账号,再上面编辑下你们这个接口,我再去调试看看

@wuomzfx
Copy link
Contributor

wuomzfx commented Nov 6, 2017

我大概知道原因了,你把服务端允许跨域关了,应该就好了,目前api-mocker的测试prod跟dev,还有代理模式的转发,都是服务端发起的代理请求,不需要服务端开启跨域的。不过你这开启跨域反而出问题,确实是个bug,我回头看看解决下。 @Ttxy0105

@Ttxy0105
Copy link
Author

Ttxy0105 commented Nov 6, 2017

@wuomzfx 谢谢,最近也准备部署在服务器上,把公司的文档转到api-mocker上面

@wuomzfx
Copy link
Contributor

wuomzfx commented Nov 6, 2017

@Ttxy0105 好,感谢反馈跟支持~

@Ttxy0105
Copy link
Author

Ttxy0105 commented Nov 6, 2017

@wuomzfx 找到问题了

特别注意: 给一个带有withCredentials的请求发送响应的时候,服务器端必须指定允许请求的域名,不能使用“”。上面这个例子中,如果响应头是这样的 Access-Control-Allow-Origin: ,则响应会失败。1

我在testApi那个接口那边将config.withCredentials设置为false,就可以了。
全局的withCredentials导致了这个问题

@wuomzfx
Copy link
Contributor

wuomzfx commented Nov 6, 2017

@Ttxy0105 不好意思,刚去测试链接上 看了下,不是我刚刚说的原因。请求结果成功了,只是你们返回的接口请求头是Content-Type:text/html; charset=utf-8,不是json格式的,解析失败了。你直接转发代理再去浏览器里打开其实是ok的。我看看怎么优化下这个错误提示,现在没catch对error

@wuomzfx
Copy link
Contributor

wuomzfx commented Nov 6, 2017

@Ttxy0105 config.withCredentials 这个不能关,根本问题不是这里

@wuomzfx
Copy link
Contributor

wuomzfx commented Nov 6, 2017

@Ttxy0105 另外,你们的接口我暂时拿来做下测试蛤。

@Ttxy0105
Copy link
Author

Ttxy0105 commented Nov 6, 2017

@wuomzfx 但是Access-Control-Allow-Origin:* ,这边服务端是这么写的。
全局的withCredentials是给server端连接的,我之前设置全局withCredentials为false,导致我本地无法登录。之后我单独将testapi里面的config中的withCredentials设置为false,就可以了。
因为我这边没有设置Access-Control-Allow-Origin为某个确定地址的并且Access-Control-Allow-Credentials:true的接口可以测试,所以麻烦你啦

@wuomzfx
Copy link
Contributor

wuomzfx commented Nov 6, 2017

@Ttxy0105 嗯,不过这应该是我在后端代理请求时做判断,我已经修改好传dev分支了,你可以拉取一下最新代码,重启下服务端就ok了,不需要客户端将withCredentials设为false。 fix in 7880cf6 .

@Ttxy0105
Copy link
Author

Ttxy0105 commented Nov 6, 2017

@wuomzfx 好的,辛苦啦。
请教下:可以部署在windows的服务器上吗?

@wuomzfx
Copy link
Contributor

wuomzfx commented Nov 6, 2017

@Ttxy0105 我没有尝试过,应该是没问题的,有问题可以随时跟我说,github没反应的话,可以加我微信,75851654

@wuomzfx wuomzfx closed this as completed Nov 6, 2017
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants