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

标签 php forms post proxy

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

使用 fiddler,我想我确定了正在发生的事情,但想不出解决方法。在 stackoverflow 上发帖,看看是否有人有想法。

基本上,顺序如下:

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

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

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

4- 身份验证交易发生(两个 GET 请求,401 响应)

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

6- 但是浏览器将原始请求作为 GET 请求发送,没有发布信息,而不是最初发送的 POST 请求。

最终结果是用户看到一个空白页面,表单数据丢失。

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

这是正常行为吗?我读到这是符合标准的(浏览器总是使用 GET 响应 302),但我不敢相信是这种情况,因为在这些情况下没有针对 POST 请求的解决方案?

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

最佳答案

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

这是做同样事情的重写规则 errorDocument 404

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

作为一个完全侧面的想法,也许如果你不能绕过它是否会被发布或获取,你可以使用 $_REQUEST 来代替,无论它以何种方式进入,它都能够处理请求。

关于PHP:由于身份验证服务器,POST 数据丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9618718/

相关文章:

php - 在连接到远程 mssql 服务器的 linux 14 上运行的 codeigniter PHP56 的数据库配置是什么

php - 谁能在ssh2_exec()函数调用中解释$ pty参数

javascript - 提交表单到文件angularjs

ios - xcode 使用 json 和 POST 来验证用户名和密码

Python 自动执行需要登录的 wget 脚本

php - 如何只比较 MySQL 中 2 个表之间的月份和年份

php - 将 Twilio 与 Symfony2 集成

Python Flask 从表单获取数据属性

PHP 记录未插入到 MySql 博客类别表中

javascript - 在单个 ajax 调用中发布 json + 表单数据