前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【译】 WebSocket 协议第九章——扩展(Extension)

【译】 WebSocket 协议第九章——扩展(Extension)

作者头像
黄Java
发布2019-03-13 15:57:51
8110
发布2019-03-13 15:57:51
举报
文章被收录于专栏:黄Java的地盘黄Java的地盘

概述

本文为 WebSocket 协议的第九章,本文翻译的主要内容为 WebSocket 扩展相关内容。

扩展(协议正文)

WebSocket 可以请求该规范中提到的扩展,WebSocket 服务端可以接受其中一些或者所有的客户端请求的扩展。服务端禁止响应客户端没有请求过的扩展。如果扩展参数需要在客户端和服务端之间进行协商,这些参数必须根据参数所应用的扩展的规范来选择。

9.1 协商扩展

客户端通过 Sec-WebSocket-Extensions 请求头字段来请求扩展,请求头字段遵守 HTTP 的规则,它的值是通过 ABNF 定义的。注意这一节是通过 ABNF 语法/规则,包括“implied *LWS rule”。如果我们客户端或者服务端在协商扩展收到了一个没有符合下面的 ABNF 规则的值,接收到错误的数据的这一方需要立刻让 WebSocket 关闭连接

注意,就像其他的 HTTP 请求头字段一样,这个请求头字段可以被切割成几行或者几行合并成一行。因此,下面这两段是等价的:

是等价于:

任何一个扩展凭证都必须是一个注册过的凭证。(见底 11.4 节)。扩展所使用的任何参数都必须是定义给这个扩展的。注意,客户端只能建议使用任意存在的扩展而不能使用它们,除非服务端表示他们希望使用这个扩展。

注意扩展的顺序是重要的。多个扩展中的任意的互相作用都可以被定义在这个定义扩展的文档中。在没有此类定义的情况下,客户端在其请求中列出的头字段表示其希望使用的头字段的首选项,其中列出的第一个选项是最可取的。服务器在响应中列出的扩展表示连接实际使用的扩展。如果扩展修改了数据或者帧,对数据的操作顺序应该被假定为和链接开始握手的服务端响应的列举的扩展中的顺序相同。

例如,如果有两个扩展”foo”和”bar”,并且服务端发送的头字段Sec-WebSocket-Extensions的值为”foo,bar”,那么对数据的操作顺序就是bar(foo(data)),是对数据本身的更改(例如压缩)或者“堆叠”的帧的更改。

可接受的扩展标头字段的非规范性示例(请注意,长线被折叠以便于阅读)如下:

服务端接受一个或者多个扩展字段,这些扩展字段是包含客户端请求的Sec-WebSocket-Extensions头字段扩展中的。任何通过服务端构成的能够响应来自客户端请求的参数的扩展参数,将由每个扩展定义。

9.2 已知扩展

扩展为实现方式提供了一个机制,即选择使用附加功能协议。这个文档中不定义任何扩展,但是实现跨越使用单独定义的扩展。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 概述
  • 扩展(协议正文)
    • 9.1 协商扩展
      • 9.2 已知扩展
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档