我看到一个称为它定义了要添加到HTTP协议中的几个HTTP标头.例如但我在那么这些标头的定义可以使用? (我对RFC文档的组织方式不太熟悉.所以请赦免我这是一个愚蠢的问题.) 解决方案 HTTP协议允许将自定义标头添加到任何HTTP请求中.如果HTTP服务器不知道特定的标题名称,则它只是忽略了它. WebSocket连接的启动在其HTTP请求中添加了一些自定义标题,这些标题不是标准HTTP定义的标头名,但它们是按标准HTTP标头格式化的(如RFC 2616的4.2节所定义),因此被任何HTTPP安全地忽略了不了解它们的服务器. 正如朱利安(Julian)在评论中指出的那样,您可以看到已注册的sec-websocket-xxx标头
以下是关于 http 的编程技术问答
这是我的ESP32代码, #include #include #include const char* ssid = "###"; const char* password = "###"; char path[] = "/"; char host[] = "https://hidden-thicket-03510.herokuapp.com"; WebSocketClient webSocketClient; WiFiClient client; int timer=0; void connnect(){ if (client.connect(host,443)) { Serial.println("Connected"); } else { Serial.println("Connection failed."); } webSoc
这个 HTTP协议是一个请求/响应协议. 移至较新的HTTP协议-HTTP/2规格说,每个流都是帧的双向序列.客户端和服务器都可以启动流创建. (尽管服务器流的创建是对客户端请求的响应,并且仅针对H2服务器推送而言是不再相关的) GRPC和Websockets在启动的单个客户端上运行 H2也流.两者都允许双向通信. 这是否意味着H2和H3不再需要请求/响应协议? 是单个H2流完整双工?(通过完整的双工在这里.) 服务器可以向客户端发送未经请求的消息吗?(服务器推送除外 - 由于其不再相关). 如果没有,GRPC或Websockets双向通信如何在H2上工作? 解决方案 这是否意味着H2和H3不再需要请求/响应协议? 他们仍然请求/响应协议.您可以在此基础上构建其他类型的协议,但是它们仍然需要/响应.或者,您可以以非常严格的方式定义"请求/响应",以免HTTP/2不是,但是当与BOSH一起使用时,HTTP/1.1也不是.这不是一个特别有意义的名称.
我需要设置一个嵌套的服务器序列事件(SSE)连接(客户端 - > Backend-> OpenAI),并且我已经成功实现了这一点.但是,现在我需要从客户端发送一个大型文本参数(param)到后端,以触发适当的SSE端点.文本太大,无法直接传递在URL中.有没有办法将初始数据包从客户端发送到后端,然后建立SSE连接? 我当前的方法是执行以下两个步骤: 发送带有大文本的邮政请求,该请求生成令牌并将其保存到缓存中. 启动SSE连接并从内存中检索令牌. 这是处理SSE连接中大型参数的标准方法吗? 解决方案 您的方法是您必须做的. (或类似的内容,例如服务器端会话,并在会话中存储数据.) 这是因为SSE标准不允许使用POST. (另请参见我的回答,网址为 https://stackoverflow.com/a/34285526/8441830 )
我想设置一个node.js服务群,并在它们前面使用负载平衡器(由于某些原因无法使用粘性会话). 让我们成像我有两个节点,并且客户端(例如,浏览器,使用socket.io)发送wss://request,第一个节点从lb中获取,然后将其发送回客户端'http/1.1 101 Web插座协议握手'响应. 以后客户端和服务器会使用相同的TCP连接发送用于初始客户端请求的帧吗?或将建立新的TCP连接,可能会通过LB转发到第二个节点? 在使用socket.io的情况下,它可能仍会退缩,并在建立WebSocket连接以供性能之前通过HTTP发送长时间的轮询.这些投票请求最终可能会在不同的后端节点上吗? 解决方案 是的,WebSockets使用与HTTP握手期间使用的TCP/IP连接相同的TCP/IP连接. 是的,除非专门设置以避免这样做,否则可能会将长时间的轮询路由到不同的节点(我不建议这样做,因为它标志着体系结构中的缩放弱点).
正如标题所说,我如何在每个域限制的浏览器6个连接中获得6个连接? 我有一个Web应用程序,需要尽快从服务器下载数据.目前,我一次可以一次打开大约十二个连接,但是在"网络"选项卡中,我看到其中几个连接是stalled(chrome)或blocked(firefox)(灰色: ) 挖掘了一些挖掘后,我相信这是由于 Chrome的6个连接每个域限制.我该如何解决? 搜索了一些搜索后,我有理由相信其中一种选项可能会起作用,但是我想知道哪种选项是最好的(不是黑客): 使用多个子域(a.mysite.com,b.mysite.com等...)并将其指向主服务器,以使Chrome认为它们是不同的站点.在我看来,这听起来像是最"骇客"的选项,我不知道这实际上可以使用多长时间. 一些答案表明,HTTP2不受6个连接限制的限制,但是当我考虑使用http2 似乎是否似乎是在浏览器支持它,然后它将使用它.因此,我想这实际上没有用,因为我仍在Chrome的最新版本中收到stalle
iiuc,当我创建一个WebSocket时,将HTTP请求发送到指定的URL,其中包含升级请求.通过此升级请求传递身份验证信息是典型的,还是应该单独执行? var websocket = new WebSocket("ws://domain:port/foo"); // Can I include authentication headers with the initial upgrade HTTP request? 解决方案 您应该通过Web进行身份验证,返回cookie,然后再次连接到Websocket服务器,携带Cookie. WS服务器可以验证cookie 如果没有基于cookie的身份验证,或者只是不可能(例如另一个域中的WS服务器),则必须为登录创建自己的请求 - 响应消息. 其他解决方案 10.5. WebSocket客户端身份验证 此协议没有规定服务器可以 在Websocket握手期间对客户进行身份验证. Websocket 服务器
在我的网站上,我想创建一个公共API,该公共API允许客户(未知人员)与我的服务互动.在这种情况下,经典的REST API可以很好地工作. 但是,我也需要能够将事件发送给客户.这些事件与客户端HTTP请求无关.我看到" Webhooks"是一种处理此问题的方式.如果我对Webhooks了解很好,我的服务将将HTTP POST请求发送到客户指定的URL,并在此请求中使用事件数据. 我认为Websocket也可以用作解决全双工通信需求的解决方案. 我想知道的是,哪种方法是客户实施与我的服务交谈的最简单的方法?简单是这里的关键点. 很难的是我的客户可以使用各种技术(带有HTTP服务器的完整网站,没有服务器等的iOS/Android应用等) ) ) 如果我使用REST API + Webhooks,对客户的影响是什么? Websocket? ETC? 如何做出选择? 希望这很清楚(但不确定).谢谢:) 解决方案 我会认为Webhooks是一个更简单的解决
我想知道是否可以在2个Webervers之间而不是浏览器和后端之间使用Webocket? im运行2个Node.js服务器,并希望在它们之间交换数据. 解决方案 也许这对 https:https:https:https:https://github.com/learnboost/socket.io-node/tree/master/support/node-websocket-client 其他解决方案 尝试查看 node2node2node-socket.io 或=" https://github.com/remy/socket.io-node-client" rel =" noreferrer"> socket.io-node-client 模块.但是,我想说的是,如果您仅在Web服务器之间进行通信,则应使用纯插座的内置净模块.
stackoverflow使用其所有页面上的GZIP编码;由于它们的Websocket流量似乎是完全混淆的. 也是如此. 他们将如何/如何实现这一目标;相反,由于我的WebSocket服务器托管在其自己的独立服务器上,而没有IIS等,我需要做什么才能实现? ? 也值得注意的是,http compression http compression 完整的日志屏幕截图: http://i44.tinypic.com/19s4yr.jpg 解决方案 根据RFC6455,必须掩盖从客户端到服务器的WebSocket有效负载,必须掩盖服务器到客户端的服务器.掩模是通过Xorring有效载荷用32位掩码完成的.您在日志中看到的值. 烹饪中有一个WS扩展,可提供基于框架的压缩(放气).这与掩盖无关.带有每帧压缩活动的有效负载有效压缩有效负载,然后掩盖有效载荷(客户端到服务器). 其他解决方案 我认为这里没有任何gz gz.看来Fiddler已经开始增加对Webs
我正在尝试使用第三方服务器设置C#客户端的Websocket连接.当我将JS客户端连接到同一家服务器时,它会建立连接,并且一切顺利. C#客户端连接到服务器,但出于某些未知原因,服务器使用500代码响应. Wireshark进行调试表明,Websocket连接的HTTP握手阶段在一组标题中的客户端实现之间有所不同.我想调整标题默认System.Net.WebSockets.ClientWebSocket类发送到服务器以检查问题是否存在.不过,我找不到这样做的方法. 我如何指示该名称空间中其他某些类的其他类别以在握手阶段发送给定的标题? 解决方案 看起来这是由ClientWebSocketOptions.SetRequestHeader暴露的,所以: obj.Options.SetRequestHeader("foo", "bar"); 应该工作.这也提供了对AddSubProtocol(...). 的访问权限
有一些图书馆可以以一种不引人注目的方式实现Websocket用法.显然,有很多图书馆,但是我真正寻找的是一个现代化的小库,我可以在Generall的Android或Java上使用它来从客户端实现我的Websocket. 到目前为止我已经找到: androidasync 游戏框架 jax-rs 2.0 我错过了不同网络库的差异.例如 解决方案 我只是在Android中的第一个Web插座应用程序之一上工作.因此,我在开始之前做了很多研发,最后我发现这两个液体非常简单且对我的要求很有用. 1)androidasync(适用于客户) 2)java-websocket( https://github.com/tootallnate/java-websocket- >)对于服务器 两者都非常简单易用.
我遵循了许多教程和示例代码,但是我还没有看到一种访问客户端的HTTP标头,主机名等的方法,就像我们在Servlet的请求对象中所能一样. 我该如何处理? 假设我on open定义为 - @OnOpen public void onOpen(Session session) { } 在上面的方法中,有没有一种方法可以使用会话字段访问基础HTTP连接详细信息?即使我可以到达基础servlet(如果有的话) 我还可以 解决方案 请参阅第4.1.1.5章,其他解决方案 基于 link1 和 link2 我终于弄清楚我们可以使用以下两个类获取客户端IP,实际上您可以使用裸露的httpservletrequest做更多的事情... servletawareconfigurator .java package examples; import java.lang.reflect.Field; import javax.servlet.htt
WebSocket的设计方式以使其服务器可以通过握手成为有效的HTTP升级请求来与HTTP服务器共享端口. 有效. 我对这种设计理念有疑问. WebSocket协议是基于独立的TCP协议的任何方式. 为什么我们需要此HTTP握手(升级请求)和协议切换.相反,为什么我们不能直接(和独立地)按照websocket这样的诸如协议之类的网络? 解决方案 从 ietf 6455 Websocket Spec : The WebSocket Protocol attempts to address the goals of existing bidirectional HTTP technologies in the context of the existing HTTP infrastructure; as such, it is designed to work over HTTP ports 80 and 443 as well as to support HTT
我有一个使用WebSocket的工作聊天应用程序.我想更进一步,并在连接上启用加密,但是当我用https一个连接切换HTTP服务器时,我的连接开始失败. 我已经在所有网站上生成了一个自签名的证书(在同一TLD下,这意味着它是通配符证书).我可以确认它是有效的证书,因此问题不应该存在. 这是有效的(未加密) var webSocketServer = require('websocket').server; var http = require('http'); var server = http.createServer(function() {}); server.listen(webSocketsServerPort, function () { log("system", "Server is listening on port " + webSocketsServerPort); }); var wsServer = new webSocketSer
我的网站每个月都有数千次访问且其增长. 我正在向我的网络添加新功能. 现在我正在处理问题,我应该为所有功能使用一个WebSocket连接,还是应该为应用程序的每个交互式函数创建新的WebSocket连接? 我正在考虑性能问题.创建WebSocket意味着我必须在服务器上保存连接.但是一个用户的多个连接=如果我为每个功能创建新连接,我必须保存的连接量要大得多. RIHT的方法如何处理? 解决方案 我应该为所有功能使用一个Websocket连接还是应该 为我的每个交互函数创建新的WebSocket连接 应用程序? 您应该只有一个Websocket连接,没有理由使用多个Websocket. 根据我的个人经验: 最佳设计是使用REST API处理从客户端开始的操作,并仅将Websocket用于通知.使用休息将为您管理解析. 无论如何,如果您希望所有应用程序通过WebSocket协议进行通信,则可以通过套接字发送 之类 msg = {
这两个响应状态有什么区别: HTTP/1.1 101 Web Socket Protocol Handshake HTTP/1.1 101 Switching Protocols 我得到哪一个? 解决方案 没有任何区别.重要的是101响应代码,以表明握手正在进行中.这在 客户端的领先行遵循请求行格式. 服务器的领先行遵循状态线格式.请求行和状态行制作是在[RFC2616]中定义的. ... 服务器的握手比客户端握手要简单得多. 第一行是HTTP状态线,带有状态代码101: http/1.1 101切换协议 其他任何状态代码101以外的任何状态代码都表明Websocket握手尚未完成,并且HTTP的语义仍然适用. Status-Line的文本是任意的,服务器可以使用所需的任何文本,per RFC 2616 : status-line = http-version s s sp status code sp 推理 - crlf
当我阅读有关Websocket的信息时,通常将心跳提到必须有. MDN even writes about a special opcode for heartbeats . 但是心跳是Websocket的强制性部分吗? i 是否必须实现它,否则我的Websocket将被浏览器或其他标准终止吗? 解决方案 rfc 6455 ,Websocket协议的当前参考一些控制帧可以传达有关Websocket的状态: 关闭:0x8 ping:0x9 pong:0xA ping和pong用于 heartbeat ,可让您检查客户端是否仍然响应.参见 Quote 下面: ping框架可以用作存储剂,也可以作为一种手段 验证远程端点仍然响应. 但是,当客户端获得PING时,必须将两个发送回服务器.请参阅 Quote : 收到ping框架后,端点必须在 响应,除非它已经收到了一个近距离.它应该 用乒乓球框架做出实际响应. 底线 设计 客户端和服务器
我了解: 端口在服务器上指定程序. 当我们说to share a port时,它实际上是指to have the requests processed by the same program listening on that port. Websocket握手resembles HTTP格式,因此可以通过处理HTTP协议的服务器程序来理解can.因此,可以将握手请求发送到port 80. 但是after the handshake,WebSocket数据格式与HTTP格式完全不同,如何仍将其发送到端口80?例如通过以下网址: ws://somehost:80/chat 它如何工作? 我的猜测: 是否可以看到HTTP程序请参见端口80 cannot be handled as HTTP上的传入请求,然后将其传递给WebSocket程序进行处理.如果是这样,如果还有其他一些可以共享端口80的协议,例如WebSocket2,HTTP程序如何知道如果
好吧,所以我只是尝试了HTML 5中的新Websocket类,并且非常兴奋地存在.但是,我看不到它们比Ajax看到的是如何发起HTTP调用,而不是像传统插座一样 .这就是为什么我在这里问. HTML 5's WebSocket类有办法连接到听力插座而不发送HTTP数据吗?当前使用TCP/IP构建器,它显示了我不想要的所有这些标头垃圾(因为我想连接到POP3/IMAP服务器,而无需诸如Flash Bridges或Comet之类的东西). 可能? 连接输出: Listening for connections...Connected GET / HTTP/1.1 Upgrade: WebSocket Connection: Upgrade Host: localhost:666 Origin: null Sec-WebSocket-Key1: 2 987_390VNw60yi9 Sec-WebSocket-Key2: ~196 Y p 5 P67 428