我正在Sencha Touch 2中编写应用程序,作为其中的一部分,我有许多使用ajax代理和json阅读器的商店从我的外部Web服务自动加载。该服务托管在与客户端不同的域上,因此我必须在服务器上设置Access-Control-Allow-Origin才能使其正常工作。
使用此设置,一切都在游泳,但我使用Fiddler来查看请求性能,我注意到我的webservice的每次调用实际上都是两次。一旦作为OPTIONS请求,然后再次作为预期的GET。据我所知,OPTIONS请求没有任何用处 - 至少在我的设置中 - 所以我想摆脱它以使加载性能变得更快。
有谁知道这是怎么回事?如果我可以在代理上设置一个可以关闭它的配置,那就太棒了,但我还没有找到它。
感谢您的期待!
答案 0 :(得分:5)
我想出来了,这一切都与Sencha传递的x-requested-with标头及其ajax调用有关。这篇博客文章(http://remysharp.com/2011/04/21/getting-cors-working/)详细介绍,但简短的版本是在一个奇怪的功能中,浏览器发出的只有当您在请求中包含任何自定义标头时,才会检查航班选项。如果你没有在请求中添加任何标题,并且只是保持原样,那么GET将完全没有OPTIONS检查。
我在源代码中挖了一下,发现Sencha实际上确实有一个配置来控制是否发送x-requested-with,它只是在正常使用中没有暴露出来。
Ext.Ajax.setUseDefaultXhrHeader(false);
我只是在请求发出之前设置它,它会丢弃x-requested-with,只有GET会消失。
答案 1 :(得分:0)
您需要OPTIONS请求,因为您正在访问来自不同域的数据。选项称它用于获取Access-Control-Allow-Origin参数的值。如果没有提出OPTIONS请求,跨域将无法工作。