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框上没有成功
- 我如何才能使此请求成功
https://api.betdaq.com
https://api.betfair.com
https://api.matchbook.com
令人恼火的是,由于供应商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