【问题标题】:WebSocket and CGI/FastCGI/SCGI protocolsWebSocket 和 CGI​​/FastCGI/SCGI 协议
【发布时间】:2011-03-14 10:56:33
【问题描述】:

我正在寻找有关在 CGI、FastCGI 或 SCGI 协议后面工作的客户端 Web 套接字、Web 服务器和实际应用程序后端之间交互的资源。

目前看来这是不可能的:

请求长度是在CONTENT_LENGTH 变量中专门定义的,所以我不能指望 数据将继续来自标准输入的网络服务器,或者我可以吗?如未设置 CONTENT_LEGTH 定义无请求正文。

应用程序不再需要读取CONTENT_LEGTH 字节的日期,如果读取的更少,则认为它是断开连接的客户端。

  • 是否有任何关于 (F|C)CGI 如何更新或如何与 WebSockets 一起使用的资源?
  • 是否有任何支持 WebSockets 的 SCGI/FCGI/CGI 规范草案?
  • 是否有任何已知的支持 WebSockets 的 Web 服务器?
  • 如果支持,它们是否支持 *CGI 协议?
  • 您有使用 WebSockets 和 *CGI 的经验吗?

谢谢,所有信息都是合适的。

阿尔乔姆

有人吗?

【问题讨论】:

标签: cgi comet fastcgi websocket scgi


【解决方案1】:

您可以找到用于 lighttpd here 的 mod_websocket 模块。构建模块时,请务必指定要使用的正确 websocket 协议版本(版本 -75 或 -76)。从 WebKit nightly build r59903 和 Chrome 6.0.414.0 (r47952) 开始,仅支持协议版本 -76。

请注意,使用 WebSockets,您不再需要 CGI、FastCGI 或 SCGI 协议来连接 Web 服务器和应用程序后端。只需在您的应用程序中实现一个 TCP 侦听器(用于连接 mod_websocket)并使用该套接字进行异步 I/O。

【讨论】:

  • 有趣,但据我所知,它不会将任何 HTTP 标头数据(如 cookie 等)传递到后端。那么我应该如何管理会话呢?我需要明确发送此类数据,而不是从 Web 服务器获取。
  • 您的 websocket 连接是在您的 HTTP 会话的上下文中创建的,您不必关心这些。除此之外,HTTP 和 websocket 当然是完全不同的协议,因此在您的 websocket 连接中,您无权访问 HTTP 标头。请记住,websocket 协议仅在 TCP 之上提供最小框架,因此应用程序后端和 web 客户端之间在 websocket 连接之上的任何特定于应用程序的数据交换您必须自己定义和实现,就像您一样会使用常规套接字来做到这一点。
  • 只是为了记录,AFAIK HTTP Headers 需要几个原因:知道会话数据,知道访问的 URL,知道远程主机的 IP 等等等等。所以 websocket 远非只是一个插座。
  • 呃.. websocket握手完成后,真的很像普通的sockets。即使是乔·阿姆斯特朗(Erlang 的名气)也这么说:) armstrongonsoftware.blogspot.com/2009/12/…
  • 握手之后,是的。但是握手本身是一个有效的 HTTP 请求,并且应该不受干扰地到达 WebSocket 服务器。RFC 6455link 说客户端可以发送其他标头,例如 cookie 或与身份验证相关的标头。你是对的,你在使用 WebSocket 时不需要 SCGI 或 FCGI,你应该在你的应用程序中使用 WebSocket。如果某物在两者之间充当代理,则取决于代理如何转发原始客户端地址。它可能存储在“X-Forwarded-For”标头中。
猜你喜欢
  • 2011-10-11
  • 2011-08-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-26
  • 1970-01-01
  • 2014-09-06
  • 2013-12-21
相关资源
最近更新 更多