javascript - HTML SSE 请求正文

标签 javascript html websocket server-sent-events

在 JavaScript 中使用 EventSource API 时,有什么方法可以将请求正文与发起轮询的 HTTP 请求一起发送吗?

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

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

提前致谢!

最佳答案

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

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

参见: What is the maximum length of a URL in different browsers? , Is there any limitation on Url's length in Android's WebView.loadUrl method? , http://www.benzado.com/blog/post/28/iphone-openurl-limit

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

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

  • 发送带有 GET 请求的正文在技术上是可行的,但(强烈)不建议这样做。参见 HTTP GET with request body . EventSource 构造函数只接受一个 URL,因此不直接支持它。

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

关于javascript - HTML SSE 请求正文,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25099548/

相关文章:

java - 本地主机上的 Apache Tomcat websockets 实现

c# - .NET Core 是否支持 Web 套接字?抛出“System.Net.WebSockets.WebSocketException 异常

javascript - 如何编写随机属性颜色的函数

javascript - 如何通过 javaScript 扩展语法为对象分配一些键

jquery - 强制 YouTube 视频在 Fancybox 中播放高清

javascript - 很酷的网页风格,用最少的努力

sockets - 如何检测字符串以UTF-8序列的中间结尾?

javascript - 如何删除或隐藏 bootstrap 3 slider 的分页?

javascript 返回 404 错误和未捕获的引用

python - 如何解决django中属性错误的问题?