时间:2021-07-01 10:21:17 帮助过:203人阅读
浏览器发起请求,然后服务器开始执行,一直执行到服务器脚步运行完毕或者出现异常或者TIMEOUT。浏览器没法关闭服务器的运行。
但是……
技术总是不挺发展,RFC HTTP 1.1 定义了 Connection 响应头,具体的可以参考 PHP的连接处理。
http的无状态协议 这个是历史遗留问题,现在的 HTTP 版本也正在解决这个问题,比如上面提到的长链接。定义在 RFC2616(HTTP 1.1)的 Connection。
进一步阅读:http协议学习系列
会的 ,因此 nginx 加入一个 http code :499 表示客户端断开了连接
服务器软件监听到一个请求后,大概会建立一个线程处理这个请求。它先从流中读取数据,解析请求头,然后把它交给某种语言的解释器,取回数据然后把数据写回流中。
如果用户关闭了浏览器,那么浏览器会提前关闭流,相当于往流里面写了个EOF。服务器肯定会往下执行,因为还是要写日志什么的,只是它读到EOF就不进行流的操作了。
不知道你说的是PHP还是什么,是nginx还是apache还是fastcgi,另外前端代理怎么配的。每个server容器的处理方法不同,不要看经验,做个实验。写个PHP,while死循环,每sleep 1秒往一个文件里追加写一个当前时间,浏览器访问,然后关掉,看看文件是否继续写。
我印象中是关掉浏览器,服务器的PHP就不会执行了,所以PHP才会有ignore_user_abort()这个函数,忽略用户关掉浏览器的行为,让服务器执行完这个脚本。
这种不好控制吧,超时这种操作是在服务器端做吧