8

我正在将我的脚本加载到一个域上,并将一些数据发送到同一个域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。相同的端口,相同的主机......我不知道它为什么这样做。服务器无法处理这些东西,因此请求失败,整个系统停止工作。

4

3 回答 3

10

它并不是 Ext JS 所特有的——在其他框架中查看这些相关线程。它是正确执行CORS标准的服务器:

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

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

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

于 2012-09-27T05:50:16.547 回答
3

使用相对 url 而不是绝对,那么你会得到预期的结果。

于 2012-10-22T08:49:16.793 回答
3

在请求之前使用

Ext.Ajax.useDefaultXhrHeader = false
于 2016-10-14T07:56:53.977 回答