0

我在我的网站上使用 Facebook 身份验证。

我使用 Nginx 1.2.3。

Facebook 使用以下模式生成 URL:

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

如您所见,facebook#_=_在代码参数值的末尾添加。

现在,如果你尝试构建任何类型的带有 # 的 URL GET,NGINX 将在遇到 # 时停止解析请求,例如 this

给出以下日志:

[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 配合得很好。

4

2 回答 2

1

我认为你弄错了——没有浏览器(如果你混淆了 IE)会发送 URL 的片段部分到服务器——这与 HTTP 规范背道而驰。

你说这适用于 Apache 几乎是不可能的。

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

于 2012-09-15T02:56:50.617 回答
1

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

这个哈希应该与 facebook 返回的代码是否应该工作无关。

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

希望这可以帮助!

于 2012-09-14T18:02:38.983 回答