如何用HTTP实现长连接?
在HTTP1.0和HTTP1.1协议中都有对长连接的支持。其中HTTP1.0需要在request中增加“Connection: keep-alive” header才能够支持,
而HTTP1.1默认支持。
http1.0请求与客服端的交互过程:
a) 客户端发出带有包含一个header:“Connection:keep-alive”的请求
b) 服务器端接收请求后,根据http1.0和“Connection:keep-alive”判断出这是一个长连接,就会在response的header中增加“Connection:keep-live”,同时不会关闭已建立的tcp连接。
c) 客户端收到服务器的response后,发现其中包含“Connection:keep-alive”,就认为是一个长连接,不会关闭这个连接。并用该连接再发送request,转到a)
http1.1请求与服务器的交互过程:
a)客户端发出http1.1的请求
b) 服务端收到http1.1后就认为这是一个长连接,会在返回的response设置Connection: keep-live同时不会关闭已建立的连接。
c)客户端收到服务器的response后,发现其中包含“Connection:keep-alive”,就认为是一个长连接,不关闭这个连接。并用该连接再发送request,转到a)
基于http协议的长连接减少了请求,减少了建立连接的时间,但是每次交互都是由客户端发起的,客服端发送消息,服务端才能返回客户端消息,因为客户端也不知道服务端什么时候会把结果准备好,所以客户端的很多请求是多余的,仅是维持一个心跳,浪费了宽带。
http的post和get啥区别?
GET的语义是请求获取指定的资源。GET方法是安全、幂等、可缓存的(除非有 Cache-Control Header的约束),GET方法的报文主体没有任何语义。
POST的语义是根据请求负荷(报文主体)对指定的资源做出处理,具体的处理方式视资源类型而不同。POST不安全,不幂等,(大部分实现)不可缓存。
网友评论