最近经常会有这样的报错:
[2017-07-06 19:36:02] ERROR: exception 'UnexpectedValueException' with message 'Invalid Host "xxx.com, xxx.com"' in /data/www/api.mainaer/vendor/symfony/http-foundation/Request.php:1227
> Stack trace:
> #0 /******/vendor/symfony/http-foundation/Request.php(1036): Symfony\Component\HttpFoundation\Request->getHost()
> #1 /******/vendor/symfony/http-foundation/Request.php(1066): Symfony\Component\HttpFoundation\Request->getHttpHost()
> #2 /******/vendor/symfony/http-foundation/Request.php(1700): Symfony\Component\HttpFoundation\Request->getSchemeAndHttpHost()
> #3 /******/vendor/symfony/http-foundation/Request.php(1050): Symfony\Component\HttpFoundation\Request->prepareRequestUri()
> #4 /******/vendor/symfony/http-foundation/Request.php(1752): Symfony\Component\HttpFoundation\Request->getRequestUri()
> #5 /******/vendor/symfony/http-foundation/Request.php(928): Symfony\Component\HttpFoundation\Request->prepareBaseUrl()
> #6 /******/vendor/symfony/http-foundation/Request.php(1818): Symfony\Component\HttpFoundation\Request->getBaseUrl()
> #7 /******/vendor/symfony/http-foundation/Request.php(888): Symfony\Component\HttpFoundation\Request->preparePathInfo()
> #8 /******/vendor/illuminate/http/Request.php(121): Symfony\Component\HttpFoundation\Request->getPathInfo()
> #9 /******/bootstrap/app.php(197): Illuminate\Http\Request->path()
> #10 /******/public/index.php(14): require('/***...')
> #11 /data/www/default/lumen.php(42): require('/***...')
> #12 {main} {"request_id":"7bb47f49b6f0bf8a40364f5b25234e4d78f8165e","url":"/dist/manifest.js?_=1499341106711","ip":"112.96.252.38","http_method":"GET","http_host":"xxx.com, xxx.com","referrer":"http://xxxx.com/yyy"}
>
看到Apache的日志中的User Agent是Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X; zh-CN) AppleWebKit/537.51.1 (KHTML, like Gecko) Mobile/13B143 UCBrowser/10.7.11.672 Mobile
也就是一个iPhone上的UC浏览器。我刚好也用iPhone,可是访问了下却没有这样的错误。
请问还有谁遇到过类似的问题?这个Invalid Host错误为什么会出现?是网络问题?还是浏览器问题?亦或是其他原因?
有人说这个是因为Symfony的匹配规则有问题,我却不这么认为:
根据HTTP的RFC, 这个Host字段在我这里显然只应该是xxx.com
, 然而服务器收到的确是xxx.com, xxx.com
.
--- 再补充:我这个服务器用的是Apache + PHP,也有一种可能是服务器接收的请求有两个想同的Host字段(Host: xxx.com
),然后被PHP给合并成一个逗号隔开的xxx.com, xxx.com
了。。。(/ □ )
这个是symfony的request类的问题.
你看下源代码去. 里面有些可信代理, 正则替换之类的.