连接关闭后的PHP重定向、Iptables和数据

连接关闭后的PHP重定向、Iptables和数据,php,redirect,curl,http-headers,iptables,Php,Redirect,Curl,Http Headers,Iptables,这是一个奇怪的问题。我们最近在代码中发现了一个3个月前的bug,我们在打印后发布了一个302重定向头。因此,浏览器将接收字符串,而不会重定向到下一页 这本印刷品已经生产了相当长的一段时间,没有人提到它,这使我们相信这是生产和开发上的一个配置差异。最新的更改是对IPtables的更改,当我们恢复更改时,它似乎解决了问题 奇怪的是,我们无法复制这一问题以供自己启发。这就引出了一个问题,IPtables甚至可以影响302重定向吗?更不用说,关心数据是否在头之前发送?从我的研究来看,没有,但我想先找到那

这是一个奇怪的问题。我们最近在代码中发现了一个3个月前的bug,我们在打印后发布了一个302重定向头。因此,浏览器将接收字符串,而不会重定向到下一页

这本印刷品已经生产了相当长的一段时间,没有人提到它,这使我们相信这是生产和开发上的一个配置差异。最新的更改是对IPtables的更改,当我们恢复更改时,它似乎解决了问题

奇怪的是,我们无法复制这一问题以供自己启发。这就引出了一个问题,IPtables甚至可以影响302重定向吗?更不用说,关心数据是否在头之前发送?从我的研究来看,没有,但我想先找到那些无所不知的人

几天前更改IPtables的人(我们将其还原并以某种方式解决了问题)说,这些是令人不快的入口:

ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 
ACCEPT all -- 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
第一个条目是它一直以来的样子,第二个条目是他将其更改为破坏网站的内容。恢复到第一个条目“修复它”。首先,我知道,超级安全…这是一个本地开发框

我试着卷曲url(现在可以了,因为我们不能破坏它),看看我能看到什么,我注意到了问题的第二部分。Curl registers
*关闭连接#0
在打印进入之前,当打印进入时,在我的提示下进入:

< HTTP/1.1 302 Found
< Date: Thu, 18 Apr 2013 16:14:55 GMT
< Server: Apache/2.2.3 (Red Hat)
< X-Powered-By: PHP/5.3.3
< location: app.php?cart_item_id=1234567
< X-UA-Compatible: IE=Edge
< Content-Length: 17
< Connection: close
< Content-Type: text/html; charset=UTF-8
<
* Closing connection #0
<pre>before</pre>[user@localhost ~]$
找到HTTP/1.1 302 <日期:2013年4月18日星期四格林威治标准时间16:14:55 所以。。。。是 啊有什么想法吗?我是说,现在一切都好了,我只是想知道为什么

巴斯:好吧,但是当我卷曲的时候,yahoo.com我得到了这个:

[user@localhost~]$curl yahoo.com-v
*即将连接()到yahoo.com端口80(#0)
*正在尝试206.190.36.45。。。
*连接的
*已连接到yahoo.com(206.190.36.45)端口80(#0)
>GET/HTTP/1.1
>用户代理:curl/7.24.0(x86_64-redhat-linux-gnu)libcurl/7.24.0 NSS/3.13.5.0 zlib/1.2.5 libidn/1.18 libssh2/1.2.2
>主持人:雅虎
>接受:*/*
>
在所有内容之后,我得到了
*关闭连接#0
。有什么区别


至于iptables规则,在该规则之后还有其他允许、端口80等。所以我想。。。。但是。。。嗯,我不知道…

查看print-r的结果是否已缓冲,除非将return参数设置为true。因此,print\r不会触发发送HTTP头。然后读取:HTTP状态头行将始终是第一个发送到客户机的行,而不管实际的header()调用是否是第一个。除非HTTP标头已经发送,否则可以随时使用新的状态行调用header()来覆盖该状态。

请参见print-r的结果,除非将返回参数设置为true。因此,print\r不会触发发送HTTP头。然后读取:HTTP状态头行将始终是第一个发送到客户机的行,而不管实际的header()调用是否是第一个。除非HTTP标头已经发送,否则可以随时使用新的状态行调用header()来覆盖状态。

正如Bass所说,标头将在打印之前发送。 此外,iptables不会执行“深度数据包检查”,因此它无法查看消息的内容

两条线路的不同之处在于,第一条线路允许从任何ip到任何ip的所有数据包,而第二条线路只允许已建立连接的数据包


如果没有规则允许数据包进行新连接。根据允许建立连接的规则,所有数据包都不会被传输。(更多信息?

正如巴斯所说,页眉将在打印前发送。 此外,iptables不会执行“深度数据包检查”,因此它无法查看消息的内容

两条线路的不同之处在于,第一条线路允许从任何ip到任何ip的所有数据包,而第二条线路只允许已建立连接的数据包

如果没有规则允许数据包进行新连接。根据允许建立连接的规则,所有数据包都不会被传输。(更多有关的信息?)

[user@localhost~]$ curl yahoo.com -v
* About to connect() to yahoo.com port 80 (#0)
*   Trying 206.190.36.45...
* connected
* Connected to yahoo.com (206.190.36.45) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.24.0 (x86_64-redhat-linux-gnu) libcurl/7.24.0 NSS/3.13.5.0 zlib/1.2.5 libidn/1.18 libssh2/1.2.2
> Host: yahoo.com
> Accept: */*
>
< HTTP/1.1 301 Redirect
< Date: Fri, 19 Apr 2013 13:28:10 GMT
< Connection: close
< Server: YTS/1.20.13
< Cache-Control: no-store
< Content-Type: text/html
< Content-Language: en
< Location: http://www.yahoo.com/
< Content-Length: 211
<
<HEAD><TITLE>Redirect</TITLE></HEAD>
<BODY BGCOLOR="white" FGCOLOR="black">
<FONT FACE="Helvetica,Arial"><B>
 "<em>http://www.yahoo.com/</em>".<p></B></FONT>

<!-- default "Redirect" response (301) -->
</BODY>
* Closing connection #0
[user@localhost~]$