2012-08-16 69 views
0

我使用Facebook身份验证与我的网站。Ngnx 1.2.3截断Facebook代码参数值,因为“#”

我使用Nginx 1.2.3。

产生实URL具有以下图案:

=“> https://www.mysite.net/profile.xhtml?state=dfecc191-5eb5-4e08-a514-bc70fdc17611 &代码= AQBKJ_1VuycE7 -DPigKfrAt9BLGQJww-p0RKY_Lta6uDxsaMUgzR98soPiOD6NDZ6kyU-NJUHmpAqEOSCxOKi7UGgh0fJSfC9kyh18FtSbQNJdyNEkkfaNtP9GMC8y25W6fOjyR2fj3OnQQTFDwmm-gckqofvhJsmnPSWgHxaan7uiaz_Wgc5JcdTu2DfzhOjqUQ_QG7X14jWDdq9CUtHuSV#=

正如你所看到的Facebook在末尾添加#_=_代码参数值。

现在,如果您尝试使用#创建任何类型的URL GET,NGINX将在遇到#时停止解析请求,this for instance

给出以下日志:

[16/8/2012:11:25:33 0200] “GET /index.html?value1=jo HTTP/1.1” 200 4976 “ - ”“ Mozilla的/ 5.0(Macintosh上,英特尔的Mac OS X 10_6_8)为AppleWebKit/537.1(KHTML,例如Gecko)Chrome浏览器/ Safari浏览器21.0.1180.79/537.1"

在我的情况下,Nginx的停止解析请求,并删除“# =“代码参数值!

有什么想法?

谢谢。 PS:这与Apache很好地结合在一起。

+0

URL的片段部分与实际请求无关,只是用于跳转到页面上的锚点。所以我不明白,这是一个错误还是apache可以使它变得不同? – apfelbox 2012-08-16 13:25:31

回答

1

所以服务器的句柄哈希(#_ = _)的方式是他们通常忽略它。

这个散列应该不会影响Facebook返回的代码是否应该工作。

什么影响它的成功是套管。在尝试使用代码之前,请确保您没有在请求参数上调用.ToLower()(或类似的)。

希望这会有所帮助!

1

我认为你是错误的 - 没有浏览器(如果你混淆它,期望IE)会将URL的片段部分发送到服务器 - 这也是HTTP规范。

你说这与Apache合作几乎是不可能的。

您的示例是一个完全有效的URL,但URI部分为http://www.mysite.net/index.html?value1=jo,因为#hn & value2 = doe实际上是URL的片段部分。