为什么ExtJS向同一个域发送OPTIONS请求?

时间:2012-09-04 14:43:10

标签: ajax extjs options

我正在一个域上加载我的脚本并使用POST发送一些数据并使用Ext.Ajax.request()到同一个域。

dev-tools以某种方式告诉我,OPTIONS请求失败。

Request URL : myurl-internal.com:8090/some/rest/api.php

Request Headers
  Access-Control-Request-Headers : origin, x-requested-with, content-type
  Access-Control-Request-Method  : POST
  Origin                         : http://myurl-internal.com:8090

它既是HTTP又不是HTTPS。相同的端口,相同的主机...我不知道它为什么这样做。 服务器无法处理这些内容,因此请求失败,整个系统停止工作。

3 个答案:

答案 0 :(得分:9)

它并不特定于Ext JS - 请参阅其他框架中的these related threads。这是服务器正确执行CORS标准:

  

用于可能对用户数据造成副作用的HTTP请求方法(in   特别是,对于GET以外的HTTP方法,或者对于POST使用   某些MIME类型),规范要求浏览器   “预检”请求,从服务器请求支持的方法   使用HTTP OPTIONS请求标头,然后,在“批准”时   服务器,使用实际的HTTP请求发送实际请求   方法

如果您要使用CORS,则需要能够在服务器上正确处理或忽略这些请求。 Ext JS本身并不关心OPTIONS请求 - 您将按预期收到响应,但除非您对它们执行某些操作,否则它们将被忽略(假设服务器实际上允许您尝试执行的任何操作)。

如果您不打算使用CORS(听起来您不是故意跨域),那么您需要找出服务器认为原始域不同的原因(我不确定)。你也可以通过使用JsonP(通过Ext的JsonP代理)完全绕过CORS。

答案 1 :(得分:3)

使用相对网址而不是绝对网址,然后您将得到预期的结果。

答案 2 :(得分:3)

请求前使用

Ext.Ajax.useDefaultXhrHeader = false