【问题标题】:php redirection - HTML headersphp 重定向 - HTML 标头
【发布时间】:2011-09-22 22:11:23
【问题描述】:

我在 VM 网络服务器中有许多重定向,这些重定向在使用嵌入式导航器 (iceweasel) 浏览服务器时起作用。但是从主机的浏览器访问服务器时这不起作用(用 FF4/IE8/Chrome/Opera11 测试)。

所有有经验的重定向方法都在主机浏览器中驱动到“服务器不可用或过载”。

如果您可以查看 apache 日志中的标头并提供一些有关差异的提示(主要的看起来是 GET url,前提是相同的代码正在运行):

工作请求导致此日志:

cat /var/log/apache2/access.log | grep 127 | grep random | tail -n1   
127.0.0.1 - authuserid [26/Jun/2011:11:11:52 +0200]    
"GET /index.php?page=100 HTTP/1.1" 200 49151
"https://www.mydomain.foo/index.php?page=100&new_session=a4da9106dba2ffd40345a5eb624d7788&random=c0117685e7e65a307989c219efc587b4&sid=n7en2it41h2gumrcq3kmmil3c0&sidf=.ps_AWDkIY"
"Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.0.19) Gecko/2011050718 Iceweasel/3.0.6 (Debian-3.0.6-3)"

非工作请求导致此日志:

cat /var/log/apache2/access.log | grep 192 | grep random | tail -n1   
www.mydomain.org:80 192.168.X.Y - authuserid [26/Jun/2011:11:08:07 +0200]  
"GET  /index.php?page=100&new_session=a4da9106dba2ffd40345a5eb624d7788&random=685de8bcd4d198d6ad7f3cf4b23de5b7 HTTP/1.1" 302 -
"http://www.mydomain.foo/index.php?page=xyz"    
"Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1"

我无法显示标头响应,因为我没有收到响应并且 apache 没有报告错误 (loglevel=error)。

谢谢

控制完成:
我已将浏览器超时(FF:network.http.keep-alive.timeout 增加到 3600s:没有变化。
我检查了在重定向之前没有发送任何标题:好的(headers_sent() 的转储显示没有发送标题,也没有空行或包含中的空格,)
我增加了 Apache 服务器超时以防万一:没有变化
我确保从 HTTP/1.1 开始使用绝对 URL。 我尝试了 php、html meta 和 js 重定向:没有变化

编辑 1:

这是 LiveHTTPHeaders 在“非工作”情况下看到的标头:


http://www.mydomain.org/menus/noeud4.php
POST /menus/noeud4.php HTTP/1.1
主机:www.mydomain.org
用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
接受:text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
接受语言:fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
接受编码:gzip、deflate
接受字符集:ISO-8859-15,utf-8;q=0.7,*;q=0.7
保活:3600
DNT:1
连接:保持活动
推荐人:http://www.mydomain.org/index.php?page=890
Cookie:PHPSESSID=4bge5gg1rgkit78k3seqlfcbq2
授权:基本 aW52aXRlZEBjYW1hY2FzYTp5b3VybXlndWVzdEB0b2RheQ==
内容类型:application/x-www-form-urlencoded
内容长度:98
login=my_superlogin1&pwd1=vbigpass3xqz%40A2L&captcha=91690& source=noeud4.php&>formulaire_valide=SOUMETTRE
找到 HTTP/1.1 302
日期:2011 年 6 月 26 日星期日 14:17:27 GMT
服务器:Apache/2.2.9 (Debian) DAV/2 SVN/1.5.1 mod_fastcgi/2.4.6 mod_python/3.3.1 Python/2.5.2 >mod_ssl/2.2.9 OpenSSL/0.9.8g PHP/5.3.3 X-Powered-By:PHP/5.3.3
过期:1981 年 11 月 19 日星期四 08:52:00 GMT
缓存控制:无存储、无缓存、必须重新验证、后检查=0、预检查=0
编译指示:无缓存
位置:http://www.mydomain.org/index.php?page=100&new_session=a4da9106dba2ffd40345a5eb624d7788
内容长度:0
保持活动状态:超时=60
连接:保持活动
内容类型:text/html


http://www.mydomain.org/index.php?page=100&new_session=a4da9106dba2ffd40345a5eb624d7788
GET /index.php?page=100&new_session=a4da9106dba2ffd40345a5eb624d7788 HTTP/1.1
主机:www.mydomain.org
用户代理:Mozilla/5.0 (Windows NT 6.1; WOW64; rv:2.0.1) Gecko/20100101 Firefox/4.0.1
接受:text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
接受语言:fr,fr-fr;q=0.8,en-us;q=0.5,en;q=0.3
接受编码:gzip、deflate
接受字符集:ISO-8859-15,utf-8;q=0.7,*;q=0.7
保活:3600
DNT:1
连接:保持活动
推荐人:http://www.mydomain.org/index.php?page=890
Cookie:PHPSESSID=4bge5gg1rgkit78k3seqlfcbq2
授权:基本 aW52aXRlZEBjYW1hY2FzYTp5b3VybXlndWVzdEB0b2RheQ==

找到 HTTP/1.1 302
日期:格林威治标准时间 2011 年 6 月 26 日星期日 14:19:59
服务器:Apache/2.2.9 (Debian) DAV/2 SVN/1.5.1 mod_fastcgi/2.4.6 mod_python/3.3.1 Python/2.5.2 >mod_ssl/2.2.9 OpenSSL/0.9.8g PHP/5.3.3 X -技术支持:PHP/5.3.3
过期:1981 年 11 月 19 日星期四 08:52:00 GMT
缓存控制:无存储、无缓存、必须重新验证、后检查=0、预检查=0
编译指示:无缓存
位置:https://www.mydomain.org/index.php?page=100&new_session=a4da9106dba2ffd40345a5eb624d7788&sid=4bge5gg1rgkit78k3seqlfcbq2&sidf=.ps_Z5wRio
内容长度:0
保持活动状态:超时=60
连接:保持活动
内容类型:text/html


EDIT2: 比较请求/响应的两种情况(工作/不工作),我分离出以下两个主要区别:

关于“工作”响应:
状态:200 我没有关于“不工作”的回复,但我不明白为什么。

关于“非工作”响应:
DNT:1
代表选项Do Not Track (me) from FF4
所以我尝试停用此选项,但结果相同。

我肯定会想念某件事。一切看起来好像服务器已关闭。也许会话 cookie (76 kb) 太大了。我还尝试将 firefox 4 降级到 3.6,因为这是另一个更改的参数,但我仍然得到与 FF3.6 和 FF4 相同的响应。

【问题讨论】:

  • 你可以使用 LiveHTTPHeaders(用于 Firefox)或类似的东西来查看标题吗?
  • 听起来像是域名/DNS/VHosting 的问题。您是否在 VM /etc/hosts 文件中设置了需要复制到主机的别名?主机是否向 VM 提供任何 DNS 服务,当不在 VM 内部工作时需要更换?如果来自主机的请求使用不同的域名,您是否使用基于名称的 Apache VHost,这可能意味着来自主机的请求被路由到不同的 VHost 配置。
  • @Frits van Campen:谢谢,这就是我试图使用萤火虫实现的目标。我使用“阻塞”标题进行了编辑。
  • @Robin:谢谢,因为这可能也是该问题的另一个潜在原因。虚拟机别名被复制到主机,它就像托管在同一虚拟机中的其他网站的魅力一样,我可以从主机访问。并且当前的问题几天前没有出现(相同的虚拟机,相同的网站,相同的主机,但代码和 apache 发生了变化),但我找不到原因。
  • @hornetbzz:这个虚拟机和主机之间的网络设置是什么?桥接?仅限主机?内部的?等等? VM 报告使用什么 IP?实际上,您使用的是什么 VM 软件?

标签: php html redirect header


【解决方案1】:

正如您在发布的请求中看到的那样,您尝试点击: http://www.mydomain.org/menus/noeud4.php 但是你会被重定向到http://www.mydomain.org/index.php?page=100&new_session=a4da9106dba2ffd40345a5eb624d7788,然后又被重定向到https://www.mydomain.org/index.php?page=100&new_session=a4da9106dba2ffd40345a5eb624d7788&sid=4bge5gg1rgkit78k3seqlfcbq2&sidf=.ps_Z5wRio

它是否继续发送302 标头?

我猜noeud4.php 脚本是一些登录脚本,它可能会创建一个会话并可能设置一些cookie。我的猜测是检查这是否正确完成 - 并找出它为什么抛出302

【讨论】:

  • 好猜测:表单 page_890 将数据发布到 noeud4,它分析数据,在服务器上启动一些 cookie。然后 page_890 重定向到表单,如果它们是不合规的数据,或者如果正常则索引。然后 index.php 获取 sid 和 sidf cookie 以保持会话以进行下一步切换到 https 如果所有登录条件都满足:如果是,则索引重定向到自己但更改为 https。
  • @Frits、@bob、@robin:谢谢各位。不确定我到底做了什么,但看起来更改 2 个代码块并启发会话 cookie 解决了这一点。整个代码太敏感了,因为仍然存在一些问题。接下来我将使用一个框架......我接受这个答案,因为这对我找到原因有很大帮助。
  • 注意:我还在 Apache 中停用了 mod_expire 和 mod_deflate。
  • @hornetbzz:很酷。您拥有的 cookie 大小本身就是一个危险信号(尽管不一定是原因),因为它是通常接受的 cookie 大小的 18 倍,可能是通常接受的 http 标头大小的 10 倍。有几个 Apache 选项可用于减少或扩展这个可接受的大小(每个字段或整体),但 76k 通常仍然太多。很高兴你解决了这个问题。
  • @bob:同意。我需要它用于 dvp 的目的。我已经将大小减小了 5。
猜你喜欢
  • 2013-07-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-07-07
  • 2012-12-16
  • 2011-04-15
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多