CORS 预检请求使用 jQuery AJAX,但在 Firefox 中使用本机 XmlHttpRequests 失败

CORS preflight requests working with jQuery AJAX, but failing with native XmlHttpRequests in Firefox

This question is based on an issue I had before but never managed to resolve.

我是 运行 通过 FireMonkey 的用户脚本,它定期向我的后端服务器发送请求,那些使用 CORS 的服务器是 cross-domain。出于测试目的,我的回复 headers 目前设置得非常宽松 backend-side:

header("Access-Control-Allow-Origin: *");
header("Access-Control-Allow-Method: POST");
header("Access-Control-Allow-Headers: *");

Frontend-side 我的请求是通过 jQuery AJAX 发送的,大致如下所示:

$.ajax({
    method: "POST",
    url: this.queryURL,
    timeout: this.timeout,
    data: this.formData,
    processData: false,
    contentType: false,
    success: onSuccess,
    error: onError
});

这里没什么特别的,从那以后请求一直运行良好。

我现在想摆脱 jQuery 并改用原生 XmlHttpRequest。实现如下所示:

const xhr = new XMLHttpRequest();
xhr.open("POST", this.queryURL);
xhr.setRequestHeader('X-Requested-With', 'XMLHttpRequest');
xhr.timeout = this.timeout;
xhr.ontimeout = onTimeout;
xhr.onreadystatechange = () => {
    if (xhr.readyState !== 4 || xhr.status === 0)
        return;

    if (xhr.status !== 200)
        onError(xhr);
    else
        onSuccess(xhr.responseText);
};
xhr.send(this.formData);

出于某种原因,在 Firefox 上似乎不再发送请求,至少网络选项卡没有显示任何请求。在 Chrome 上测试它仍然有效,但我认为这个问题可能与预检请求有关,因为我注意到一些奇怪的事情:

与jQuery AJAX:

使用原生 XHR:

使用本机 XHR,Chrome 似乎总是有第一个预检请求失败,第二个请求成功。 AJAX 不会发生这种情况。不确定这是否有任何帮助,但这是否可以解释为什么请求在 Firefox 中总是失败,以及如何解决它?

经过更多研究,我终于发现这实际上是用户脚本的 firefox-related 问题:https://bugzilla.mozilla.org/show_bug.cgi?id=1715249