2013-09-01 51 views
2

不知何故,我们能够在Chrome(最新稳定版)& Firefox上创建跨源XHR请求,而不使用CORS或任何类型的东西。我对此感到困惑,因此提出这个问题。跨域请求在没有CORS的情况下进行

做一个XHR POST请求http://partychat-hooks.appspot.com/post/p_mwe2ztni与数据:

{body:"Some text"} 

如果你是一个支持jQuery的网站,只是在控制台上键入$.post("http://partychat-hooks.appspot.com/post/p_mwe2ztni",{body:"Hello World"})。 SO有Jquery,所以你现在可以按F12并将其粘贴到控制台中。

请求从网络选项卡中的“等待”转为“取消”。浏览器甚至给我们一个警告但是,wireshark告诉我这个请求实际上已经完成。 (并通过聊天室中的ping进行确认(请通过[email protected]加入我们))。

以下屏幕截图示出了三两件事:

  1. 请求被JS
  2. 制成的浏览器中止请求,因为它是一个跨源请求的w/o CORS。 (大概一个OPTIONS请求应该已经发送)
  3. 右上角的弹出窗口显示请求以某种方式成功。

Screenshot of the request

这里是Wireshark的显示请求响应(担任过谷歌的AppEngine)截图

Wireshark capture of the request response

您可以从here得到PCAP文件。

此外,值得注意的是,我没有看到任何浏览器根据OPTIONS请求(它应该检查CORS支持)。

有人请帮我们解决这个谜。

回答

1

提供所述请求是“simple method”(GET/HEAD/POST)和集管都是“simple headers”,则浏览器可以按照该请求的“simple”步骤,其不包括预OPTIONS -飞行。

+0

从我读到的内容来看,简单的请求会运行资源共享检查,这将在第1步(0访问控制 - 允许源头)中失败,应用网络错误步骤,从而使请求失败。 – Nemo

+2

好了,它可以检查标题,请求已完成。这只是意味着JS没有被授予访问权限。 – Greg

相关问题