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

最新文章

  1. PJAX初体验(主要是利用HTML5 新增API pushState和replaceState+AJAX)
  2. gcc命令中参数c和o混合使用的详解[转载]
  3. windows 7 下,如何统计某文件夹下 视频总时长
  4. mark down pad2
  5. python生成器之斐波切纳数列
  6. ubuntu下pip的安装和使用
  7. dbf,Idx 文件格式
  8. 深度学习课程笔记(十六)Recursive Neural Network
  9. SQLMap 学习
  10. android下使用adb启动程序或者服务
  11. 标准的Flask启动文件
  12. C++ shared_ptr
  13. 海思NB-IOT模块HI2115芯片I2C通信
  14. Spring security 浅谈用户验证机制
  15. sqlserver小批量导数据
  16. zoj 1002 Fire Net (二分匹配)
  17. 在AppCode中的razor调用HtmlHelper方法和UrlHelper方法
  18. 零基础逆向工程20_PE结构04_任意节空白区_新增节_扩大节添加代码
  19. JS获取单选框checked的value方法
  20. linux网络性能评估

热门文章

  1. Cocos2d-x教程(35)-三维拾取Ray-AABB碰撞检測算法
  2. MySQL:ERROR 1067 (42000): Invalid default value for 'end_time'
  3. 自己定义popupwindow二三事
  4. ACdream 1216 (ASC训练1) Beautiful People(DP)
  5. Android下的数据存储与访问、权限
  6. strpos 判断字符串是否存在
  7. spring mvc数据验证
  8. [原]Nginx+Lua服务端合并静态文件
  9. 使用 SourceTree 遇到冲突的解决方法
  10. 源码安装Apache,报错:Cannot use an external APR with the bundled APR-util