Ajax 为什么ExtJS向同一个域发送选项请求?

Ajax 为什么ExtJS向同一个域发送选项请求?,ajax,extjs,options,Ajax,Extjs,Options,我正在将脚本加载到一个域中,并使用POST和Ext.Ajax.request()将一些数据发送到同一个域 不知怎的,开发工具告诉我,有一个失败的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-Requ

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

不知怎的,开发工具告诉我,有一个失败的
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。相同的端口,相同的主机。。。我不知道它为什么这样做。
服务器无法处理此类内容,因此请求失败,整个系统停止工作。

这并不是Ext JS特有的,请参阅其他框架。它是正确执行标准的服务器:

对于可能对用户数据产生副作用的HTTP请求方法(在 特别是,对于GET以外的HTTP方法,或者对于使用 某些MIME类型),该规范要求浏览器 “预飞行”请求,从服务器请求支持的方法 使用HTTP选项请求头,然后,在 服务器,将实际请求与实际HTTP请求一起发送 方法

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


如果您不打算使用CORS(听起来好像您不是有意跨域),那么您需要弄清楚为什么服务器认为源域不同(我不确定)。您还可以通过使用JsonP(通过Ext的JsonP代理)完全绕过CORS。

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

在请求之前使用

Ext.Ajax.useDefaultXhrHeader = false

显示您的实际代码或与之相近的代码。问题似乎是,我的URL一开始没有
http://
。当我更改它时,
选项
请求消失了。。。