请问第二次请求会覆盖第一次请求吗?
比如我在浏览器输入网址回车后 在网页还在加载的时候我又输入了另一个网址请求 那么前一个请求返回的响应去哪了呢?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
比如我在浏览器输入网址回车后 在网页还在加载的时候我又输入了另一个网址请求 那么前一个请求返回的响应去哪了呢?
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
接受
或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
发布评论
评论(6)
如果第一次请求是更改服务器端状态的(比如对数据的增删改)。就会影响到你第二次的提交返回内容。
第一次的就没有返回了
那第一次返回的去哪了呢?
发现客户端不再接收信息时,服务器一般都会自动断开的.比如:
http://php.net/manual/zh/function.ignore-user-abort.php
php.ini中ignore_user_abort默认是Off,不忽略用户的中断,也就是客户端断开连接后,脚本将被中止.在PHP尝试发送信息到客户端之前,不会检测到用户是否已中断连接.仅使用echo语句不能确保信息已发送,参见flush()函数.
time curl http://www.example.com/app/info.php
Ctrl+C中断请求(PHP-FPM)最后还是生成了文件info.txt.
因为该请求没有输出,PHP无法检测用户是否已中断连接.
//info.php
<?php
for($i=0;$i<5;$i++) { sleep(1); }
file_put_contents('/tmp/info.txt', $i);
PHP在发送信息给浏览器时,才能检测连接是否已经中断.
比如执行这段代码,在5秒内中断请求,将不会生成文件info.txt:
for($i=0;$i<5;$i++) {
echo $i;
ob_flush();
flush();
sleep(1);
}
file_put_contents('/tmp/info.txt', $i);
又比如PHP判断用户下载完文件后才给予优惠:
<?php
ignore_user_abort(false); //用户中断,退出脚本
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.basename($file_path).'"');
echo file_get_contents($file_path); //输出文件
ob_flush();
flush(); //冲刷数据到客户端,发现断开,则退出脚本
discount(); //给予优惠
也就是说,第一次请求完如果抛弃了接受,那么服务端可能认为你断开了,和第二次没有任何关系
http是无状态的,服务器只负责响应请求而不校验是否接收到