注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

snoopyxdy的博客

https://github.com/DoubleSpout

 
 
 

日志

 
 

记录一个ngx.say和ngx.print差异导致的线上bug  

2018-01-16 16:32:52|  分类: lua |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
最近上线一个项目,利用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问题解决~
  评论这张
 
阅读(32)| 评论(0)
推荐 转载

历史上的今天

在LOFTER的更多文章

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2018