Node.js中setHeader与writeHead有何不同之处?

更新于
2026-09-25 05:09:28
1阅读来源:SEO问题
  • 内容介绍
  • 文章标签
  • 相关推荐

本文共计1184个文字,预计阅读时间需要5分钟。

Node.js中setHeader与writeHead有何不同之处?

Node.js 中 setHeader 和 writeHead 的区别如下:

- `setHeader` 方法用于设置 HTTP 响应头信息,可以在发送任何响应体内容之前调用。它通常用于设置内容类型、缓存控制等响应头。

- `writeHead` 方法用于设置 HTTP 状态码和响应头信息。与 `setHeader` 不同,`writeHead` 必须在发送响应体内容之前调用,否则会导致错误。

下面是一个简单的例子:

javascriptconst http=require('http');

const server=http.createServer((req, res)=> { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.write('Hello, World!'); res.end();});

server.listen(3000, ()=> { console.log('Server is running on http://localhost:3000');});

在这个例子中,`writeHead` 方法设置了状态码为 200 和内容类型为 `text/plain`,然后 `write` 方法发送响应体内容 Hello, World!,最后 `end` 方法结束响应。

希望这个解释对您有所帮助!如果您在学习 Node.js 时遇到任何问题,欢迎随时提问。

Nodejs中setHeader和writeHead有什么区别?下面本篇文章给大家对比一下setHeader和writeHead,聊聊它们的区别,希望对大家有所帮助!

今天在学习Node的时候发现Node/http中的setHeader和writeHead很相似,都可以设置响应头部,我们来详细的说说吧!

setHeader

参数

response.setHeader(name, value)复制代码

  • name 属性
  • value 属性值
  • 返回 http.ServerResponse 返回响应对象

作用

为响应头部设置单个属性。

注意

Node.js中setHeader与writeHead有何不同之处?

  • 只能一个一个设置属性
  • 重复设置一个属性会替换之前的设置
  • 设置包含无效字符的属性字段名称或值将导致抛出 TypeError

示例

reponse.setHeader('Content-Type', 'text/html')

reponse.setHeader('Set-Cookie', ['type=ninja', 'language=javascript'])

重复设置一个属性

// 返回 content-type = text/html1 reponse.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/plain const 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,聊聊差异的详细内容,更多请关注自由互联其它相关文章!

本文共计1184个文字,预计阅读时间需要5分钟。

Node.js中setHeader与writeHead有何不同之处?

Node.js 中 setHeader 和 writeHead 的区别如下:

- `setHeader` 方法用于设置 HTTP 响应头信息,可以在发送任何响应体内容之前调用。它通常用于设置内容类型、缓存控制等响应头。

- `writeHead` 方法用于设置 HTTP 状态码和响应头信息。与 `setHeader` 不同,`writeHead` 必须在发送响应体内容之前调用,否则会导致错误。

下面是一个简单的例子:

javascriptconst http=require('http');

const server=http.createServer((req, res)=> { res.writeHead(200, { 'Content-Type': 'text/plain' }); res.write('Hello, World!'); res.end();});

server.listen(3000, ()=> { console.log('Server is running on http://localhost:3000');});

在这个例子中,`writeHead` 方法设置了状态码为 200 和内容类型为 `text/plain`,然后 `write` 方法发送响应体内容 Hello, World!,最后 `end` 方法结束响应。

希望这个解释对您有所帮助!如果您在学习 Node.js 时遇到任何问题,欢迎随时提问。

Nodejs中setHeader和writeHead有什么区别?下面本篇文章给大家对比一下setHeader和writeHead,聊聊它们的区别,希望对大家有所帮助!

今天在学习Node的时候发现Node/http中的setHeader和writeHead很相似,都可以设置响应头部,我们来详细的说说吧!

setHeader

参数

response.setHeader(name, value)复制代码

  • name 属性
  • value 属性值
  • 返回 http.ServerResponse 返回响应对象

作用

为响应头部设置单个属性。

注意

Node.js中setHeader与writeHead有何不同之处?

  • 只能一个一个设置属性
  • 重复设置一个属性会替换之前的设置
  • 设置包含无效字符的属性字段名称或值将导致抛出 TypeError

示例

reponse.setHeader('Content-Type', 'text/html')

reponse.setHeader('Set-Cookie', ['type=ninja', 'language=javascript'])

重复设置一个属性

// 返回 content-type = text/html1 reponse.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/plain const 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,聊聊差异的详细内容,更多请关注自由互联其它相关文章!