gpt4 book ai didi

javascript - AJAX 请求在 Firefox 中失败,在 IE 中有效(服务器在两种情况下都返回 200)

转载 作者:行者123 更新时间:2023-11-29 14:44:12 25 4
gpt4 key购买 nike

我正在本地测试。我在 localhost:50972 上使用 IIS 服务 JS 和 HTML,在 localhost:8080 上使用 Java/Jersey 作为应用程序服务器。

以下 AJAX 请求在 Internet Explorer 中成功,但在 Chrome 和 Firefox 中失败,即使服务器显示 200 OK:

public getTest() {
var settings: JQueryAjaxSettings = {
url: "http://localhost:8080/getData",
type: "GET",
crossDomain: true,
dataType: "text",
};

jQuery.ajax(settings).done(function (o) {
alert(o);
}).fail(function (request) {
alert(request);
});
}

Java 端的代码如下所示:

@GET
@Path("/getData")
public Response getData() {

NewCookie cookie = new NewCookie("test", "key:val", "/", null, "comment", 100, false );
return Response.status(Response.Status.OK).entity("Hello World").cookie(cookie).build();
}

以下是来自 IE 和 Firefox 的相关 HTTP 请求/响应:

Internet Explorer 请求(成功)

GET http://localhost:8080/getData?_=1451863561652 HTTP/1.1
Referer: http://localhost:50972/
Accept: text/plain, */*; q=0.01
Accept-Language: en-US
Accept-Encoding: gzip, deflate
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko
Connection: Keep-Alive
DNT: 1
Host: localhost:8080

Firefox 请求(失败)

GET http://localhost:8080/getData?_=1451863686206 HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:40.0) Gecko/20100101 Firefox/40.0
Accept: text/plain, */*; q=0.01
Accept-Language: en-US,en;q=0.5
Accept-Encoding: gzip, deflate
Referer: http://localhost:50972/
Origin: http://localhost:50972
Connection: keep-alive

来自服务器的响应(发送到两者)

HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
Set-Cookie: test=key:val;Version=1;Comment=comment;Path=/
Content-Type: text/plain
Content-Length: 11
Date: Sun, 03 Jan 2016 23:26:07 GMT

Hello World

我也尝试过将响应作为 {}dataType: json 而不是 Hello WorlddataType: text ,但没有任何变化。我也尝试过使用 crossDomain: truecrossDomain: false 帮助?

最佳答案

观察到的行为是因为 Firefox(和 Chrome 等)正确地考虑了不同的端口以建立不同的来源; IE 没有。

参见 MDN - Same Origin Policy :

Two pages have the same origin if the protocol, port (if one is specified), and host are the same for both pages..

..[but] IE doesn't include port into Same Origin components, therefore http://company.com:81/index.html and http://company.com/index.html are considered from same origin and no restrictions are applied.

使用CORS - 在服务器上启用 - 请求在所有浏览器中成功。

关于javascript - AJAX 请求在 Firefox 中失败,在 IE 中有效(服务器在两种情况下都返回 200),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34582862/

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