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-Request-Method  : POST
  Origin                         : http://myurl-internal.com:8090

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

它并不是特定于Ext JS – 在其他框架中看到 these related threads.这是服务器正确执行 CORS标准:

for HTTP request methods that can cause side-effects on user data (in
particular,for HTTP methods other than GET,or for POST usage with
certain MIME types),the specification mandates that browsers
“preflight” the request,soliciting supported methods from the server
with an HTTP OPTIONS request header,and then,upon “approval” from
the server,sending the actual request with the actual HTTP request
method.

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

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

相关文章

IE6是一个非常老旧的网页浏览器,虽然现在很少人再使用它,但...
PHP中的count()函数是用来计算数组或容器中元素的个数。这个...
使用 AJAX(Asynchronous JavaScript and XML)技术可以在不...
Ajax(Asynchronous JavaScript and XML)是一种用于改进网页...
本文将介绍如何通过AJAX下载Excel文件流。通过AJAX,我们可以...
Ajax是一种用于客户端和服务器之间的异步通信技术。通过Ajax...