socks5
http
一次完整的 http 请求过程(短链接)
- 对www.baidu.com这个网址进行DNS域名解析,得到对应的IP地址
- 根据这个IP,找到对应的服务器,发起TCP的三次握手
- 建立TCP连接后发起HTTP请求
- 服务器响应HTTP请求,浏览器得到html代码
- 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等)(先得到html代码,才能去找这些资源)
- 浏览器对页面进行渲染呈现给用户
- 服务器关闭关闭TCP连接
http 的长链接和短链接
在HTTP/1.0中,默认使用的是短连接。也就是说,浏览器和服务器每进行一次HTTP操作,就建立一次连接,但任务结束就中断连接。如果客户端浏览器访问的某个HTML或其他类型的 Web页中包含有其他的Web资源,如JavaScript文件、图像文件、CSS文件等;当浏览器每遇到这样一个Web资源,就会建立一个HTTP会话。
但从 HTTP/1.1起,默认使用长连接,用以保持连接特性。使用长连接的HTTP协议,会在响应头有加入这行代码:
Connection:keep-alive
在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的 TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。Keep-Alive不会永久保持连接,它有一个保持时间,可以在不同的服务器软件(如Apache)中设定这个时间。实现长连接要客户端和服务端都支持长连接。
短连接(Short-lived Connections):
每次请求 / 响应完成后,客户端和服务器会立即关闭 TCP 连接。下次请求需要重新建立 TCP 连接(三次握手),完成后再次关闭。
对应 HTTP 头:Connection: close
长连接(Persistent Connections,Keep-Alive):
一次 TCP 连接建立后,可被多个 HTTP 请求 / 响应复用,连接不会立即关闭,直到超时或被主动关闭。
对应 HTTP 头:Connection: keep-alive(HTTP/1.1 默认启用,HTTP/1.0 需显式指定)
HTTP协议的长连接和短连接,实质上是TCP协议的长连接和短连接
深入理解一下底层逻辑
http 协议和 tcp 协议,这是两层互不干扰的协议。浏览器点开 F12,看到的是 http 的应用层请求,如果前端页面轮询调用后端接口,每次请求,你都会看到一条记录。具体底层tcp连接怎么创建的,应用层并不关心。所以你开的长连接,是通知的浏览器,让浏览器控制下一层的tcp连接不要断掉,接下来的请求会一直使用
WebSocket
为什么会出现websocket?
在 WebSocket 出现之前,前端要想实现“实时通信”,基本只能靠两种老办法:
一、轮询(Polling)
前端每隔几秒发一次请求问:“有新数据吗?”
缺点是显而易见的: 浪费带宽,延迟还高。
二、长轮询(Long Polling)
前端发起请求,服务端不立刻返回,而是等到有新数据才响应。
响应完了,前端再发起新的请求。
缺点:延迟问题解决了一点,但依旧有大量连接在反复创建、销毁。
这两种方案其实都不好,于是乎,WebSock横空出世
它的核心思想很简单
先用一次 HTTP 握手(Upgrade),然后“升级”成一条持久化的 TCP 连接。
从此以后,前后端可以像发短信一样随时互发消息,不再需要频繁建立 HTTP 请求。
相比于http长连接 websocket的优势
1.所有的请求,都在一条链接上,可以精准的掌握消息的时序
2.鉴权长期有效,因为,连接建立时完成一次认证,后续所有消息都基于同一个连接。换句话说,它天然就是“有状态”的通信方式,管理起来省心很多。
除了以后的两点有点之外,剩下的,都是缺点!!!!
WebSock的缺点
- 没有 http 头,认证机制复杂
- HTTP 有 CORS 来保护,WebSocket 默认是允许跨域的。不额外校验 Origin 头,那么就非常容易出现数据泄露的问题。
- HTTP 天然是一问一答。但是,WebSocket 没这个约束,你必须用 request_id 来区分不同请求的响应,不然消息一乱就麻烦大了。
- HTTP 里日志、监控、路由、缓存都有现成中间件。但是,WebSocket 世界?几乎得自己造轮子,连调试都麻烦。
首先理解三个名词 http socket socks
http 属于应用层协议,是基于 TCP 连接的;而 socket 是属于 TCP/IP 协议封装的,其本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议。可以讲 socket 看做网络通信过程中端点的抽象表示,他包含网络通信必须的五种信息:使用的协议,本地IP地址,本地port,远程IP地址,远程的port。
-
http协议:就是所谓的短链接,即客户端向服务端发送一次请求后,服务端响应后连接即会断掉。 -
socket:就是所谓的长连接,理论上客户端和服务端一旦建立连接,则不会主动断掉;但是由于各种环境因素可能会是连接断开,比如说:服务器端或客户端主机down了,网络故障,或者两者之间长时间没有数据传输,网络防火墙可能会断开该链接已释放网络资源。所以当一个socket连接中没有数据的传输,那么为了位置连续的连接需要发送心跳消息,具体心跳消息格式是开发者自己定义的。 -
sockts是防火墙安全会话转换协议(Protocol for sessions traversal across firewall securely),是客户端和服务端之间的代理协议。
HTTP的长连接一般就只能坚持一分钟而已,而且是浏览器决定的,你的页面很难控制这个行为。Socket连接就可以维持很久,几天、数月都有可能,只要网络不断、程序不结束,而且是可以编程灵活控制的。
浙公网安备 33010602011771号