HTTP Keep-Alive详解
来源:互联网 发布:ubuntu重启后ip变化 编辑:程序博客网 时间:2024/05/18 20:07
Not reliable(不可靠)
HTTP是一个无状态协议,这意味着每个请求都是独立的,Keep-Alive没能改变这个结果。另外,Keep-Alive也不能保证客户端和服务器之间的连接一定是活跃的,在HTTP1.1版本中也如此。唯一能保证的就是当连接被关闭时你能得到一个通知,所以不应该让程序依赖于Keep-Alive的保持连接特性,否则会有意想不到的后果
Keep-Alive和POST
在HTTP1.1细则中规定了在一个POST消息体后面不能有任何字符,还指出了对于某一个特定的浏览器可能并不遵循这个标准(比如在POST消息体的后面放置一个CRLF符)。而据我所知,大部分浏览器在POST消息体后都会自动跟一个CRLF符再发送,如何解决这个问题呢?根据上面的说明在POST请求头中禁止使用Keep-Alive,或者由服务器自动忽略这个CRLF,大部分服务器都会自动忽略,但是在未经测试之前是不可能知道一个服务器是否会这样做。
Java实现--客户端
在客户端,Java抽象了Keep-Alive,和程序员分享离开来,HttpURLConnection类自动实现了Keep-Alive,如果程序员没有介入去操作Keep-Alive,Keep-Alive会通过客户端内部的一个HttpURLConnection类的实例对象来自动实现。也就是说,在java中keep-alive是由一个Java类库来实现的,但在其他类库中不一定可用。
Java实现--服务器端
在服务器端,Java依然是将Keep-Alive抽象出来,HttpServlet、HttpServletRequest、和HttpServletResponse类自动实现 了Keep-Alive。这种情况下一些由第三方控制的操作是可能的,如在KeepAliveServlet中提到的JavaWebServer,Keep-Alive是否启用由两个因素决定,内容长度和输出大小,如果内容长度是响应的一部分(即这段内容长度输出后还有内容需要输出),则Keep-Alive被启用(当然需要客户端支持的情况下);如果内容长度未设定,则Servlet会试着计算响应缓冲区长度以确定内容长度,在Javasoft实现中,使用一个4KB的缓冲区(相当于上面说的响应)。也就是说如果内容长度未设定,并且返回数据超过4KB,此时相当于内容长度大于响应长度,而不是响应长度一部分,Keep-Alive就不会被启用 。
- HTTP Keep-Alive详解
- HTTP Keep-Alive详解
- HTTP Keep-Alive详解
- HTTP Keep-Alive详解
- HTTP Keep-Alive详解
- HTTP Keep-Alive详解
- HTTP Keep-Alive详解
- HTTP Keep-Alive详解
- HTTP Keep-Alive详解
- HTTP Keep-Alive详解
- HTTP Keep-Alive详解
- HTTP Keep-Alive 详解
- HTTP keep-alive详解
- HTTP Keep-Alive模式详解
- HTTP协议Keep-Alive模式详解节选
- http头部与Keep-Alive模式详解
- HTTP协议Keep-Alive模式详解
- http keep-alive与tcp keep-alive
- postgre-隐藏系统列
- 双向map,通过value找到key,还有...
- nginx做反向代理实现负载均衡
- Vim实战指南(七):编程偏好配置
- 错误"Invalid value around character 0"
- HTTP Keep-Alive详解
- Jenkins Command Line大全[翻译]
- 纪念乐乐
- linux 起步走 platform_driver_register
- centos7 下GPRS-Modem 短信猫配置以及发送短信调试说明
- Android 学习资料收集
- storm简单介绍
- Unity 你以为SetParent()是个很简单的API???!!
- 介绍Collection框架的结构