今天在学习Node
的时候发现Node/http
中的setHeader和writeHead很相似,都可以设置响应头部,我们来详细的说说吧!
setHeader
参数
response.setHeader(name, value)复制代码name 属性value 属性值返回
http.ServerResponse
返回响应对象作用
为响应头部设置单个属性。
注意
只能一个一个设置属性重复设置一个属性会替换之前的设置设置包含无效字符的属性字段名称或值将导致抛出TypeError
示例
reponse.setHeader("Content-Type", "text/html")
reponse.setHeader("Set-Cookie", ["type=ninja", "language=javascript"])
重复设置一个属性
// 返回 content-type = text/html1reponse.setHeader("Content-Type", "text/html")reponse.setHeader("Content-Type", "text/html1")
writeHead
参数
response.writeHead(statusCode, [statusMessage], [headers])
statusCode http状态码
statusMessage 状态信息(可选)
headers | 属性对象或数组(可选)
返回 http.ServerResponse
返回响应对象
作用
和setHeader
作用相同
注意
可以设置多个属性,setHeader只能设置一个
只能调用一次
必须在response.end()
之前调用
设置包含无效字符的属性字段名称或值将导致抛出 TypeError
示例
因为writeHead返回的是一个ServerResponse对象,我们可以进行链式调用
const body = "hello world";response .writeHead(200, { "Content-Length": Buffer.byteLength(body), "Content-Type": "text/plain" }) .end(body);
这里的Content-Length是以字节为单位,而不是字符。Buffer.byteLength()就是来确定正文的长度。
Nodejs不会检查Content-Length和已经传输的正文长度是否一致
同时使用setHeader和writeHead
// 返回 content-type = text/plainconst server = http.createServer((req, res) => { res.setHeader("Content-Type", "text/html"); res.setHeader("X-Foo", "bar"); res.writeHead(200, { "Content-Type": "text/plain" }); res.end("ok");});
writeHead
的优先级比 setHeader
高,并且writeHead只能调用一次,所以在调用时,先考虑好哪些头不常改变后,再调用writeHead
如果已经调用了setHeader
设置标头,那么他会传给writeHead
合并
如果调用了此方法,且还没调用 response.setHeader()
),则会直接将提供的标头值写入网络通道且内部不缓存。在标头上 response.getHeader()
) 不会产生预期的结果。 如果需要逐步填充标头并在未来进行潜在的检索和修改,则改用 response.setHeader()
。
总结
setHeader 只能一个一个设置标头,writeHead可以一下设置很多
setHeader 可以重复调用,writeHead只能调用一次
同时出现setHeader和writeHead,setHeader会合并到writeHead,并且writeHead优先级高
writeHead 可以设状态码和状态信息,setHeader不能设置,只能设置标头
更多node相关知识,请访问:nodejs 教程!
以上就是简单对比Node中的setHeader和writeHead,聊聊差异的详细内容,更多请关注php中文网其它相关文章!