0

我正在 Sencha Touch 2 中编写一个应用程序,作为其中的一部分,我有许多使用 ajax 代理和 json 阅读器从我的外部 Web 服务自动加载的商店。该服务托管在与客户端不同的域上,因此我必须在服务器上设置 Access-Control-Allow-Origin 才能使其工作。

这个设置一切正常,但我使用 Fiddler 来查看请求性能,我注意到我的 web 服务的每次调用实际上都会发出两次。一次作为 OPTIONS 请求,然后再次作为预期的 GET。据我所知, OPTIONS 请求没有任何用处——至少在我的设置中——所以我想摆脱它以使加载性能更快。

有谁知道这是怎么回事?如果我可以在代理上设置一个可以将其关闭的配置,那就太好了,但我还没有在 e 上找到。

感谢您的关注!

4

2 回答 2

5

我想通了,这一切都与 Sencha 及其 ajax 调用一起传递的 x-requested-with 标头有关。这篇博文 (http://remysharp.com/2011/04/21/getting-cors-working/) 详细介绍,但简短的版本是,在一个奇怪的功能中,浏览器会发出预航班选项仅在您在请求中包含任何自定义标头时检查。如果您没有在请求中添加任何标头而只是保持原样,则 GET 将顺利通过,无需检查 OPTIONS。

我在源代码中进行了挖掘,发现 Sencha 实际上确实有一个配置来控制是否发送 x-requested-with ,它在正常使用中并不是很暴露。

Ext.Ajax.setUseDefaultXhrHeader(false);

我只是在请求发出之前设置它,它会丢弃 x-requested-with,只有 GET 会发出。

于 2012-04-19T22:40:45.067 回答
0

您需要 OPTIONS 请求,因为您正在访问来自不同域的数据。选项调用它用于获取 Access-Control-Allow-Origin 参数的值。如果未发出 OPTIONS 请求,则跨域将不起作用。

于 2012-04-19T20:28:57.273 回答