我正在一个域上加载我的脚本并使用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.