关于HTTP keep-alive的实验
2016-01-07 17:54
330 查看
转载:http://www.cnblogs.com/kobe8/p/3702071.html
我们知道,TCP建立连接时会进行三次握手,而握手是以一方发送一个SYN为开始的。下载抓包工具Wireshark之后,进行抓包调试。在Java里实现了一段模拟请求的代码:
请求结果如下。可以看到,图一中共有两次HTTP请求,但是只建立了一次TCP连接,说明持久连接是有效的。而等到10秒之后(代码40行开始)的HTTP请求,又会重新建立连接,证明keep-alive已经过了超时时间。然后在头中加入Keep-Alive: 300,结果第二次请求仍然会重新连接,证明服务器端对于Keep-alive超时进行了配置,并不接受Keep-Alive: 300头。
图1 第一次请求,keep-alive生效
图2 10秒后第二次请求,keep-alive过期
然后我们将Connection头设置为close,重试。发现确实建立了两次TCP连接。
图3 设置Connection:close后,keep-alive无效
总结:
Keep-alive只是HTTP1.0时代对持久化连接的叫法,目前HTTP1.1已经默认所有请求都是持久化的,RFC规范是正确的。
头部不设置Connection: keep-alive,依然会进行持久化连接。
如果设置Connection:close,则不进行持久化连接。
目前连接过期时间在服务端设置,Keep-Alive头设置超时时间的做法已经不再有效。
前面一篇文章提到,HTTP1.1中持久连接已经是默认配置,除非设置Connection为close,否则默认都会进行持久连接。但是我们知道事实标准跟教科书还是可能会有一定差距的,所以不妨自己尝试一下。
我们知道,TCP建立连接时会进行三次握手,而握手是以一方发送一个SYN为开始的。下载抓包工具Wireshark之后,进行抓包调试。在Java里实现了一段模拟请求的代码:图1 第一次请求,keep-alive生效
图2 10秒后第二次请求,keep-alive过期
然后我们将Connection头设置为close,重试。发现确实建立了两次TCP连接。
图3 设置Connection:close后,keep-alive无效
总结:
Keep-alive只是HTTP1.0时代对持久化连接的叫法,目前HTTP1.1已经默认所有请求都是持久化的,RFC规范是正确的。
头部不设置Connection: keep-alive,依然会进行持久化连接。
如果设置Connection:close,则不进行持久化连接。
目前连接过期时间在服务端设置,Keep-Alive头设置超时时间的做法已经不再有效。
相关文章推荐
- SQL Server 2012将数据库备份到网络中的共享文件夹
- (一) 初识HTTP/2
- Android 网络开源库之-retrofit
- http post不使用库,上传带参数的文件时的消息体样式
- http、TCP/IP协议与socket之间的区别
- Android主流网络请求框架Volley
- 使用httpclient上传文件
- AssetsLibrary从网上下载图片,保存到相册,保存网络图片,
- nginx HTTP Upstream模块
- 使用ASIHTTPRequest 编译提示找不到"libxml/HTMLparser.h"的解决方法
- android BroadcastReceiver动态监听网络连接
- TCP滑动窗口机制
- 一次tcp连接被reset的异常故障排查
- HTTP状态码总结
- 网络编程 java
- iOS9请求出现App Transport ... cleartext HTTP (http://)---HTTPS改HTTP
- mac下搭建http服务器(apache+php)并实现上传功能
- http--发送get请求获取网页
- 网络基础原理
- RNN学习笔记(二)-Gradient Analysis