HTTP长连接&短连接

日期:2015-7-4 15:40 | 标签: http | 阅读:509

最近在折腾http协议的长连接与短连接。

首先,如果客户端得支持HTTP1.1,其会自动在请求头中添加

Connection:keep-alive

HTTP1.0得手动添加该头部。服务器收到请求后,若自身支持,则使用长连接。
长连接也有个长短,其取客户端与服务器两端中维持时间的最小值,如果客户端能够维持1min,服务端只有30s,那么长连接能够维持的时间也就30s了。 **

在同一个TCP连接里面,客户端可以同时发送多个请求,这样就进一步改进了 HTTP 协议的效率。但是其还是无状态的,所以每次请求就算是 http 头相同,也得重复发送,此外,建立的长连接也是不平等,服务端想断开就断开,而不是真正的双工通信。

HTT0.9/1.0/1.1/2

@update at 16-08-22
参见阮博士: http://www.ruanyifeng.com/blog/2016/08/http.html

.Net方案调研

我使用长连接主要是为了实现服务端推送技术,对于长连接比较流行的方案是comet,最新的方案是使用websocket了,虽然不支持低版本浏览器,但是这该是以后的趋势了, 现在很多实时应用都是基于websocket。 .Net流行的方案是使用signalR,其就是基于websocket,对客户端的要求是支持HTML5,对服务器的要求Winserver2008 r2,基于.net4.5framework才行。此次试验基于net4.0,暂时没有对其进行试验。

Comet方案

本次使用的comet方案,其实就是长轮询,http作为一种无状态的协议,也就是一个来回有作用。

  1. 如要实现与客户端的实时交互最简单的做法是使用ajax循环不断向后台请求数据,从而造成一种实时的假象。
  2. 第二种是长轮询,也是本次实验采取的方案,当客户端发起一个连接后,服务端将其抓住后不进行释放,待有数据时再进行返回,在客户端接受返回数据的回调里会再次发起一个连接,从而实现了一个数据请求返回的闭环,实现了数据的刷新。貌似 IE 不支持其在 onReadyState 为 3 的时候写数据,也就无法支持了。
  3. 使用iframe[长连接],未进行测试
  4. 使用websocket进行通信,此方法为html5可采用的方案,另一说也可以嵌入flash实现。
  5. 对.Net来说,用silverlight实现亦是一个比较便捷的方案。

    update at 2017_12_10

http协议重点

  1. url格式:
    schema://host[:port#]/path/…/[;url-params][?query-string][#anchor]
    
  2. 消息结构分为三部分

    • 请求头:[1]请求行(line) [2] 请求头(header) [3]请求主体(body)
    • 返回头:[1]返回行(line) [2] 返回头(header) [3]返回主体(body)
  3. 请求方法,我们主要使用为get/post,其余有:PUT, DELET等

  4. 状态码

    • 1xx提示信息 – 表示请求已被成功接收,继续处理
    • 2xx成功 – 200(ok),206(返回部分,一般出现在下载比较大的资源时)
    • 3xx重定向 – 要完成请求必须进行更进一步的处理
      • 300 Multiple Choices:可选重定向,表示客户请求的资源已经被转向到另外的地址了
      • 301 Moved Permanently:永久重定向
      • 302 Moved Temporatily:临时重定向
    • 4xx客户端错误 – 400(请求有语法错误);401(请求未授权);403(拒绝服务);404(资源不存在)
      • 400 坏请求
      • 403 禁止访问
      • 404 找不到
    • 5xx服务器端错误 – 500(不可预期错误);503(暂时无法服务)
      • 500 服务器错误
      • 503 服务不可用,有可能服务器挂了
  1. 头域,这里直接上传了两张google console的截图,一切尽在不言中
    请求头
    请求头
    返回头
    请求头
  2. 读完这篇文章能对http协议的大框架会有比较系统的掌握。http协议漫谈

参考

http://kb.cnblogs.com/page/130970/#whathttp
http://www.cnblogs.com/hoojo/p/longPolling_comet_jquery_iframe_ajax.html

版权声明: 署名-非商业性使用-禁止演绎 4.0 国际(CC BY-NC-ND 4.0
Copyright ©2013-2017 | 粤ICP备14081691号 | yipeng手工打造 | 联系方式