" Access-Control-Allow-Origin"如果有人将他们的域名指向我的服务器,请帮助我?

时间:2016-10-31 11:22:29

标签: javascript ajax http-headers xmlhttprequest cors

也许我误解了如何在我的服务器中完全实现CORS。

给出通过Chrome完成请求的屏幕截图。

enter image description here

我们可以看到我们正在访问网站shakh.photography,请求网址是针对/api/get-videos/的POST ajax请求,但响应包含一个Access-Control-Allow-Origin标头,提到了一个完全不同的域

即使网络服务器使用Access-Control-Allow-Origin标头,它也会被浏览器忽略。一切仍然有效。

我认为只设置Access-Control-Allow-Origin就足以只允许来自指定来源的请求。

我错过了什么?

直到它被修复,这种情况可以通过访问shakh.photography来测试。

2 个答案:

答案 0 :(得分:2)

请求是同源的,即shakh.photography/api/ ..因此没有发送OPTIONS预检。

如果请求是从某个第三方的网页发送的,请说是third.party然后浏览器会发送OPTIONS,服务器会检查其原始策略并返回error,因为只允许gamezelle.com截至目前。 如果是gamezelle.com发送的,则响应为OK,然后浏览器会发送后续请求。

答案 1 :(得分:1)

同源策略仅阻止站点读取跨源Ajax响应。这可以防止攻击网站使用的用户cookie使用用户的权限从您的网站获取数据。

CORS允许您有选择地削弱同源策略,但不用于强化它。

  

我们可以看到我们正在访问shakh.photography网站   请求URL是针对/ api / get-videos /的POST ajax请求,但是   response包含一个提到的Access-Control-Allow-Origin标头   完全不同的领域。

     

即使Web服务器响应Access-Control-Allow-Origin   标题,浏览器会忽略它。一切仍然有效。

是。这个是正常的。请求从站点A到站点A.站点A可以使用用户可能拥有的站点B的cookie或其他凭据(浏览器将它们相互沙箱化)。您只需要一台服务器,它可以响应具有相同数据的两个URL。

第三方可以做到这一点,但是他们不能只为你的API做这件事(除了通过代理,这是一个不同的问题,具有更少的安全隐患)。他们必须在其他主机名下提供整个站点,这不应该引起任何安全问题。

如果您不想这样,请配置您的服务器,使其使用虚拟名称托管,并根据请求中的主机标头提供不同的内容集。