如何使用 CORS 的节点请求包避免预检选项请求?
How to avoid preflight OPTIONS request with node request package for CORS?
我只是希望 post 一些 json 但默认情况下请求执行预检 OPTIONS 请求。
我想避免这种情况,因为用户经常有不可靠的连接,额外的请求会进一步降低可靠性并导致神秘的错误消息,如 'CORS rejected'。
var request = require('request');
function (data, cb) {
if (!cb) cb = function () {};
request({
method: "POST",
url: "someurl",
json:true,
body: data
}, function (err, response, body) {
if (err) cb(err);
else if (response.statusCode != 200) {
cb(new Error("log satus code: " + response.statusCode));
} else {
cb(null, body);
}
})
澄清一下,我正在做一个实际的 CORS 并希望避免预检 OPTIONS 请求。我也可以控制发球(虽然这不重要)。
prefight OPTIONS 请求是 CORS 流的必需部分。没有其他办法了。但是,客户端可以缓存预检响应,因此它只需要实际发出一次预检请求而不是每次 POST 时。
要启用预检请求缓存,预检请求必须响应 Access-Control-Max-Age
header。此 header 的值是允许客户端缓存响应的秒数。
例如,以下响应 header 将允许客户端缓存预检响应 5 分钟。
Access-Control-Max-Age: 300
您必须选择适合您的应用程序的值。将此值设置为不太大的值通常是个好主意,以防您将来需要更改预检响应。如果您允许将预检请求缓存一个月,则用户可能要等到他们的缓存在一个月后过期后才会收到您的更改。
Simple requests 不需要预检请求。我猜 json: true
设置了自定义 Content-Type
header(最有可能 application/json
)。
Content-Type
的简单值是:
application/x-www-form-urlencoded
multipart/form-data
text/plain
任何超出这些值的值都会触发预检请求。
我只是希望 post 一些 json 但默认情况下请求执行预检 OPTIONS 请求。
我想避免这种情况,因为用户经常有不可靠的连接,额外的请求会进一步降低可靠性并导致神秘的错误消息,如 'CORS rejected'。
var request = require('request');
function (data, cb) {
if (!cb) cb = function () {};
request({
method: "POST",
url: "someurl",
json:true,
body: data
}, function (err, response, body) {
if (err) cb(err);
else if (response.statusCode != 200) {
cb(new Error("log satus code: " + response.statusCode));
} else {
cb(null, body);
}
})
澄清一下,我正在做一个实际的 CORS 并希望避免预检 OPTIONS 请求。我也可以控制发球(虽然这不重要)。
prefight OPTIONS 请求是 CORS 流的必需部分。没有其他办法了。但是,客户端可以缓存预检响应,因此它只需要实际发出一次预检请求而不是每次 POST 时。
要启用预检请求缓存,预检请求必须响应 Access-Control-Max-Age
header。此 header 的值是允许客户端缓存响应的秒数。
例如,以下响应 header 将允许客户端缓存预检响应 5 分钟。
Access-Control-Max-Age: 300
您必须选择适合您的应用程序的值。将此值设置为不太大的值通常是个好主意,以防您将来需要更改预检响应。如果您允许将预检请求缓存一个月,则用户可能要等到他们的缓存在一个月后过期后才会收到您的更改。
Simple requests 不需要预检请求。我猜 json: true
设置了自定义 Content-Type
header(最有可能 application/json
)。
Content-Type
的简单值是:
application/x-www-form-urlencoded
multipart/form-data
text/plain
任何超出这些值的值都会触发预检请求。