gpt4 book ai didi

ajax - 为什么我的跨域 POST 请求预检了一个 OPTIONS 请求?

转载 作者:行者123 更新时间:2023-12-03 20:15:30 29 4
gpt4 key购买 nike

根据 Mozilla 开发者中心 HTTP access control文章中,跨站点 POST 请求可以是“简单的”——即不需要预检——如果请求的 Content-Type 是 application/x-www-form-urlencoded .

我在 Firefox 中没有得到这种行为,我完全不明白为什么会这样。这是我的设置代码:

function makeXDomainRequest(url, method, data) {
var req =
typeof XDomainRequest !== "undefined" ?
new XDomainRequest() : new XMLHttpRequest();

req.open(method || "GET", url, true);

if (typeof req.onload !== "undefined") {
req.onload = onResponseLoad;
req.onerror = onRequestError;
} else {
req.onreadystatechange = onRequestStateChange;
}

if (data && typeof req.setRequestHeader === "function") {
req.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
} else {
// no way to set Content-Type req header in IE's XDomainRequest:
// http://blogs.msdn.com/b/ieinternals/archive/2010/05/13/xdomainrequest-restrictions-limitations-and-workarounds.aspx
}

req.send(data || null);
}

function onResponseLoad() {
alert("Response!\n" + this.responseText);
}

function onRequestError(args) {
alert("Error!");
}

function onRequestStateChange() {
if (this.readyState === 4) {
if (this.status === 200) {
onResponseLoad.apply(this);
} else {
onRequestError.apply(this);
}
}
}

这是我正在 ping 的服务器:
// thanks to http://saltybeagle.com/cors/ for having this demo endpoint:
var URL = "http://ucommbieber.unl.edu/CORS/cors.php";

现在,如果我做一个简单的 POST 请求——数据发送为 application/x-www-form-urlencoded在上面的代码中——该请求在 Firefox 中通过 OPTIONS 请求进行了预检。它在 Chrome 中没有预检。在运行之前打开 Fiddler 亲自查看:
makeXDomainRequest(URL, "POST", "name=foobar");
// alerts "Response! Hello CORS [...] You sent a POST request. Your name is foobar"

这是 Fiddler 中的预检 OPTIONS 请求(注意 Access-Control-Request-Method: POST header ,即使我指定了一个所谓安全的 Content-Type 并且没有自定义 header ):
OPTIONS http://ucommbieber.unl.edu/CORS/cors.php HTTP/1.1
Host: ucommbieber.unl.edu
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 115
Connection: keep-alive
Origin: http://localhost
Access-Control-Request-Method: POST

这是怎么回事?这是 Firefox 中的错误,还是我做错了什么?谢谢!

最佳答案

事实证明,它确实是一个 Firefox 错误。它最终得到了 FF4b6 的修复:https://bugzilla.mozilla.org/show_bug.cgi?id=588920

关于ajax - 为什么我的跨域 POST 请求预检了一个 OPTIONS 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3489631/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com