请求头异常造成的HTTP/1.1 400 Bad Request

922 views
Skip to first unread message

xut...@gmail.com

unread,
Jan 5, 2017, 10:16:46 PM1/5/17
to openresty
最近时不时有投诉说访问站点遇到400,搜索日志发现请求头如下
ngx.req.get_headers() = {
  ['accept-language'] = 'zh-CN,en-US;q=0.8',
  ['content-length'] =   {
    [1] = '0',
    [2] = '0',
  },
  ['host'] =   {
    [1] = 'wap.xxxx.cn',
    [2] = 'wap.xxxx.cn',
  },
  ['cookie'] = 'rememberMe=W57+9YzBU2up4bhA+TSnCQ/mazQ27mPETsDqCafDCiOAgxZjPatjFJD8ispsrAV9w0DbLcA3YMA84eP08JwOp2ctOj+Ow2XboIGoRnqf/o9OzlH5odSxXvxBSr3Lc3fgL3uWGEzf3MXRSX5tbO/WUZwSPYjaJovCsDYbVGL+oDbVC',
  ['origin'] = 'http://wap.xxxx.cn',
  ['accept-encoding'] = 'gzip, deflate',
  ['accept'] = 'application/json, text/javascript, */*; q=0.01',
  ['x-requested-with'] = 'XMLHttpRequest',
  ['user-agent'] = 'Mozilla/5.0 (Linux; Android 5.1; WP Build/LMY47D) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/37.0.0.0 Mobile MQQBrowser/6.9 TBS/036903 Safari/537.36 MicroMessenger/6.5.3.980 NetType/4G Language/zh_CN',
}

我们可以从中发现,请求头content-length和host是有两个重复的,在测试环境模拟该请求发现,400的确是必然出现的.如下响应

HTTP/1.1 400 Bad Request
Server: openresty
Date: Fri, 06 Jan 2017 03:06:53 GMT
Content-Type: text/html
Content-Length: 166
Connection: close

但问题是,这种400是客户端发出的请求异常造成的,然而我们又无法要求客户端.

所以我想问问大家,是否有什么办法处理此类情况呢.

YuanSheng Wang

unread,
Jan 5, 2017, 10:31:25 PM1/5/17
to open...@googlegroups.com
先检查一下自己的环境,这个重复是不是自己“不小心”插入的 ^_^。 

HTTP 有协议标准,这种不合规范的请求,就应该拒绝掉。

记录错误数定期统计,要求客户端修改或者给他们提交 ISSUE 促进修改。

如果你想要兼容这个错误,我倒是觉得更不合理,有点给自己挖坑的感觉(虽然修改 nginx 源码可以做到)。
但是谁敢说这个修改不会带来更多问题呢?

 


--
--
邮件来自列表“openresty”,专用于技术讨论!
订阅: 请发空白邮件到 openresty+subscribe@googlegroups.com
发言: 请发邮件到 open...@googlegroups.com
退订: 请发邮件至 openresty+unsubscribe@googlegroups.com
归档: http://groups.google.com/group/openresty
官网: http://openresty.org/
仓库: https://github.com/agentzh/ngx_openresty
教程: http://openresty.org/download/agentzh-nginx-tutorials-zhcn.html



--

YuanSheng Wang
---------------------------------------
OpenResty lover ^_^
Reply all
Reply to author
Forward
0 new messages