由ngx.say和ngx.print差異引發的血案
Jan 16, 2018openresty點選
最近上線一個專案,利用openresty在前面做反向代理,部分地址通過lua的http請求後端介面進行返回,線上下測試都沒問題,公司預發灰度測試都通過了,但是上線到微信站,就莫名其妙的報錯了。
通過手機抓包,我們發現傳送到手機的響應body沒有問題!!!那麼問題來了,為什麼明明能接收到響應體,但是微信瀏覽器就是報錯呢?
線下我們直接通過手機訪問是沒問題的,一上線為什麼就有問題了?
其中的問題就在於,我在openresty傳送到後端資料介面拿資料之後,是通過 ngx.say 方法響應到前面去的,ngx.say方法會預設增加一個換行,所以導致了後端資料介面返回的 Content-Length 長度不對了。
我們的微信站的域名是走的騰訊的CDN服務,騰訊CDN的nsws伺服器沒有完全遵守http協議,沒有隻讀取Content-Length的響應體,它對響應的body體和頭裡的Content-Length進行了匹配,發現不對,然後就響應了564的狀態碼,所以就導致了出錯的情況。
後來將ngx.say修改為ngx.print問題解決~
相關推薦
由ngx.say和ngx.print差異引發的血案
Jan 16, 2018openresty點選 最近上線一個專案,利用openresty在前面做反向代理,部分地址通過lua的http請求後端介面進行返回,線上下測試都沒問題,公司預發灰度測試都通過了,但是上線到微信站,就莫名其妙的報錯了。通過手機抓包,我們發現傳送到手機的響應body沒有問題!!!那
由equals和==不同,而引發的知識點補習
分享 完全 掌握 cts contain erl 地址 對象分配 作用 在復習JavaSE基礎時,看到Object類中的equals方法與==的對比,原文中是這麽講的:“兩個內建類型的數值進行比較是否相等時,使用“==”,但當比較兩個對象的時候,可以使用“==”或equ
perl的輸出:print、say和printf
上下 不知道 返回值 一個 語言 sort 註意 world 由於 print、printf和say print、printf和say都可以輸出信息。print和say類似,print不自帶換行符,say自帶換行符,但要使用say,必須寫use語句use 5.010;,pr
hadoop 由job.setOutPutKeyClass和job.setOutPutValueClass引發的鍵值對輸出型別不匹配錯誤
早晨寫了個關於專利數目統計的MapReduce程式,執行後發現: 錯誤上說Map函式的Key型別與設定的不一樣,仔細一查發現 原來job.setOutputKeyClass和job.setOutputValueClass預設情況下同時設定Map和Reduce的輸出,如果Map和R
ngx.req和get/post引數獲取
ngx.req.raw_header 和ngx.req.get_headers示例 (1)ngx.req.raw_header 函式原型: headers = ngx.req.get_headers(max_headers?, raw?) 返回值型別為ta
ABI與編譯器:ABI是由內核和工具鏈定義和實現的
51cto 獨立 strong 模塊 返回值 工具 努力 tool 調用 http://book.51cto.com/art/201412/460857.htm 《Linux系統編程(第2版)》第1章入門和基本概念,這一章著眼於Linux系統編程的基礎概念並從程序員視角探索
response.getWriter().wirte和out.print()的區別
想要 支持 包括 關閉 不能 字符類 僅支持 內置 jspwriter 1、首先介紹write()和print()方法的區別: (1)、write():僅支持輸出字符類型數據,字符、字符數組、字符串等 (2)、print():可以將各種類型(包括Object)的數據通過
本地Host和域名不匹配引發的血案
isp tmp class borde 控制臺 itl 無法加載 content 解決 本地Host和域名不匹配引發的血案 一、問題及原因分析: 1、頁面無法加載,看控制臺,發現這些do加載JS文件時找不到。 2、代碼中確認對應Do加載時引
由System.getProperty("user.dir")引發的聯想
本地 run .get 本地文件 數組 script replace phi file 是什麽: System.getPorperty("user.dir")的功能是得到當前項目路徑。 1 @Test 2 public void test02(
UDP和TCP的差異
ima 數據 而且 傳遞數據 通訊 情況下 bubuko 訪問 分享圖片 UDP和TCP傳遞數據的差異類似於電話和明信片之間的差異。 TCP就像電話,必須先驗證目標是否可以訪問後才開始通訊。 UDP就像明信片,信息量很小而且每次傳遞成功的可能性很高,但是不能完全保證傳遞
JQuery和Zepto的差異(部分)
HA lock rac n-k pen IE http target div 1.width()/height() Zepto.js: 由盒模型(box-sizing)決定 jQuery: 忽略盒模型,始終返回內容區域的寬/高(不包含 padding、border) j
購買企業郵箱,怎麽區分免費和付費的差異?
區分 的區別 普通 順序 無限 形象 logo 支持 沒有 免費企業郵箱和付費企業郵箱的差別包括功能、服務等等。拿網易企業郵箱來舉例說明吧,功能方面從管理平臺來說:首先,免費企業郵可以創建20個分組,不過無子分組,且分組順序在開始創建後,便不能進行排序;付費企業郵則可以創建
mybatis中mysql和oracle的差異
n-n 數據 操作 紅色 pid bsp b2c 技術 where 1=1 1、applicationContext.xml中的配置差異: 在applicationContext.xml的數據源dataSource的配置中,mysql數據庫需要心跳包的配置,而oracle
網絡工程師培訓師告訴你交換機和路由器的差異
警察 路由交換 就是 工程師培訓 ffffff 連接 宿舍樓 告訴 路由器 路由交換的區別 大多數人不知道,交換機和路由器還有這種差異 可能大多數人會和小編一樣認為交換機和路由器這兩個網絡設備只是用來上網的,沒什麽稀奇的,至於這兩個網絡設備到底有什麽沒關系,具體
PostgreSQL和Oracle的差異分析之rownum
1. rownum是Oracle內部的一個偽列,用來表示資料在結果集中的行數。Oracle中,把檢索結果取出來後,在畫面上分頁顯示的功能,都是使用rownum,並且使用多層子查詢來實現的。 2. PostgreSQL中,沒有rownum這樣的偽列,但是提供了 limit 和 of
Erlang 和 Elixir的差異
原文: http://elixir-lang.org/crash-course.html 函式呼叫 Elixir允許你呼叫函式的時候省略括號, Erlang不行. Erlang Elixir some_function().
轉:JSP中out.write()和out.print()的區別
out物件的型別是JspWriter。JspWriter繼承了java.io.Writer類。 1)print方法是子類JspWriter,write是Writer類中定義的方法; 2)過載的print方法可將各種型別的資料轉換成字串的形式輸出,而過載的write方法只能輸出字元、字
由“16億美元終極錦鯉”引發的金錢觀思考 文末有彩蛋
《IT·效哥談》第13期 10月23日晚 , 美國"超級百萬"彩票開獎, 一名南卡羅來納州的彩民獨享16億美元(約合110億人民幣)獎金,自今年7月以來,這支彩票的頭獎獎金經過20多次累積,漲到了16億美元!該筆"兆彩"頭獎,已成為世界彩票史上數字最大中獎金額,這可能是今年的“終極錦鯉”!
JS DOM和BOM的差異
JAVAScript 有三部分構成,ECMAScript,DOM和BOM,根據瀏覽器的不同,具體的表現形式也不盡相同。我們今天來談一談DOM和BOM這倆者之間的差異。 用百科上的來說: 1. DOM是 W3C 的標準; [所有瀏覽器公共遵守的標準] 2. BOM 是 各個瀏覽器
組播 IP_MULTICAST_LOOP迴環在Linux和Windows的差異
在TX2嵌入式開發板上(Ubuntu作業系統)編寫網路組播發送接收程式,首先了解一下組播. linux多播程式設計 linux多播程式設計步驟: 1>建立一個socket; 2>設定多播的引數,例如超時時間TTL,本地迴環許可LOOP