我正在运营一个客户可以提交表单的网站。我在服务器端使用PHP并使用POST方法(大型)。问题是,有时,请求作为GET请求来到我的Web服务器,没有发布信息。仅当从给定客户位置提交表单并且问题是间歇性的(大多数时间都在工作)时,才会出现此问题。
使用fiddler,我认为我确定了发生了什么,但想不出一个解决方法。在stackoverflow上发布以查看是否有人有想法。
基本上,顺序如下:
1- POST请求与所有适当的数据一起发送。
2- POST请求似乎被身份验证代理服务器拦截。
3- Proxy Server向POST请求发送HTTP 302响应,并重定向到另一个内部地址进行身份验证。
4-发生认证事务(两个GET请求,401响应)
5-代理服务器应答302重定向到上一个身份验证请求,该请求重定向到原始请求。
6-但浏览器将原始请求作为GET请求发送,没有发布信息,而不是最初发送的POST请求。
最终结果是用户的空白页面,表单数据丢失。
可能是因为即使原始请求是POST,它确实包含URL中的一些参数(也许browswer认为它是GET因为这些?)?
这是正常行为吗?我已经读到这是按照标准的(浏览器总是用GET回答302),但我不能相信这种情况,因为在这些情况下POST请求没有解决方案吗?
必须有一些解决此问题的方法,这会导致非常糟糕的用户体验。让我知道你的想法。
答案 0 :(得分:0)
我在为404页面专门使用自定义ErrorDocument时也遇到过类似的问题。显然有404页,我假设可能是401?没有帖子数据发送给他们。我最终做的不是这个,而是以相同的方式进入404页面,但我使用重写规则而不是errordocument。
这是做同样事情的重写规则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而且它能够处理请求,无论它进入哪种方式。