http keep-alive简解
2024-08-24 00:44:10
http协议中,客户端发送请求,服务端在接收到请求后,返回所需要的数据后可以关闭连接,这样客户端读取完数据时会返回EOF(-1),表明数据已接受完全
备注:EOF end of file
什么是keep-alive
一般情况下,服务端发送完毕后会自动关闭,而keep-alive功能可以使得客户端与服务端之间建立持续有效的连接,当出现后续请求时不必重新连接。
http1.0中keep-alive默认关闭,需要在请求头中加入connection: keep-alive,而在1.1中默认开启,需加入connection: close
优点是减少了建立连接/释放的开销
那么接下来面临一个问题,如果没有了EOF,如何知道服务端已发送完毕?
1.content-length(请求头/响应头)
content-length实体内容的长度(大小,即返回文件的大小),客户端可根据这个字段来判断是否发送/接收完毕
2.transfer-enconding(响应头)
当服务端发送一个图片或静态页面时,它很清楚文件的大小,从而知道content-length的值,但如果是发送动态网页呢?服务器不知道其实际大小。。这时候就需要transfer-enconding:chunked
设置transfer-encoding:chunked后,会将文件进行chunk编码,将文件分成一块一块再串联起来,由一个长度为0的chuck结束,客户端接收到这个chunk后明白发送完毕。
总结如下:
客户端如何知道服务端传输完毕: 服务端关闭连接、content-length、transfer-enconding
服务端如何知道客户端传输完毕: content-length
最新文章
- PJAX初体验(主要是利用HTML5 新增API pushState和replaceState+AJAX)
- gcc命令中参数c和o混合使用的详解[转载]
- windows 7 下,如何统计某文件夹下 视频总时长
- mark down pad2
- python生成器之斐波切纳数列
- ubuntu下pip的安装和使用
- dbf,Idx 文件格式
- 深度学习课程笔记(十六)Recursive Neural Network
- SQLMap 学习
- android下使用adb启动程序或者服务
- 标准的Flask启动文件
- C++ shared_ptr
- 海思NB-IOT模块HI2115芯片I2C通信
- Spring security 浅谈用户验证机制
- sqlserver小批量导数据
- zoj 1002 Fire Net (二分匹配)
- 在AppCode中的razor调用HtmlHelper方法和UrlHelper方法
- 零基础逆向工程20_PE结构04_任意节空白区_新增节_扩大节添加代码
- JS获取单选框checked的value方法
- linux网络性能评估
热门文章
- Cocos2d-x教程(35)-三维拾取Ray-AABB碰撞检測算法
- MySQL:ERROR 1067 (42000): Invalid default value for 'end_time'
- 自己定义popupwindow二三事
- ACdream 1216 (ASC训练1) Beautiful People(DP)
- Android下的数据存储与访问、权限
- strpos 判断字符串是否存在
- spring mvc数据验证
- [原]Nginx+Lua服务端合并静态文件
- 使用 SourceTree 遇到冲突的解决方法
- 源码安装Apache,报错:Cannot use an external APR with the bundled APR-util