我想使用相当新的beacon api。我在网上搜索但我无法找到数据,发送数据的大小限制是多少。 在参考文献中它写了它的意思是少量的数据,但我必须知道有多少...
答案 0 :(得分:8)
最大大小(如果已设置)将取决于用户代理(浏览器或其他)。
请参阅http://www.w3.org/TR/beacon/#sec-sendBeacon-method
您可以通过创建可变长度data
的字符串(从N
的任意高值开始,并使用二进制文件)轻松地为网页中的N
大小限制创建测试搜索),并检查sendBeacon
的返回值(根据规范,sendBeacon
在超出用户代理数据限制时返回false
。
例如,我使用此方法确认在Windows 7的Chrome 40中,限制为65536
(2^16
)。
示例代码(没有n
的二进制搜索):
var url = 'http://jsfiddle.net?sendbeacon';
var n = 65536; // sendBeacon limit for Chrome v40 on Windows (2^16)
// this method courtesy of http://stackoverflow.com/questions/14343844/create-a-string-of-variable-length-filled-with-a-repeated-character
var data = new Array(n+1).join('X'); // generate string of length n
if(!navigator.sendBeacon(url, data))
{
alert('data limit reached');
}
答案 1 :(得分:1)
简而言之,sendBeacon()
请求队列的总字节大小以及单个sendBeacon()
请求的有效负载大小都有限制。
正如nothingisnecessary的回答中提到的,W3C spec说:
用户代理必须在设置了keepalive标志的情况下启动提取,这限制了这些请求可以排队的数据量,以确保信标请求能够快速,及时地完成。
这仍然保留了每个实现的实际字节大小限制,目前大多数浏览器通常为64KB。
同样在相关的GitHub问题Enforce payload limits via Fetch API #39中,提到传输中的有效负载的字节大小已计数并具有类似的限制。您可以查看Chromium的测试文件,看看64KB是Chromium的限制,并且与您指出的完全相同的行为(超出限制后的后续请求)是合适的。