PHP:POST数据由于身份验证服务器而丢失


PHP: POST data is lost because of authentication server

我正在运行一个网站,客户可以在该网站上提交表单。我在服务器端使用PHP,并使用POST方法(大型表单)。问题是,有时,请求以GET请求的形式到达我的web服务器,但没有发布信息。只有当表单是从给定的客户位置提交的,并且问题是间歇性的(大部分时间都在工作)时,才会出现此问题。

使用fiddler,我想我已经确定了发生了什么,但想不出变通办法。在stackoverflow上发帖,看看是否有人有想法。

基本上,顺序如下:

1-POST请求与所有适当的数据一起发送。

2-POST请求似乎被身份验证代理服务器截获。

3-代理服务器发送HTTP 302响应POST请求,并重定向到另一个内部地址进行身份验证。

4-进行身份验证事务(两个GET请求,401响应)

5-代理服务器响应302重定向到最后一个身份验证请求,该请求重定向到原始请求。

6-但是浏览器将原始请求作为GET请求发送,不包含任何post信息,而不是原始发送的post请求。

最终结果是在用户处出现一个空白页面,并且表单数据丢失。

可能是因为这样吗?即使原始请求是POST,但它确实在URL中包含了一些参数(也许浏览器因此认为它是GET?)?

这是正常行为吗?我读到这是按照标准的(浏览器总是用GET回答302),但我不敢相信是这样的,因为在这些情况下没有POST请求的解决方案?

必须有一些方法来解决这个问题,这会导致非常糟糕的用户体验。让我知道你的想法。

在使用专门为我设计的404页面的自定义ErrorDocument时,我也遇到过类似的情况。显然有404页,我想可能是401页?没有邮件数据发送给他们。我最终做的不是这样,而是让它以同样的方式进入404页面,但我使用了重写规则而不是错误文档。

以下是做同样事情的重写规则errorDocument404

RewriteCond %{REQUEST_FILENAME} !-f  
RewriteCond %{REQUEST_FILENAME} !-d [OR]
RewriteCond %{REQUEST_FILENAME} -d
RewriteCond %{REQUEST_FILENAME}index.php !-f
RewriteRule ^(.*?)$ /error404.php [L]

作为一个完全的旁敲侧击,也许如果你不能四处了解它是要发布还是得到,你可以使用$_REQUEST,它将能够处理请求,无论它是以何种方式发出的。