POST/Redirect 引发“连接已重置”浏览器错误
Posted
技术标签:
【中文标题】POST/Redirect 引发“连接已重置”浏览器错误【英文标题】:POST/Redirect throws a `Connection was reset` browser error 【发布时间】:2015-09-09 00:40:11 【问题描述】:我正在为我们的一位客户构建单页结帐。此结帐应包含所有凭证、装运和付款表格。也应该可以编辑以前输入的值。这一切都很好,除了一件事。
我的页面由多个包含:
凭据 发货 付款在其中的每一个中,我都会检查相关数据是否在会话中,如果是,我会显示不同的视图。这里没什么特别的。
例如:
<?php
if (is_array($_SESSION['credentials']))
... show filled in values ...
else
... show form ...
?>
当值已经设置时,我还会显示一个编辑按钮。我这样做如下:
<div class="left-column">
<h1 class="title-left">Step 1 - Credentials</h1>
<div class="pull-left" style="width: 50%;">
Name: name<br />
Address: Address 11<br />
Postal Code: 12345AA<br />
Country: Country<br />
</div>
<br />
<div style="clear: both;height: 10px;"></div>
<center>
<form method="POST" action="/checkout/credentials/">
<input type="hidden" name="edit" value="credentials">
<button class="sexybutton sexysimple sexybestel">Edit</button>
</form>
</center>
</div>
接着是:
<div class="left-column">
<h1 class="title-left">Step 2 - Shipment</h1>
<i>Select a shipment method</i>
<form method="POST" action="/checkout/payment/">
<input type="radio" value="0" name="shipmentmethod"> Collect<br />
<input type="radio" value="1" name="shipmentmethod"> Deliver<br />
<input type="submit" value="Go to Step 3" class="sexybutton sexysimple sexybestel pull-right" name="shipment">
</form>
</div>
在凭据包括我检查$_POST['edit']
。如果已设置,我将再次显示表单,并在输入字段中使用客户先前填写的数据。
问题
每当我第一次单击编辑按钮时,它都会引发Connection was reset
浏览器错误。如果我刷新页面,它会要求我再次提交表单。当我这样做时,错误消失了。我似乎无法弄清楚这是从哪里来的。我检查了服务器日志,但没有任何异常。
*注意:*在发货和付款步骤之间也会出现同样的问题。
相关htaccess
Options +FollowSymLinks
RewriteEngine On
RewriteBase /
order allow,deny
allow from all
RewriteCond %HTTP_HOST ^tapijttegelhandel\.nl
RewriteRule ^(.*)$ http://www.tapijttegelhandel.nl/$1 [R=permanent,L]
AddDefaultCharset utf-8
RewriteRule ^checkout/ /index.php?mod=checkout&action=show [NC,L,QSA]
index.php
case 'checkout':
$action = isset($_GET['action']) ? $_GET['action'] : '';
switch ($action)
case 'completed':
# ...
break;
case 'cancelled':
# ...
break;
case 'credentials':
case 'shipment':
case 'payment':
case 'edit':
default:
include $_SERVER['DOCUMENT_ROOT'].'checkout/show.php';
break;
break;
进展
我已经转储了会话变量以查看会话中是否存在异常情况。 (这里没什么奇怪的) 我已经为 Firefox 安装了一个Tamper Data
插件来检查 POST
数据。 (这里也没什么奇怪的)
更新
我在上次检查所有内容时跳过的代码中发现了一些内容。然而,这可能与我的问题有关。
<script type="text/javascript">
window.history.forward();
function noBack()
window.history.forward();
</script>
</head>
<body onload="noBack();" onpageshow="if (event.persisted) noBack();" onunload="">
工作流程
/cart GET 200 OK
/checkout/credentials/ GET 304 OK
/checkout/credentials/ POST 304 OK
# edit
/checkout/credentials/ POST - Error 'Connection was reset'
# Refresh
/checkout/credentials/ POST 200 OK
【问题讨论】:
在处理具有某种防火墙的共享主机时,我遇到过一些“连接已重置”的情况。您是否启用了 ModSecurity? “连接已重置”是否需要很长时间?即,可能的超时? @Xeli 不,它实际上立即出现 【参考方案1】:“连接已重置”
有时可能意味着 php 崩溃。如果没有看到确切的文件,很难猜测是否以及为什么会发生这种情况。
确保检查error_log,输入:php --info | grep 错误以查看它被记录到哪个文件(如果您在 linux/unix 上)。
我的猜测是一个杂散的休息;某处的声明看到这个答案的可能原因:https://***.com/a/20036720/988324
不过,您会在错误日志中找到一些相关的痕迹。如果你能提供这个,我可能会提供更多帮助。
【讨论】:
【参考方案2】:action="/checkout/payment/"
定义好了吗?我的意思是你可以试试绝对的 url,我看到结尾有一个可疑的斜线/
,你也用method="POST"
定义了表单方法,在 index.php 上你应该用$_POST[]
不知道这是否会影响
【讨论】:
我会检查你的建议以上是关于POST/Redirect 引发“连接已重置”浏览器错误的主要内容,如果未能解决你的问题,请参考以下文章