我正在本地测试。我在localhost:50972上使用IIS和HTML服务,在localhost上使用Java / Jersey作为应用程序服务器:8080。
以下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 World
和dataType: text
,但没有任何变化。我还试过了crossDomain: true
和crossDomain: false
帮助?
答案 0 :(得分:2)
观察到的行为是因为Firefox(和Chrome等)正确考虑了另一个端口来建立不同的来源; IE没有。
如果协议,端口(如果指定了一个端口)和两个页面的主机相同,则两个页面具有相同的原点。
.. [但] IE不包含同源组件的端口 ,因此考虑http://company.com:81/index.html和http://company.com/index.html来自同一来源,不受任何限制。
在服务器上启用CORS - 请求在所有浏览器中成功。