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

n1bvdmb6  于 2022-09-26  发布在  其他
关注(0)|答案(3)|浏览(185)

我将脚本加载到一个域中,并用POST和e1d1e的使用将一些数据发送到同一个域。
开发工具以某种方式告诉我,有一个失败的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。同一端口,同一主机……我不知道它为什么这样做。服务器无法处理这些东西,因此请求失败,整个系统停止工作。

q0qdq0h2

q0qdq0h21#

它并不是真正特定于ExtJS的——请参阅其他框架中的these related threads。是服务器正确执行了CORS标准:
对于可能对用户数据产生副作用的HTTP请求方法(特别是对于GET以外的HTTP方法,或对于某些MIME类型的POST使用),规范要求浏览器“预启动”请求,使用HTTP OPTIONS请求头从服务器请求支持的方法,然后在服务器“批准”后,使用实际HTTP请求方法发送实际请求。
如果要使用CORS,则需要能够正确处理或忽略服务器上的这些请求。Ext JS本身并不关心OPTIONS请求——您将按预期收到响应,但除非您对其进行处理,否则它们将被忽略(假设服务器实际上允许您所尝试的任何操作)。
如果你不打算使用CORS(听起来你不是有意跨域),那么你需要弄清楚为什么服务器认为源域不同(我不确定这一点)。您还可以通过使用JsonP(通过Ext的JsonP代理)完全绕过CORS。

6ovsh4lw

6ovsh4lw2#

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

x8diyxa7

x8diyxa73#

请求前使用

Ext.Ajax.useDefaultXhrHeader = false

相关问题