长轮询避免发送 OPTIONS 和 GET 组合 [Crossdomain]
Long-polling avoid sending OPTIONS and GET combined [Crossdomain]
我正在尝试完成对子域的长轮询调用。问题是我需要将请求从 example.com
.
发送到子域 (sub.example.com
)
我正在使用以下代码:
$.ajax({
url: 'https://sub.example.com/sub',
cache: false,
headers: {
'If-None-Match': etag,
'If-Modified-Since': last_modified
},
success: function(data, status, headers) {
// success handler
},
error: function(headers, status, errorThrown) {
// error handler
}
});
再说一遍,这段代码不在同一个域中。它位于 example.com
.
这里的问题是浏览器首先发送一个OPTIONS请求,如果服务器响应OK,它会继续GET请求(这就是我们想要的)。但是,我想尽量避免第一个 OPTIONS 请求。
我可以在服务器设置中更改什么以允许这种情况发生吗?
使用数据类型 "jsonp" 不是一个选项。
您的 cross-origin 请求是 non-simple cross-origin 请求 因为您包含 non-simple headers If-None-Match
和 If-Modified-Since
。浏览器发送 OPTIONS 预检请求以获得在发送实际请求之前将 non-simple headers 发送到 cross-origin 资源的权限。
如果您不希望浏览器在 cross-origin 请求期间发送 OPTION 预检,您必须删除任何使其成为 non-simple 的组件,包括 non-simple headers.预检请求是 浏览器 而非服务器强加的要求。服务器没有办法告诉浏览器它不关心服务器是否使用预检请求,因为预检请求总是先来的,所以服务器必须与服务器通信的第一个机会是在响应预检请求本身。 (显然,在那个时候,说它不需要预检请求已经太晚了。)
有关预检机制的更多信息,您可以阅读 HTML5 Rocks page on CORS and the "Non-simple requests" section of my answer on How does Access-Control-Allow-Origin header work?
我正在尝试完成对子域的长轮询调用。问题是我需要将请求从 example.com
.
sub.example.com
)
我正在使用以下代码:
$.ajax({
url: 'https://sub.example.com/sub',
cache: false,
headers: {
'If-None-Match': etag,
'If-Modified-Since': last_modified
},
success: function(data, status, headers) {
// success handler
},
error: function(headers, status, errorThrown) {
// error handler
}
});
再说一遍,这段代码不在同一个域中。它位于 example.com
.
这里的问题是浏览器首先发送一个OPTIONS请求,如果服务器响应OK,它会继续GET请求(这就是我们想要的)。但是,我想尽量避免第一个 OPTIONS 请求。
我可以在服务器设置中更改什么以允许这种情况发生吗?
使用数据类型 "jsonp" 不是一个选项。
您的 cross-origin 请求是 non-simple cross-origin 请求 因为您包含 non-simple headers If-None-Match
和 If-Modified-Since
。浏览器发送 OPTIONS 预检请求以获得在发送实际请求之前将 non-simple headers 发送到 cross-origin 资源的权限。
如果您不希望浏览器在 cross-origin 请求期间发送 OPTION 预检,您必须删除任何使其成为 non-simple 的组件,包括 non-simple headers.预检请求是 浏览器 而非服务器强加的要求。服务器没有办法告诉浏览器它不关心服务器是否使用预检请求,因为预检请求总是先来的,所以服务器必须与服务器通信的第一个机会是在响应预检请求本身。 (显然,在那个时候,说它不需要预检请求已经太晚了。)
有关预检机制的更多信息,您可以阅读 HTML5 Rocks page on CORS and the "Non-simple requests" section of my answer on How does Access-Control-Allow-Origin header work?