也许我误解了如何在我的服务器中完全实现CORS。
给出通过Chrome完成请求的屏幕截图。
我们可以看到我们正在访问网站shakh.photography
,请求网址是针对/api/get-videos/
的POST ajax请求,但响应包含一个Access-Control-Allow-Origin
标头,提到了一个完全不同的域
即使网络服务器使用Access-Control-Allow-Origin
标头,它也会被浏览器忽略。一切仍然有效。
我认为只设置Access-Control-Allow-Origin
就足以只允许来自指定来源的请求。
我错过了什么?
直到它被修复,这种情况可以通过访问shakh.photography来测试。
答案 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做这件事(除了通过代理,这是一个不同的问题,具有更少的安全隐患)。他们必须在其他主机名下提供整个站点,这不应该引起任何安全问题。
如果您不想这样,请配置您的服务器,使其使用虚拟名称托管,并根据请求中的主机标头提供不同的内容集。