使用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方法?
答案 0 :(得分:3)
也许charset
param的存在导致了预检?按规格,浏览器是required to ignore any params and only consider the MIME type,但也许它们不符合。
CORS-safelisted请求标头是名称为
之一的标头
Accept
Accept-Language
Content-Language
- 的MIME类型(忽略参数)
Content-Type
,其值经解析后,具有application/x-www-form-urlencoded
,multipart/form-data
或text/plain
另外,我没有看到你的请求会引发预检。也许我错过了什么......
根据information provided in a comment above确定,该网站的来源似乎包含一个包含此内容的script
元素:
window["_tsbp_"] = { ba : "X-TS-BP-Action", bh : "X-TS-AJAX-Request"};
...而且我没有逐步完成代码的其余部分,看看它有什么影响,但它似乎导致X-TS-AJAX-Request
标头被添加到XHR请求中,从而触发预检。
我想这里的一般内容是:每当您发现某个请求触发浏览器进行预检但您不知道原因时,故障排除步骤编号应该是使用您的浏览器devtools来确切了解哪些请求您的代码导致发送的标头。