【发布时间】:2020-05-27 03:45:24
【问题描述】:
“远程”部分是我对此感到困惑的原因。我正在尝试向https://api.smarkets.com/v3/sessions 发出 POST 请求。路由是为 API 的后续请求创建会话令牌。
如果我在本地机器上执行此请求,它可以正常工作。我收到 2xx 响应。但是,如果我在远程计算机上尝试(我昨晚启动的 DO 框),我会收到“503 服务暂时不可用”响应。
我尝试通过浏览器登录,但得到了相同的响应。我raised this question to Smarkets & 他们没有意识到这可能是由于 Smarkets 实施的同源政策。
一段时间后,我通过禁用同源策略设法通过 Chrome 登录。 API 请求仍然失败。
根据我对同源政策的有限了解(如果我错了请纠正我),它指定了允许从某些来源返回哪些资源。类似于 CORS 问题。为什么我必须在远程浏览器上显式禁用网络安全才能登录 smarkets.com,但我本地计算机上的浏览器可以正常登录而无需修改?
我在上面强调的问题显示了我尝试了哪些方法来使其发挥作用。无论我尝试设置什么请求标头,响应标头始终与 X-Frame-Options 响应标头始终设置为 SAMEORIGIN 相同,再次根据我的理解,只允许发送资源到发件人的同一来源。 IE。从 smarkets.com 发送的资源只能通过来自 smarkets.com 的请求访问。
我当前的请求尝试是(with httpie):
http POST https://api.smarkets.com/v3/sessions/ 'Access-Control-Request-Headers: Content-Type, Accept, Host, Origin' 'Access-Control-Request-Methods: POST, OPTIONS' 'Origin: https://smarkets.com' username=<username> password=<password> --print=Hh
请求和响应标头是:
我真的在寻找;
- 明确同源政策的实施内容
- 为什么这个请求在我的本地机器上成功,而不是在远程 DO 盒子上
- 我怎样才能让这个请求成功?
Smarkets 的用户似乎认为这是同源问题,但可能不是。
编辑:
这不是防火墙问题,因为我禁用了 Ubuntu 的内置防火墙。我正在通过来自同一来源的 http(s) 执行其他请求,所以我无法弄清楚这个有什么不同
编辑 2:
以下是成功请求/响应标头的示例:
我能够从同一个盒子向不同来源进行其他 API 调用,包括:
https://api.betdaq.comhttps://api.betfair.comhttps://api.matchbook.com
我没有针对盒子上的任何来源添加任何配置,所以我真的不确定这个问题是什么。我已经添加了我能想到的所有可能的 CORS 请求标头,但仍然没有运气。
编辑 3:
令人讨厌的是,这个问题现在已经得到修复,因为供应商 API 默认将 DigitalOcean IP 列入黑名单...
【问题讨论】: