维护的老产品,现在在用 CEF 调用 webview 来展示新开发的界面。所以,参数都是通过 url params 传递进来的。例如,http://localhost:8080/index.html?name=1111&type=V2&data=xxx
这里的 data ,我想传一个 serailized 的 json 格式的数据,但是这样的话,我担心,如果数据太大,会不会超过 url 的参数长度限制? google 了一下,发现各种说法都有,有的说是 2000 多,有的说没有限制...
p.s.
json 格式的数据结构大概如下。目前根据已知的数据,一次性传递这个数据,大概最多可能有小几百条。或者有没有比较好用的 serialize/deserialize ,同时能够压缩数据的方法?
interface TFile {
name: string;
size: string;
path: string;
}
1
Torpedo 2022-06-07 11:01:26 +08:00
一般看服务端的配置。我记得 ng 默认是 2kb 还是多少
|
2
lisongeee 2022-06-07 11:05:49 +08:00
可以只传一个 object_id ,然后使用 js_bridge 向 native 获取数据
|
3
liangch 2022-06-07 11:06:54 +08:00
有这个时间,试一下不就知道了。
|
4
Nich0la5 2022-06-07 11:09:15 +08:00
这个没有一个固定的规范,ie 是只有 2000 多,chrome 和 firefox 很长 好像是 65535 ,但是中间的 nginx 啥的也可能给你截断,
所以正经人谁用 url 传 json 啊 |
5
lisongeee 2022-06-07 11:10:19 +08:00 1
query 参数会发送服务器,hash 参数不会,如果数据是单纯传递给页面而不是服务器,那还是用 hash 比较好,最大长度和浏览器有关系,你可以自己手动构造 url 然后用 window.open 测试,json 可以定义字段映射后压缩属性名,不过要传递大量数据建议还是使用 js_bridge
|
6
lolizeppelin 2022-06-07 11:40:46 +08:00
自己写过看过 http 服务源码就知道了
服务端 http 读取头部有个默认的 max head length 长度, 这个值设定第一次 socket read 的最大长度 如果发送的 http 头长度头超过这个值,那么服务端读取的时候会发现 http 头没完结,http 协议无法解析,直接终止 每个服务端的的 max head length 都是可设置的,默认值不一定一样 参数是 url 的一部分, url 和 headers 数据都在 http 头里,所以 http 长度的限制不是定值 |
7
Jooooooooo 2022-06-07 11:43:58 +08:00
别在 url 放那么大的东西
你需要的是把这些放到 post 请求的 body 里面去 |
8
lolizeppelin 2022-06-07 11:46:03 +08:00
http 服务端的 max head length 是一种简化处理方式
因为 http 包的长度在 http 头里,在读取完 http 头前没法判断总长度 为了避免无限制的读取 http 头,直接设置 max head 长度 |
9
yazoox OP |
10
IvanLi127 2022-06-07 12:09:53 +08:00 via Android
这种看实现的限制,楼主你只能手动测了。。。
|
11
huangmingyou 2022-06-07 12:29:28 +08:00
翻 rfc
|
12
aaronlam 2022-06-07 13:14:33 +08:00
@yazoox 你可以发现在浏览器里输入某个网页 URL ,并且 URL 形如 https://www.example.com/test#12345 的话,最终请求服务器只会以这样去进行请求 https://www.example.com/test ,而 # 符号后面的东东,只有浏览器能拿到。
|
14
xyjincan 2022-06-08 08:50:48 +08:00 via Android
看谷歌翻译的参数,最大 5000 字符
|
15
microxiaoxiao 2022-06-08 09:37:45 +08:00 via Android
http 标准不做限制,浏览器和服务器本身做限制,主流的软件范围为 2k-64k 之间,浏览器像 chrome 等应该是 2k ,服务器 nginx 是 4k ,所以你的参数小于 2k-其他的字段就行。不然就别搞,兼容性不好
|
16
DOLLOR 2022-06-08 10:33:25 +08:00
可以考虑把?改成#,这样#后面的字符串不会被提交到服务器上,也就不用担心长度限制。
前端页面加载完后,可以拿到#后面的字符串用 JS 解析,再由 JS 用 POST 方式提交到服务器上。 |