一尘不染

服务器发送事件通过post方法传递参数

json

我正在使用Html5服务器发送事件。服务器端是Java Servlet。我有一个要传递给服务器的json数组数据。

var source = new EventSource("../GetPointVal?id=100&jsondata=" + JSON.stringify(data));

如果数组大小较小,则服务器端可以获取查询字符串。但是,如果数组大小很大。(可能超过数千个字符),服务器无法获取查询字符串。是否可以使用POST方法new EventSource(...)将json数组传递到服务器,从而避免了查询字符串长度的限制?


阅读 216

收藏
2020-07-27

共1个答案

一尘不染

不可以,SSE标准不允许POST。

(出于技术原因,据我所知-我认为只是设计人员从未见过用例:不仅是大数据,而且如果要执行自定义身份验证方案,则有安全原因,不要将密码放入GET数据中。)

XMLHttpRequest(即AJAX)确实允许POST,因此一种选择是返回到较早的长轮询/彗星方法。(我的书《带有HTML5
SSE的数据推送应用程序》
详细介绍了如何执行此操作。)

另一种方法是POST预先处理所有数据,并将其存储在中HttpSession,然后调用SSE流程,该流程可以利用该会话数据。(SSE确实支持cookie,因此JSESSIONIDcookie应该可以正常工作。)

PS该标准没有明确规定不能使用POST。但是与众不同的XMLHttpRequest是,没有参数指定要使用的http方法,也没有方法指定要发布的数据。

2020-07-27