返回信息流假设一个用户正在访问某个HTTP服务,他点了页面上的一个链接(提交了一个HTTP请求),可能由于服务器忙,未能及时回复,此时用户比较不耐烦,又连续点了若干下链接(可能是同一个链接,也可能是不同的),经过一段时间后,终于等到了回复。
这种场景是很常见的。我印象中,如果是点了不同的链接的话,最后显示返回的只是最后一个链接请求的结果,前面的如果来不及处理,都被抛弃掉了。
现在问题是,在前面所述的场景下,服务器是否只需响应最后一个请求就足够了,只前的请求都可以不用管?
根据我实际做实验来看,在这种来不及响应的场景下,用户每点一次链接,客户端浏览器和服务器之间都会产生一个新的socket连接。如果只需响应最后一个请求的话,就完全可以抛弃之前在等待的请求,关闭不需要的socket,来减低服务器的压力。
这是一条镜像帖。来源:北邮人论坛 / soft-design / #24340同步于 2008/3/13
该镜像源已超过 30 天没有更新,可能在源站已被删除。
SoftDesign机器人发帖
研究个问题,HTTP相关
Quake
2008/3/13镜像同步5 回复
订阅后,新回复会通过你的通知中心匿名送达。
5 条回复
印象中也有响应第一个抛弃后面的场景。。。
【 在 Quake (Fumika|文伽) 的大作中提到: 】
: 假设一个用户正在访问某个HTTP服务,他点了页面上的一个链接(提交了一个HTTP请求),可能由于服务器忙,未能及时回复,此时用户比较不耐烦,又连续点了若干下链接(可能是同一个链接,也可能是不同的),经过一段时间后,终于等到了回复。
: 这种场景是很常见的。我印象中,如果是点了不同的链接的话,最后显示返回的只是最后一个链接请求的结果,前面的如果来不及处理,都被抛弃掉了。
: 现在问题是,在前面所述的场景下,服务器是否只需响应最后一个请求就足够了,只前的请求都可以不用管?
: ...................
看看你的
Response Headers
Date Fri, 14 Mar 2008 01:44:18 GMT
Server Apache/2.2.3 (Unix) PHP/5.2.4
X-Powered-By PHP/5.2.4
Content-Length 390
Keep-Alive timeout=5, max=100
Connection Keep-Alive
Content-Type text/html
如果Connection那个字段如果是Keep-Alive那就只有一个链接,不会产生新的
如果服务器设置的不是Keep-Alive,那么每点一下产生一个新的,用完自动关闭
【 在 ComicLiu 的大作中提到: 】
: 看看你的
: Response Headers
: Date Fri, 14 Mar 2008 01:44:18 GMT
: ...................
呵呵,你都没仔细看问题所描述的场景
问题中的场景是服务器来不及回复
既然是来不及回复,又何来response
sorry 我意思是对的..只是发错了一项~~
应该是:
Request Headers
Host www.google.com
User-Agent Mozilla/5.0 (Windows; U; Windows NT 5.1; zh-CN; rv:1.8.1.12) Gecko/20080201 Firefox/2.0.0.12
Accept text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
Accept-Language zh-cn,zh;q=0.5
Accept-Encoding gzip,deflate
Accept-Charset gb2312,utf-8;q=0.7,*;q=0.7
Keep-Alive 300
Connection keep-alive
Referer http://www.google.com/search?q=firebug%20%E5%8F%91%E9%80%81%E4%BF%A1%E6%81%AF%20%E5%A4%B4%20request&hl=zh-CN&newwindow=1&client=firefox-a&rls=org.mozilla%3Azh-CN%3Aofficial&hs=gC1&lr=&nxpt=20.737645384817429967577
Cookie
【 在 Neverwinter 的大作中提到: 】
: 呵呵,你都没仔细看问题所描述的场景
: 问题中的场景是服务器来不及回复
: 既然是来不及回复,又何来response
现在一般http都是采用了keep-alive报头来提高连接的利用率,而不是发一个请求建一个连接
另外,你所说的来不及响应是不大可能存在的,一般服务器都会有一个请求队列,你只要"真正发送了"一个请求,那么服务器就肯定会响应你的请求,除非服务器负荷真的很大以致超时无法响应.
当你连续收到服务器发过来的几个请求时(你乱点的结果),浏览器会用最后的响应来渲染.你通过firebug或者其他工具可以看到这个过程.
ps:你说的乱点其实有两种情况,一种是当当前页面还没有unload,你乱点是会连续发送请求的,一种是页面已经unload了,你乱点其实浏览器已经不会继续发送请求了