Heim  >  Artikel  >  Web-Frontend  >  Vergleichen Sie kurz setHeader und writeHead in Node und sprechen Sie über die Unterschiede.

Vergleichen Sie kurz setHeader und writeHead in Node und sprechen Sie über die Unterschiede.

青灯夜游
青灯夜游nach vorne
2022-03-23 20:04:102463Durchsuche

Was ist der Unterschied zwischen setHeader und writeHead in

Nodejs? Der folgende Artikel vergleicht setHeader und writeHead und spricht über ihre Unterschiede. Ich hoffe, dass er für alle hilfreich ist!

Vergleichen Sie kurz setHeader und writeHead in Node und sprechen Sie über die Unterschiede.

Als ich heute 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')

Vergleichen Sie kurz setHeader und writeHead in Node und sprechen Sie über die Unterschiede.

writeHead

参数

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

  • statusMessage  状态信息(可选)

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

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

Vergleichen Sie kurz setHeader und writeHead in Node und sprechen Sie über die Unterschiede.

作用

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() lernte, stellte ich fest, dass

setHeader

und writeHead in Node/http sehr ähnlich sind und beide gesetzt werden können der Antwortheader. Lassen Sie uns ausführlich darüber sprechen!

  • setHeader

  • Parameters

    rrreee
    • name Attribut
    • value Attributwert

    • Return http.ServerResponse Antwortobjekt zurückgeben
    • Function

    ist die Antwort header Individuelle Eigenschaften festlegen.

    🎜Hinweis🎜🎜
      🎜Sie können Attribute nur einzeln festlegen🎜🎜
        🎜Das wiederholte Festlegen eines Attributs ersetzt die vorherige Einstellung🎜🎜
          🎜Festlegen eines Attributfeldnamens oder -werts, der ungültige Zeichen enthält führt zu einem Wurf TypeError🎜🎜🎜🎜Beispiel🎜🎜rrreeerrreee🎜🎜Wiederholtes Festlegen einer Eigenschaft🎜🎜rrreee🎜Vergleichen Sie kurz setHeader und writeHead in Node und sprechen Sie über die Unterschiede.🎜🎜🎜writeHead🎜🎜🎜🎜Parameter🎜🎜rrreee🎜🎜🎜statusCode http-Statuscode 🎜🎜🎜🎜statusMessage Statusmeldung (kann optional sein) 🎜🎜🎜🎜headers |. Attributobjekt oder Array (optional) 🎜🎜🎜🎜 Gibt http.ServerResponse zurück. Gibt das Antwortobjekt zurück 🎜🎜🎜🎜Vergleichen Sie kurz setHeader und writeHead in Node und sprechen Sie über die Unterschiede.🎜🎜🎜Funktion🎜🎜🎜und setHeaderfunction Gleich 🎜🎜🎜 Beachten Sie, dass 🎜🎜🎜🎜🎜 mehrere Attribute festlegen kann, setHeader kann nur eines festlegen 🎜🎜🎜🎜 kann nur einmal aufgerufen werden 🎜🎜🎜🎜 muss vor <code>response.end() aufgerufen werden 🎜 🎜🎜🎜Das Festlegen von Attributfeldnamen oder -werten, die ungültige Zeichen enthalten, führt dazu, dass TypeError ausgelöst wird🎜🎜🎜🎜🎜Beispiel🎜🎜🎜Da writeHead ein ServerResponse-Objekt zurückgibt, können wir Kettenaufrufe tätigen🎜 rrreee🎜Die Inhaltslänge wird hier in Bytes angegeben, nicht in Zeichen. Buffer.byteLength() wird verwendet, um die Länge des Textes zu bestimmen. 🎜🎜Nodejs prüft nicht, ob die Content-Length mit der Länge des übertragenen Körpers übereinstimmt 🎜🎜🎜SetHeader und writeHead gleichzeitig verwenden🎜🎜rrreee🎜writeHead hat eine höhere Priorität als setHeader und writeHead können nur einmal aufgerufen werden. Überlegen Sie daher beim Aufruf zunächst, welche Header sich nicht häufig ändern, und rufen Sie dann writeHead auf. 🎜🎜Wenn setHeader wurde aufgerufen, um den Header festzulegen, dann wird er zum Zusammenführen an writeHead übergeben. Wenn diese Methode aufgerufen wurde und response.setHeader()) nicht aufgerufen wurde, wird die Der bereitgestellte Header-Wert wird direkt in den Netzwerkkanal geschrieben und nicht intern zwischengespeichert. response.getHeader()) im Header führt nicht zu den erwarteten Ergebnissen. Wenn der Header inkrementell gefüllt und möglicherweise in der Zukunft abgerufen und geändert werden muss, verwenden Sie stattdessen response.setHeader(). 🎜🎜🎜Zusammenfassung🎜🎜🎜🎜🎜setHeader kann Header nur einzeln festlegen, writeHead kann viele gleichzeitig festlegen🎜🎜🎜🎜setHeader kann wiederholt aufgerufen werden, writeHead kann nur einmal aufgerufen werden🎜🎜🎜🎜setHeader und writeHead werden am angezeigt Gleichzeitig wird setHeader mit writeHead zusammengeführt, und writeHead hat eine hohe Priorität🎜🎜🎜🎜writeHead kann Statuscode und Statusinformationen festlegen, setHeader kann nicht festgelegt werden, nur Header können festgelegt werden🎜🎜🎜🎜Für weitere knotenbezogene Kenntnisse bitte Besuchen Sie: 🎜nodejs-Tutorial🎜! 🎜

    Das obige ist der detaillierte Inhalt vonVergleichen Sie kurz setHeader und writeHead in Node und sprechen Sie über die Unterschiede.. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:juejin.cn. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen