HTML SSE请求正文

HTML SSE request body

本文关键字:正文 请求 SSE HTML      更新时间:2023-09-26

当在JavaScript中使用EventSource API时,是否有任何方法可以发送请求体以及发起轮询的HTTP请求?

我需要在SSE请求时向服务器发送大量JSON,以便服务器可以计算要向客户端发送哪些事件。当我不需要它的时候,做web-sockets似乎很愚蠢,或者用cookie或多个请求做奇怪的事情。

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

提前感谢!

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

  • 考虑到SSE仅被现代浏览器支持,最大URL长度不应该被假设为"旧浏览器"的旧255字节。大多数现代浏览器都允许更长的url, IE提供的最低上限约为2k。(假定IE不支持EventSource,但有一个XHR polyfill…)但是,如果大blob指的是几千字节,那么URL就不可靠。代理也可能导致潜在的问题。

看:不同浏览器中URL的最大长度是多少?,在android的WebView中,url的长度有限制吗?loadUrl功能?,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请求的body。参见HTTP GET与请求体。EventSource构造函数只接受一个URL,所以不直接支持。

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