關於Can't set headers after they are sent.問題原理詳解
關於Can't set headers after they are sent.問題原理詳解
問題:
之前在使用express的時候時而遇到Can't set headers after they are sent.錯誤;
網上搜到很多解決辦法但是都沒有文章介紹其中深層次的原理,直到我去node官方文件看到http模組的api,才弄清楚原因。
注意到圖中倒數第二段,當 首次呼叫responce.write() 就會發送響應頭和響應主體的第一塊資料到客戶端。
而設定響應頭有兩個方法,一個是setHeader,一個是writeHead:
但是注意!其實在write()或end()之後使用writeHead()設定http頭時,是不會報錯的,(這個我試過了),真正會報錯的是responce.setHeader()函式!
而express的中介軟體很多都是對setHeader的封裝,因為writeHead只能對http頭一次性設定。
解決辦法:
瞭解第一個概念之後,就明白問題出在哪了。
只要處理流程按照這樣嚴格的順序,就不會報這個錯誤了:
1、檢查整個處理流程,所有對http頭的設定(setHeader)必須在傳送一段主體資料之前呼叫,否則會報錯,並且在最後一定要用end()結束處理流程。 2、用底層的writeHeader方法也可以一次性設定http頭,多次呼叫或者任何時候呼叫都不會報錯。這個應該不怎麼用得上。
相關推薦
Error: Can39;t set headers after they are sent
after r.js div oar mod function body can exec Error: Can‘t set headers after they are sent. at validateHeader (_http_outgoing.js:494:1
Node.js Error: Can39;t set headers after they are sent
The res object in Express is a subclass of Node.js's http.ServerResponse (read the http.js source). You are allowed to call&
關於Can39;t set headers after they are sent.問題原理詳解
關於Can't set headers after they are sent.問題原理詳解 問題: 解決辦法: 問題: 之前在使用express的時候時而遇到Can't set headers after they are
GNS3 0.8.6計算idle pc值時出現Failed to find a working Idle PC value. Can39;t set up hypervisor on 127.0.0.1等問題
idle 計算 是否 image src bubuko 一個 work find 這學期在學計算機網絡,實驗課要用到gns30.8.6模擬。但是按照老師所給教程在設置idle pc時出現Failed to find a working Idle PC value. Can‘
pdf can39;t copy text 無法復制文字
-- lin rac help bsp images ges net .com 有些 pdf 是通過圖片弄出來的,或者被 protect 了. 我們會無法 copy 裏面的字. 這個時候可以用 OCR (Optical character recognition) 就是從
pip install報錯Can39;t roll back cryptography; was not uninstalled
libffi -- not 進行 sudo 繼續 pan code ack 當使用pip install或者pip install --upgrade報錯 Can‘t roll back cryptography; was not uninstalled 可以進行以下的
UnicodeEncodeError: 39;latin-139; codec can39;t encode characters in position 0-3: ordinal not in range(256)
clas mysq mic swd pass pan 天使 -1 root 今天使用MySQLdb往MySQL插入中文數據遇到一個異常: UnicodeEncodeError: ‘latin-1‘ codec can‘t encode characters in posit
Linux下使用vi新建文件保存文件時遇到錯誤:E212: Can39;t open file for writing
mage images roo .cn logs 分享 思路 操作 新建 出現E212: Can‘t open file for writing的問題是由於權限問題導致的,解決方法有以下思路: 1、使用root進行登錄,然後再操作。 2、在使用命令時,前面加sudo
python輸出字符串,UnicodeEncodeError: 39;ascii39; codec can39;t encode characters in position問題
bsp pytho unicode .com set style 字符串 position utf http://blog.sina.com.cn/s/blog_64a3795a01018vyp.html 參考於這個博主,我自己做一個筆記。 把一個列表轉換成字符串輸出的
Tomcat:Can39;t load IA 32-bit .dll on a AMD 64-bit platform問題的解決
myeclips iges create version mage dlink conf tomcat服務器 apach 控制臺錯誤如下: java.lang.UnsatisfiedLinkError: D:\apache-tomcat-7.0.56\bin\tcnat
centos7 python 中文 “UnicodeDecodeError: 39;ascii39; codec can39;t decode byte...”解決方法
python centos 中文 unicodedecodeerror 解決方案UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe5 in position 0: ordinal not in range(128)1. 開始以為是自己寫的pytho
UnicodeEncodeError: 39;ascii39; codec can39;t encode characters in
sheng server tde num 設計者 encode 重置 不起作用 .py 做爬蟲向文件寫入時,出現寫入錯誤UnicodeEncodeError: ‘ascii‘ codec can‘t encode characters in ............. 問題
UnicodeDecodeError: 39;gbk39; codec can39;t decode byte 0xae in position 9: illegal multibyte sequence
lose import pretty 方式 encode pytho class ltib ret 上面是遇到的錯誤,本來想完成讀文件,再寫入另一文件的。但是在 fp.read() 時,一直遇到上面的錯誤,經過各種百度,google, 還有神奇的 stackoverflow
解決tomcat報錯javax.imageio.IIOException: Can39;t create output stream!
int 搜索 acc ont ada 之前 ble 目錄 tput 啟動tomcat catalina.out報錯如下,登陸的時候無法顯示驗證碼 2017-06-09 11:23:06,628 DEBUG org.springframework.web.servlet.
mysql初始化錯誤【一】Can39;t find error-message file 39;/usr/local/mysql/errmsg.sys39;
mysql初始化環境:CentOS 7.2 MySQL 5.7.18 從mysql官方網站下載rpm包到服務器本地,依次安裝下面的RPM包: mysql-community-common-5.7.18-1.el7.x86_64.rpm mysql-community-serve
Can39;t locate Log/Dispatch.pm in @INC
郵件 app 配置 onf failed vendor 模塊 true led 記錄一下配置mha的時候遇到的錯誤,使用perl模塊發送郵件的時候報以下錯誤: # masterha_check_ssh --conf=/data/mha/app1.cnf Can‘t lo
Jenkins配置ssh時總是提示Can39;t connect to server
jenkins ssh can't connect to serverJenkins配置ssh時總是提示Can‘t connect to server我在本地windows系統中啟動了一個Jenkins服務,進行配置ssh,鏈接到同一網段的服務器上Linux上。總是連不上,Windows的防火墻和殺毒
python 編碼問題:39;ascii39; codec can39;t encode characters in position 的解決方案
解釋器 rac python 編碼 att 文件 tde pla pytho net 問題描述: Python在安裝時,默認的編碼是ascii,當程序中出現非ascii編碼時,python的處理常常會報這樣的錯UnicodeDecodeError: ‘ascii‘ co
使用windows server2012時FileZilla客戶端連接時報150 Opening data channel for directory listing of "/" 響應:425 Can39;t open data connection
nec 響應 但是 .cn 簡單 family 問題 用戶 中間 425 Can‘t open data connection 和 讀取目錄列表失敗 問題解決 這個問題主要是由於使用Passive Mode模式造成的,解決這個問題很簡單: 1、在ftp服務軟件中設置指定端口
TypeError: can39;t compare offset-naive and offset-aware datetimes bugfix
bject 正常 offset sdn log blank aware lan 存儲 參考:https://docs.djangoproject.com/en/1.8/topics/i18n/timezones/#naive-and-aware-datetime-objec