Navigator.sendBeacon() 数据大小限制
Navigator.sendBeacon() data size limits
我想使用全新的信标 api。我在网上搜索但找不到数据发送数据的大小限制是多少。
在参考文献中,它是针对少量数据编写的,但我必须知道有多少...
最大大小(如果设置)将取决于用户代理(浏览器或其他)。
见http://www.w3.org/TR/beacon/#sec-sendBeacon-method
您可以通过创建可变长度 N
的字符串(从 N
的任意高值开始,以及使用二进制搜索),并检查 sendBeacon
的 return 值(根据规范,当超过用户代理数据限制时,sendBeacon
returns false
) .
比如我用这个方法确认在Chrome 40 on Windows 7 limit是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
var data = new Array(n+1).join('X'); // generate string of length n
if(!navigator.sendBeacon(url, data))
{
alert('data limit reached');
}
回答:
简而言之,sendBeacon()
请求队列的总字节大小以及单个 sendBeacon()
请求的有效负载大小都有限制。
正如在 nothingisnecessary's answer, the W3C spec 中提到的那样:
The user agent MUST initiate a fetch with keepalive flag set, which restricts the amount of data that can be queued by such requests to ensure that beacon requests are able to complete quickly and in a timely manner.
这仍然保留了每个实现的实际字节大小限制,目前大多数浏览器通常为 64KB。
同样在一个相关的GitHub问题Enforce payload limits via Fetch API #39中,提到传输中有效载荷的字节大小被计算并且有类似的限制。您可以查看 Chromium 的测试文件,看看 64KB 是 Chromium 的限制,并且与您指出的完全相同的行为(超过限制后的后续请求)是合适的。
我想使用全新的信标 api。我在网上搜索但找不到数据发送数据的大小限制是多少。 在参考文献中,它是针对少量数据编写的,但我必须知道有多少...
最大大小(如果设置)将取决于用户代理(浏览器或其他)。
见http://www.w3.org/TR/beacon/#sec-sendBeacon-method
您可以通过创建可变长度 N
的字符串(从 N
的任意高值开始,以及使用二进制搜索),并检查 sendBeacon
的 return 值(根据规范,当超过用户代理数据限制时,sendBeacon
returns false
) .
比如我用这个方法确认在Chrome 40 on Windows 7 limit是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
var data = new Array(n+1).join('X'); // generate string of length n
if(!navigator.sendBeacon(url, data))
{
alert('data limit reached');
}
回答
简而言之,sendBeacon()
请求队列的总字节大小以及单个 sendBeacon()
请求的有效负载大小都有限制。
正如在 nothingisnecessary's answer, the W3C spec 中提到的那样:
The user agent MUST initiate a fetch with keepalive flag set, which restricts the amount of data that can be queued by such requests to ensure that beacon requests are able to complete quickly and in a timely manner.
这仍然保留了每个实现的实际字节大小限制,目前大多数浏览器通常为 64KB。
同样在一个相关的GitHub问题Enforce payload limits via Fetch API #39中,提到传输中有效载荷的字节大小被计算并且有类似的限制。您可以查看 Chromium 的测试文件,看看 64KB 是 Chromium 的限制,并且与您指出的完全相同的行为(超过限制后的后续请求)是合适的。