我在我的网站上使用Facebook身份验证。
我使用的是Nginx 1.2.3。
Facebook使用以下模式生成URL:
=“&GT; HTTPS:?//www.mysite.net/profile.xhtml状态= dfecc191-5eb5-4e08-A514-bc70fdc17611&安培;代码= AQBKJ_1VuycE7-DPigKfrAt9BLGQJww-p0RKY_Lta6uDxsaMUgzR98soPiOD6NDZ6kyU-NJUHmpAqEOSCxOKi7UGgh0fJSfC9kyh18FtSbQNJdyNEkkfaNtP9GMC8y25W6fOjyR2fj3OnQQTFDwmm-gckqofvhJsmnPSWgHxaan7uiaz_Wgc5JcdTu2DfzhOjqUQ_QG7X14jWDdq9CUtHuSV# = < / em>的
正如您所见,facebook在代码参数值的末尾添加#_=_
。
现在,如果您尝试使用#中构建任何类型的URL GET,NGINX将在遇到#,this for instance时停止解析请求。
提供以下日志:
[16 / Aug / 2012:11:25:33 +0200]“GET /index.html?value1=jo HTTP / 1.1”200 4976“ - ”“Mozilla / 5.0(Macintosh; Intel Mac OS X 10_6_8) AppleWebKit / 537.1(KHTML,如Gecko)Chrome / 21.0.1180.79 Safari / 537.1“
就我而言,Nginx停止解析请求并从代码参数值中删除“# = ”!
有什么想法吗?
感谢。
PS:这与Apache完美配合。
答案 0 :(得分:1)
所以服务器处理哈希(#_ = _)的方式是他们通常忽略它。
这个哈希应该与facebook返回的代码是否有效无关。
什么会影响它的成功就是套管。在尝试使用代码之前,请确保您没有在请求参数上调用.ToLower()(或类似函数)。
希望这有帮助!
答案 1 :(得分:1)
我认为你错了 - 没有浏览器(如果你混淆它就会期待IE)会将URL的片段部分发送到服务器 - 这也是HTTP规范。
你说这适用于Apache几乎是不可能的。
您的示例是完全有效的网址,但URI部分为http://www.mysite.net/index.html?value1=jo,因为#hn&amp; value2 = doe实际上是网址的片段部分。