我一直在使用express.js,试图返回简单的json对象,并注意到尽管我显式地将Content-Type
头设置为application/json
,但只有当状态代码为200时,才能在第一个响应中看到。使用304的每个后续响应都不会有Content-Type
头。
我的代码示例:
app.get('/user', function (req, res) {
res.set('Content-Type', 'application/json');
res.send([
{ user: "john", email: "john@example.com"},
{ user: "marry", email: "marry@example.com"},
{ user: "dan", email: "dan@example.com"}
]);
});
原因是什么?
发布于 2015-06-29 03:21:56
304 Not Modified
意味着请求包含一个条件标头,要求服务器仅在资源被修改时才使用资源的内容进行响应。
由于不返回任何内容,因此不会发送Content-Type
头。这是推荐行为,用于304 Not Modified
HTTP应答。
来自RFC 7232§4.1:
生成
304
响应的服务器必须生成任何 在200 (OK)
中发送的标题字段如下 对同一请求的响应:Cache-Control
、Content-Location
、Date
ETag
,Expires
和Vary
。 由于304
响应的目标是在接收方已经有一个或多个缓存表示时尽量减少信息传输,因此发送方不应生成除上述列出字段以外的表示元数据,除非所述元数据存在于 引导缓存更新(例如,如果 响应没有ETag
字段)。
我对express.js一无所知,但我会研究一下正在执行何种类型的缓存。
https://stackoverflow.com/questions/31099113
复制相似问题