现代网络

Cowboy是一个现代网络服务。这一章详细说明了它的含义和所涉及的所有标准的细节。

Cowboy支持所有文档里面所列出的标准。

HTTP/2

HTTP/2是Web服务上最高效的协议。它能支持多个客户端长时间与服务器保持连接;同时发起多个请求;通过压缩HTTP headers来减少请求数据的大小;还有其他更多的优点。协议是二进制的,所以大大减少了所需要解析的资源。

HTTP/2还支持服务器发送消息到客户端。这可以用于多种情况,比如在客户端发送请求之前提前把相关资源发送过去,以减少延迟。这还能被用于双向通信。

Cowboy为HTTP/2提供完全透明的支持。如果客户端能识别它便直接使用,否则会自动跳转到HTTP/1.1。

HTTP/2与HTTP/1.2语义兼容。

HTTP/2根据RFC 7540 and RFC 7541标准定义。

HTTP/1.1

HTTP/1.1是早期版本的HTTP协议。协议本身是基于文本的,存在很多问题和局限性。特别是没办法同时进行请求(通过pipelining有时候可以实现),并且有时候很难检测到客户端已经断开连接。

HTTP/1.1为与Web服务提供了很好的语义。它定义了HTTP/1.1 and HTTP/2的客户端和服务器所使用的标准方法,headers和状态代码。

HTTP/1.1还定义了与旧版本HTTP/1.0兼容的协议,该协议从未在所有实现中真正标准化。

HTTP/1.1的核心基于RFC 7230, RFC 7231, RFC 7232, RFC 7233, RFC 7234 and RFC 7235标准定义。很多RFC的标准和其他相关的规范定义都存在附加的HTTP方法,状态代码,header和语义。

Websocket

Websocket是一个建立于HTTP/1.1之上的协议,它提供了客户端与服务器之间的双向通信通道。通信是异步的,并且可以实现同时发生。

它由一个可允许连接到服务器建立WebSocket连接的JavaScript对象和基于二进制发送数据到客户端或服务器的协议组成。

Websocket连接可以传输UTF-8编码的文本或二进制数据。该协议还支持ping/pong机制,使得客户端和服务器能更加有信心地确认连接还是活跃的。

Websocket连接还能被用于传输各种数据,无论数据大小,或是文本还是二进制数据。因此,Websocket有时用于系统之间的通信。

Websocket消息没有他们自己的语义。在这方面,它更接近于TCP,并且要求你自己设计和实现基于此的协议;或者使现有的协议适应Websocket。

Cowboy提供了一个称为Websocket handlers的接口,该接口拥有对Websocket连接的完全控制控制权。

Websocket基于RFC 6455标准定义。

长连接请求

Cowboy提供了接口,可被用于支持长轮询或可靠传输大数据流,该接口还包括使用SSE(Server-Sent Events).

长轮询是一种机制,在该机制中,客户端发起了一个请求,服务器或许不会立刻答复。它允许客户端请求一个当前并不存在,并在随后创建出来的资源,并且创建后马上返回数据。

长轮询本质上是一种hack,但它却被广泛用于早期版本客户端和服务器的各种限制。

SSE是一个定义为媒体类型的小型协议,text/event-stream,以及新的HTTP header,Last-Event-ID。它们基于EventSource W3C规范定义。

Cowboy提供了一个被称为loop handlers的接口,可以很方便的实现长轮询和数据流机制。它的工作不依赖底层协议。

REST

REST, or REpresentational State Transfer, 是一个用于短链接的分布式系统的风格。它可以很轻易的在HTTP上实现。

REST本质上是需要遵循的一些规范。其中很多约束是纯粹的结构,并且使用HTTP就可以解决。开发者必须明确遵循一些规范。

Cowboy提供了一个称为REST handlers的接口,它简化了基于HTTP协议的REST API的实现。

文章目录