Cors 远程服务器上的同源策略阻止API请求

Cors 远程服务器上的同源策略阻止API请求,cors,same-origin-policy,Cors,Same Origin Policy,“远程”部分是我对此感到困惑的原因。我正在尝试向https://api.smarkets.com/v3/sessions。路由是为API的后续请求创建会话令牌 如果我在本地机器上执行此请求,它可以正常工作。我得到了2xx的回复。然而,如果我在一台远程机器上尝试(我昨晚启动的DO box),我会得到“503服务暂时不可用”的响应 我试图通过浏览器登录&我得到了相同的响应。我&他们回避了一个事实,那可能是由于Smarkets强加的同一原产地政策 一段时间后,我通过禁用同源策略,设法通过Chrome登

“远程”部分是我对此感到困惑的原因。我正在尝试向
https://api.smarkets.com/v3/sessions
。路由是为API的后续请求创建会话令牌

如果我在本地机器上执行此请求,它可以正常工作。我得到了2xx的回复。然而,如果我在一台远程机器上尝试(我昨晚启动的DO box),我会得到“503服务暂时不可用”的响应

我试图通过浏览器登录&我得到了相同的响应。我&他们回避了一个事实,那可能是由于Smarkets强加的同一原产地政策

一段时间后,我通过禁用同源策略,设法通过Chrome登录。API请求仍然失败

根据我对同源策略的有限了解(如果我错了,请纠正我),它指定了允许从某些来源返回哪些资源。类似于CORS问题。为什么我必须显式禁用远程浏览器上的web安全性才能让它登录到smarkets.com,但我在本地计算机上的浏览器可以正常登录而不需要修改

我在上面强调的问题显示了我尝试了哪些方法来实现这一点。无论我尝试设置什么请求头,响应头总是相同的,并且
X-Frame-Options
response header总是设置为
SAMEORIGIN
,根据我的理解,这同样只允许将资源发送到发送方的同一来源。即,从smarkets.com发送的资源只能通过smarkets.com的请求访问

我当前的请求尝试是(使用
httpie
):

httpposthttps://api.smarkets.com/v3/sessions/ '访问控制请求标头:内容类型、接受、主机、来源''访问控制请求方法:POST、选项''来源:https://smarkets.com'username=password=--print=Hh
请求和响应头包括:

我真的在寻找

  • 明确同一原产地政策所施加的影响
  • 为什么此请求在我的本地计算机上成功,但在远程DO框上没有成功
  • 我如何才能使此请求成功
Smarkets的用户似乎认为这是一个相同的来源问题,但可能不是

编辑:

这不是防火墙问题,因为我禁用了Ubuntu的内置防火墙。我正在通过http执行来自同一来源的其他请求,因此我无法找出这一请求的不同之处

编辑2:

以下是成功请求/响应头的示例:

我可以从同一个框向不同的源进行其他API调用,包括:

  • https://api.betdaq.com
  • https://api.betfair.com
  • https://api.matchbook.com
我没有特别针对盒子上的任何原点添加任何配置,因此我真的不确定这个问题是什么。我已经添加了我能想到的所有可能的CORS请求头&仍然没有运气

编辑3:


令人恼火的是,由于供应商API默认将DigitalOcean IP列入黑名单,这一问题现已得到解决。

Cors或多或少都是服务器端的事情。如果供应商将某些api公开给hit,那么他们应该确保禁用cors。除了和他们谈论这件事,你真的不能从你这边做任何事情。必须从chrome上禁用cors是一个坏主意。

cors既是服务器又是客户端。服务器定义了策略,客户端可以强制执行。例如,浏览器会强制执行它,因为它更安全(这里不详细介绍)。因此,在浏览器中禁用同源策略或使用不受信任的浏览器是一个安全问题

同样,客户机可以强制执行该策略。据我所知,大多数命令行http客户端并不强制执行它。这可以解释为什么您的httpie请求没有失败

从浏览器的角度来看,您无法解决此问题。同样,定义策略的是服务器。您可以做的是创建一个代理服务器。您可以指定自己的cors策略。浏览器向代理服务器发出请求。proxyserver将请求传递给实际服务器

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