URL 的参数,长度最大的限制是多少?

2022-06-07 10:56:32 +08:00
 yazoox

维护的老产品,现在在用 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;
}
3323 次点击
所在节点    JavaScript
16 条回复
Torpedo
2022-06-07 11:01:26 +08:00
一般看服务端的配置。我记得 ng 默认是 2kb 还是多少
lisongeee
2022-06-07 11:05:49 +08:00
可以只传一个 object_id ,然后使用 js_bridge 向 native 获取数据
liangch
2022-06-07 11:06:54 +08:00
有这个时间,试一下不就知道了。
Nich0la5
2022-06-07 11:09:15 +08:00
这个没有一个固定的规范,ie 是只有 2000 多,chrome 和 firefox 很长 好像是 65535 ,但是中间的 nginx 啥的也可能给你截断,
所以正经人谁用 url 传 json 啊
lisongeee
2022-06-07 11:10:19 +08:00
query 参数会发送服务器,hash 参数不会,如果数据是单纯传递给页面而不是服务器,那还是用 hash 比较好,最大长度和浏览器有关系,你可以自己手动构造 url 然后用 window.open 测试,json 可以定义字段映射后压缩属性名,不过要传递大量数据建议还是使用 js_bridge
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 长度的限制不是定值
Jooooooooo
2022-06-07 11:43:58 +08:00
别在 url 放那么大的东西

你需要的是把这些放到 post 请求的 body 里面去
lolizeppelin
2022-06-07 11:46:03 +08:00
http 服务端的 max head length 是一种简化处理方式
因为 http 包的长度在 http 头里,在读取完 http 头前没法判断总长度
为了避免无限制的读取 http 头,直接设置 max head 长度
yazoox
2022-06-07 11:53:16 +08:00
@lisongeee
"query 参数会发送服务器,hash 参数不会,如果数据是单纯传递给页面而不是服务器,那还是用 hash 比较好"
这段不是很明白,能多说一点么?谢谢
IvanLi127
2022-06-07 12:09:53 +08:00
这种看实现的限制,楼主你只能手动测了。。。
huangmingyou
2022-06-07 12:29:28 +08:00
翻 rfc
aaronlam
2022-06-07 13:14:33 +08:00
@yazoox 你可以发现在浏览器里输入某个网页 URL ,并且 URL 形如 https://www.example.com/test#12345 的话,最终请求服务器只会以这样去进行请求 https://www.example.com/test ,而 # 符号后面的东东,只有浏览器能拿到。
yazoox
2022-06-07 15:21:24 +08:00
@aaronlam 哦~ 这个有点意思,以前不知道。我研究一下
thx
xyjincan
2022-06-08 08:50:48 +08:00
看谷歌翻译的参数,最大 5000 字符
microxiaoxiao
2022-06-08 09:37:45 +08:00
http 标准不做限制,浏览器和服务器本身做限制,主流的软件范围为 2k-64k 之间,浏览器像 chrome 等应该是 2k ,服务器 nginx 是 4k ,所以你的参数小于 2k-其他的字段就行。不然就别搞,兼容性不好
DOLLOR
2022-06-08 10:33:25 +08:00
可以考虑把?改成#,这样#后面的字符串不会被提交到服务器上,也就不用担心长度限制。
前端页面加载完后,可以拿到#后面的字符串用 JS 解析,再由 JS 用 POST 方式提交到服务器上。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/857823

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX