2

不知何故,我们能够在 Chrome(最新稳定版)和 Firefox 上发出跨源 XHR 请求,而无需使用 CORS 或任何类似的东西。我对此感到困惑,因此提出了这个问题。

使用数据发出 XHR 发布请求http://partychat-hooks.appspot.com/post/p_mwe2ztni

{body:"Some text"}

如果您在启用 Jquery 的站点上,只需$.post("http://partychat-hooks.appspot.com/post/p_mwe2ztni",{body:"Hello World"})在控制台上键入。所以有 Jquery,所以你现在可以按 F12 并将其粘贴到你的控制台中。

该请求在网络选项卡中从“待处理”变为“已取消”。浏览器甚至给了我们一个警告,但是,wireshark 告诉我请求实际上是在发出的。(并通过聊天室上的 ping 确认(通过 abhshkdz@im.partych.at 加入我们))。

以下屏幕截图显示了 3 件事:

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

请求截图

这是 WireShark 的屏幕截图,显示了请求响应(通过 Google AppEngine 提供)

Wireshark 捕获请求响应

您可以从此处获取 pcap 文件。

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

请有人帮助我们解开这个谜团。

4

1 回答 1

2

如果请求是“简单方法”(GET/HEAD/POST)并且标头都是“简单标头”,则浏览器可以按照请求的“简单”步骤进行操作,其中不包括 OPTIONS 预检.

于 2013-09-01T15:12:19.730 回答