javascript-避免执行CORS预检选项以获得更好的性能

使用CDN提供程序,并像这样从CDN调用静态HTML文件.

          $.ajax({
            url : CDNPATH,
            type : "GET",
            contentType : "text/plain; charset=utf-8",
            async : async,
            cache : true,
            processData : false,
            success : function(response, status, xhr) {
                onSuccess(response, status, xhr);
                $(document).trigger('contentReady');
            }
        });

在应用程序的主页上,我有5个静态HTML文件,该文件会触发5个OPTION调用.可以想象,它会损害性能.我曾在类似的问题上看到,使用GET方法和text / plain可以避免这种情况,如上所述,但是这种方法不起作用.

如何避免使用这些印​​前检查OPTIONS方法

解决方法:

字符集参数的存在可能会导致预检?根据规格,浏览器为required to ignore any params and only consider the MIME type,但可能不符合要求.

A CORS-safelisted request-header is a header whose name is one of

  • Accept
  • Accept-Language
  • Content-Language
  • Content-Type and whose value, once parsed, has a MIME type (ignoring parameters) that is application/x-www-form-urlencoded, multipart/form-data, or text/plain

另外,我看不到您的请求会触发预检.也许我想念一些东西…

更新2017-02-20

根据information provided in a comment above确定,该站点的源似乎包含具有以下内容的脚本元素:

window["_tsbp_"] = { ba : "X-TS-BP-Action", bh : "X-TS-AJAX-Request"};

…并且我没有逐步完成其余代码,以了解产生了什么效果,但是似乎正在导致X-TS-AJAX-Request标头添加到XHR请求中,从而触发了预检.

我想这里的总的收获是:每当您发现请求触发浏览器进行预检但您不知道为什么时,排除故障的步骤号可能应该是使用浏览器devtools来确切找出代码的请求标头导致被发送出去.

相关文章

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