当前位置: 首页 > 面试题库 >

Websockets客户端API中的HTTP标头

伍嘉
2023-03-14
问题内容

看起来很容易使用任何支持此功能的HTTP标头客户端向您的websocket客户端添加自定义HTTP标头,但是我找不到如何使用JSON API进行操作。

但是,似乎应该在规范中。任何人都知道如何实现它?

var ws = new WebSocket("ws://example.com/service");

具体来说,我需要能够发送HTTP授权标头。


问题答案:

更新了2倍

简短答案: 不,只能指定路径和协议字段。

更长的答案:

JavaScript WebSocketsAPI中没有用于指定客户端/浏览器要发送的其他标头的方法。可以在WebSocket构造函数中指定HTTP路径(“
GET / xyz”)和协议标头(“ Sec-WebSocket-Protocol”)。

Sec-WebSocket-Protocol标头(有时会扩展以用于特定于Websocket的身份验证)是从WebSocket构造函数的可选第二个参数生成的:

var ws = new WebSocket("ws://example.com/path", "protocol");
var ws = new WebSocket("ws://example.com/path", ["protocol1", "protocol2"]);

上面的结果产生以下标题:

Sec-WebSocket-Protocol: protocol

Sec-WebSocket-Protocol: protocol1, protocol2

实现WebSocket身份验证/授权的一种常见模式是实现一种票证系统,其中托管WebSocket客户端的页面从服务器请求票证,然后在WebSocket连接设置过程中的URL
/查询字符串中,在协议字段中传递该票证,或要求在建立连接后作为第一条消息。然后,服务器仅在票证有效时(存在,尚未使用,票证匹配中编码的客户端IP,票证中的时间戳是最近的等)允许连接继续。

基本身份验证以前是一个选项,但已弃用,即使指定了标头,现代浏览器也不会发送标头。

基本身份验证信息(不建议使用)

Authorization标头是从WebSocket URI的用户名和密码(或仅用户名)字段生成的:

var ws = new WebSocket("ws://username:password@example.com")

上面的结果导致以下标头带有字符串“ username:password” base64编码:

Authorization: Basic dXNlcm5hbWU6cGFzc3dvcmQ=

我已经在Chrome 55和Firefox50中测试了基本身份验证,并验证了该基本身份验证信息确实是与服务器协商的(在Safari中可能无法使用)。



 类似资料:
  • 在构建Retor Netty应用程序时,我得到了两个相似的指标。但是它们之间到底有什么区别呢? vs. 我不知道他们在测量响应时间的方式/位置上有什么不同。哪种方法测量的时间更长并不一致。 Http客户端指标测量时间更长 ReactorNetty指标延长了时间

  • 问题 你想创建一个 HTTP 客户端。 解决方案 在这个方法中,我们将使用 node.js's HTTP 库。我们将从一个简单的客户端 GET 请求示例返回计算机的外部 IP 。 关于 GET http = require 'http' http.get { host: 'www.google.com' }, (res) -> console.log res.statusCode get

  • HTTP客户端用于抓取网页HTML源码。 用法 自定义HTTP Header 获取抓取到的HTML 捕获HTTP异常 获取HTTP响应头等信息 自定义HTTP客户端 QueuryList推荐使用GuzzleHttp来作为HTTP客户端,它功能强大、使用简单、支持异步和并发请求,GuzzleHttp使用文档:http://guzzle-cn.readthedocs.io/zh_CN/latest/

  • http 客户端 http 客户端 源码/* * File : httpclient.c * * Copyright (c) 2006-2018, RT-Thread Development Team * * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes * 2018-07-20 flybreak

  • 这可能是基于意见的问题。 我想使用古斯HTTP客户端,因为许多人认为它比Symfony HTTP客户端更好,Cloudflare在其PHP API中也使用古斯HTTP客户端。但是,我使用Symfony HTTP客户端和古斯HTTP客户端执行了一个简单的测试。结果表明,古斯HTTP客户端比Symfony HTTP客户端慢得多。 我想知道/理解为什么拥有如此著名的声誉的HTTP客户端缺乏速度。还是我做

  • Infura Http 客户端 web3j Infura 模块提供了一个Infura Http 客户端(InfuraHttpService),它为Infura特定的Infura-Ethereum-Preferred-Client提供支持。这允许你指定是否希望geth或Parity客户端响应你的请求。你可以像普通的HTTPClient一样创建客户端: Web3j web3 = Web3j.build