zoukankan      html  css  js  c++  java
  • http keep-alive简解

    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

  • 相关阅读:
    Java中IO软件包的详细介绍
    Java中IO软件包的详细介绍
    Java中输入时IO包与Scanner的区别
    Java中输入时IO包与Scanner的区别
    Java中输入时IO包与Scanner的区别
    Java中输入时IO包与Scanner的区别
    Java中输入时IO包与Scanner的区别
    虚拟桌面技术的初步探讨
    C语言程序的内存布局
    用汇编语言给XP记事本添加“自动保存”功能 good
  • 原文地址:https://www.cnblogs.com/yanze/p/7750239.html
Copyright © 2011-2022 走看看