URL 的参数,长度最大的限制是多少? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐关注
Meteor
JSLint - a Javascript code quality tool
jsFiddle
D3.js
WebStorm
推荐书目
Javascript 权威指南第 5 版
Closure: The Definitive Guide
yazoox
V2EX    Javascript

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

  •  
  •   yazoox 2022-06-07 10:56:32 +08:00 4007 次点击
    这是一个创建于 1296 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    你需要的是把这些放到 post 请求的 body 里面去
    lolizeppelin
        8
    lolizeppelin  
       2022-06-07 11:46:03 +08:00
    http 服务端的 max head length 是一种简化处理方式
    因为 http 包的长度在 http 头里,在读取完 http 头前没法判断总长度
    为了避免无限制的读取 http 头,直接设置 max head 长度
    yazoox
        9
    yazoox  
    OP
       2022-06-07 11:53:16 +08:00
    @lisongeee
    "query 参数会发送服务器,hash 参数不会,如果数据是单纯传递给页面而不是服务器,那还是用 hash 比较好"
    这段不是很明白,能多说一点么?谢谢
    IvanLi127
        10
    IvanLi127  
       2022-06-07 12:09:53 +08:00 via Android
    这种看实现的限制,楼主你只能手动测了。。。
    huangmingyou
        11
    huangmingyou  
       2022-06-07 12:29:28 +08:00
    翻 rfc
    aaronlam
        12
    aaronlam  
       2022-06-07 13:14:33 +08:00
    @yazoox 你可以发现在浏览器里输入某个网页 URL ,并且 URL 形如 https://www.example.com/test#12345 的话,最终请求服务器只会以这样去进行请求 https://www.example.com/test ,而 # 符号后面的东东,只有浏览器能拿到。
    yazoox
        13
    yazoox  
    OP
       2022-06-07 15:21:24 +08:00
    @aaronlam 哦~ 这个有点意思,以前不知道。我研究一下
    thx
    xyjincan
        14
    xyjincan  
       2022-06-08 08:50:48 +08:00 via Android
    看谷歌翻译的参数,最大 5000 字符
    microxiaoxiao
        15
    microxiaoxiao  
       2022-06-08 09:37:45 +08:00 via Android
    http 标准不做限制,浏览器和服务器本身做限制,主流的软件范围为 2k-64k 之间,浏览器像 chrome 等应该是 2k ,服务器 nginx 是 4k ,所以你的参数小于 2k-其他的字段就行。不然就别搞,兼容性不好
    AV1
        16
    AV1  
       2022-06-08 10:33:25 +08:00
    可以考虑把?改成#,这样#后面的字符串不会被提交到服务器上,也就不用担心长度限制。
    前端页面加载完后,可以拿到#后面的字符串用 JS 解析,再由 JS 用 POST 方式提交到服务器上。
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1532 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 40ms UTC 16:35 PVG 00:35 LAX 08:35 JFK 11:35
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86