
如何快速入門VUE3.0:進入學習
今天在學習Node的時候發現Node/http中的setHeader和writeHead很相似,都可以設定回應頭部,我們來詳細的說說吧!
參數
response.setHeader(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') 
參數
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和已經傳輸的正文長度是否一致
// 回傳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不能設置,只能設定標頭