HTML SSE 请求正文

Aid*_*ell 10 html javascript websocket server-sent-events

在 JavaScript 中使用 EventSource API 时,有没有办法将请求正文与发起轮询的 HTTP 请求一起发送?

我需要在 SSE 请求时向服务器发送大量 JSON,以便服务器可以计算要发送给客户端的事件。当我不需要它时使用网络套接字或者使用 cookie 或多个请求做奇怪的事情似乎很愚蠢。

我担心如果我将数据捆绑到查询字符串中,我会遇到查询字符串的长度限制,这可能是。

提前致谢!

Jas*_*n S 7

初始 SSE 请求是一个相当普通的 HTTP GET 请求,因此:

  • 鉴于 SSE 仅受现代浏览器支持,因此不应将最大 URL 长度假定为“对于旧浏览器”的旧 255 字节。大多数现代浏览器允许更长的 URL,IE 提供的最低上限为 ~2k。(无论如何,EventSource 在 IE 上不受支持,但有一个 XHR polyfill...)但是,如果您所说的大 blob 指的是几千字节,则 URL 不可靠。代理也可能会导致问题。

请参阅: 不同浏览器中 URL 的最大长度是多少?, Android的WebView.loadUrl方法对Url的长度有限制吗?http://www.benzado.com/blog/post/28/iphone-openurl-limit

  • 您还可以将信息存储在一个或多个 cookie 中,这些信息将与 GET 请求一起发送。这可能包括您在使用 SSE 的页面请求中设置的 cookie,或者您在 javascript 中设置的 cookie(在创建EventSource对象之前)。cookie 的最大大小被指定为至少 4096 字节(这是整个 cookie,因此对于实际数据部分来说要小一些),每个主机名至少支持 20 个 cookie。经验测试似乎证实了这一点:http://browsercookielimits.x64.me/最坏的情况下,您可能会将信息分块到多个 cookie 中。

  • 比这个大,我认为您需要一个初始请求来上传 JSON 并发送回 SSE 请求引用的 ID。

  • 在技​​术上是可行的,但(强烈)不鼓励使用 GET 请求发送正文。请参阅带有请求正文的 HTTP GET。EventSource 构造函数仅接受 URL,因此不直接支持这一点。

  • 正如 dandavis 指出的,您可以压缩 JSON。