Maison  >  Article  >  interface Web  >  Comparez brièvement setHeader et writeHead dans Node et parlez des différences.

Comparez brièvement setHeader et writeHead dans Node et parlez des différences.

青灯夜游
青灯夜游avant
2022-03-23 20:04:102463parcourir

Quelle est la différence entre setHeader et writeHead dans

Nodejs ? L'article suivant comparera setHeader et writeHead et parlera de leurs différences. J'espère qu'il sera utile à tout le monde !

Comparez brièvement setHeader et writeHead dans Node et parlez des différences.

Aujourd'hui, lorsque j'apprenais NodeNode的时候发现Node/http中的setHeaderwriteHead很相似,都可以设置响应头部,我们来详细的说说吧!

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/html1
reponse.setHeader('Content-Type', 'text/html')
reponse.setHeader('Content-Type', 'text/html1')

Comparez brièvement setHeader et writeHead dans Node et parlez des différences.

writeHead

参数

response.writeHead(statusCode, [statusMessage], [headers])
  • statusCode  http状态码

  • statusMessage  状态信息(可选)

  • headers | 属性对象或数组(可选)

  • 返回 http.ServerResponse 返回响应对象

Comparez brièvement setHeader et writeHead dans Node et parlez des différences.

作用

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(), j'ai découvert que

setHeader

et writeHead dans Node/http sont très similaires, et les deux peuvent définir l’en-tête de la réponse. Parlons-en en détail !

  • setHeader

  • Parameters

    rrreee
    • name Attribute
    • value Attribute value

    • Return http.ServerResponse Renvoie l'objet de réponse
    • Function

    est la réponse header Définir les propriétés individuelles.

    🎜Remarque🎜🎜
      🎜Vous ne pouvez définir les attributs qu'un par un🎜🎜
        🎜La définition répétée d'un attribut remplacera le paramètre précédent🎜🎜
          🎜Définition d'un nom ou d'une valeur de champ d'attribut contenant des caractères non valides entraînera une TypeError🎜🎜🎜🎜Exemple🎜🎜rrreeerrreee🎜🎜Définition répétée d'une propriété🎜🎜rrreee🎜Comparez brièvement setHeader et writeHead dans Node et parlez des différences.🎜🎜🎜writeHead🎜🎜🎜🎜Paramètres🎜🎜rrreee🎜🎜 🎜statusCode code d'état http 🎜🎜🎜🎜statusMessage message d'état (peut facultatif) 🎜🎜🎜🎜headers | Objet ou tableau d'attribut (facultatif) 🎜🎜🎜🎜 Renvoie http.ServerResponse Renvoie l'objet de réponse 🎜🎜🎜🎜Comparez brièvement setHeader et writeHead dans Node et parlez des différences.🎜🎜🎜fonction🎜🎜🎜et setHeaderfunction Idem 🎜🎜🎜 Notez que 🎜🎜🎜🎜🎜 peut définir plusieurs attributs, setHeader ne peut en définir qu'un seul 🎜🎜🎜🎜 ne peut être appelé qu'une seule fois 🎜🎜🎜🎜 doit être appelé avant <code>response.end() 🎜 🎜🎜🎜La définition de noms de champs d'attribut ou de valeurs contenant des caractères non valides entraînera la levée de TypeError🎜🎜🎜🎜🎜Exemple🎜🎜🎜Parce que writeHead renvoie un objet ServerResponse, nous pouvons passer des appels en chaîne🎜 rrreee🎜La longueur du contenu ici est en octets, pas en caractères. Buffer.byteLength() est utilisé pour déterminer la longueur du texte. 🎜🎜Nodejs ne vérifiera pas si la longueur du contenu est cohérente avec la longueur du corps transmis 🎜🎜🎜Utilisez setHeader et writeHead en même temps🎜🎜rrreee🎜writeHead a une priorité plus élevée que setHeader et writeHead ne peuvent être appelés qu'une seule fois, donc lors de l'appel, considérez d'abord quels en-têtes ne changent pas fréquemment, puis appelez writeHead🎜🎜If setHeader a été appelé pour définir l'en-tête, alors il sera transmis à writeHead pour la fusion. Si cette méthode est appelée et que response.setHeader()) n'a pas été appelé, le La valeur d'en-tête fournie sera directement écrite sur le canal réseau et n'est pas mise en cache en interne. response.getHeader()) sur l'en-tête ne produit pas les résultats attendus. Si l'en-tête doit être rempli de manière incrémentielle et potentiellement récupéré et modifié à l'avenir, utilisez plutôt response.setHeader(). 🎜🎜🎜Résumé🎜🎜🎜🎜🎜setHeader ne peut définir les en-têtes qu'un par un, writeHead peut en définir plusieurs à la fois🎜🎜🎜🎜setHeader peut être appelé à plusieurs reprises, writeHead ne peut être appelé qu'une seule fois🎜🎜🎜🎜setHeader et writeHead apparaissent au niveau du en même temps, setHeader sera fusionné avec writeHead et writeHead a une priorité élevée🎜🎜🎜🎜writeHead peut définir le code d'état et les informations d'état, setHeader ne peut pas être défini, seuls les en-têtes peuvent être définis🎜🎜🎜🎜Pour plus de connaissances sur les nœuds, veuillez visite : 🎜tutoriel nodejs🎜 ! 🎜

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

    Déclaration:
    Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer