推荐关注
› Meteor
› JSLint - a JavaScript code quality tool
› jsFiddle
› D3.js
› WebStorm
推荐书目
› JavaScript 权威指南第 5 版
› Closure: The Definitive Guide
yazoox

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

  •  
  •   yazoox · Jun 7, 2022 · 4676 views
    This topic created in 1620 days ago, the information mentioned may be changed or developed.

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

    服务端 http 读取头部有个默认的 max head length 长度, 这个值设定第一次 socket read 的最大长度
    如果发送的 http 头长度头超过这个值,那么服务端读取的时候会发现 http 头没完结,http 协议无法解析,直接终止

    每个服务端的的 max head length 都是可设置的,默认值不一定一样

    参数是 url 的一部分, url 和 headers 数据都在 http 头里,所以 http 长度的限制不是定值
    Jooooooooo
    Jooooooooo
    Jun 7, 2022
    7
    别在 url 放那么大的东西

    你需要的是把这些放到 post 请求的 body 里面去
    lolizeppelin
    lolizeppelin
    Jun 7, 2022
    8
    http 服务端的 max head length 是一种简化处理方式
    因为 http 包的长度在 http 头里,在读取完 http 头前没法判断总长度
    为了避免无限制的读取 http 头,直接设置 max head 长度
    yazoox
    yazoox
    OP
    Jun 7, 2022
    9
    @lisongeee
    "query 参数会发送服务器,hash 参数不会,如果数据是单纯传递给页面而不是服务器,那还是用 hash 比较好"
    这段不是很明白,能多说一点么?谢谢
    IvanLi127
    IvanLi127
    Jun 7, 2022 via Android
    10
    这种看实现的限制,楼主你只能手动测了。。。
    huangmingyou
    huangmingyou
    Jun 7, 2022
    11
    翻 rfc
    aaronlam
    aaronlam
    Jun 7, 2022
    12
    @yazoox 你可以发现在浏览器里输入某个网页 URL ,并且 URL 形如 https://www.example.com/test#12345 的话,最终请求服务器只会以这样去进行请求 https://www.example.com/test ,而 # 符号后面的东东,只有浏览器能拿到。
    yazoox
    yazoox
    OP
    Jun 7, 2022
    13
    @aaronlam 哦~ 这个有点意思,以前不知道。我研究一下
    thx
    xyjincan
    xyjincan
    Jun 8, 2022 via Android
    14
    看谷歌翻译的参数,最大 5000 字符
    microxiaoxiao
    microxiaoxiao
    Jun 8, 2022 via Android
    15
    http 标准不做限制,浏览器和服务器本身做限制,主流的软件范围为 2k-64k 之间,浏览器像 chrome 等应该是 2k ,服务器 nginx 是 4k ,所以你的参数小于 2k-其他的字段就行。不然就别搞,兼容性不好
    AV1
    AV1
    Jun 8, 2022
    16
    可以考虑把?改成#,这样#后面的字符串不会被提交到服务器上,也就不用担心长度限制。
    前端页面加载完后,可以拿到#后面的字符串用 JS 解析,再由 JS 用 POST 方式提交到服务器上。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   2159 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 52ms · UTC 12:36 · PVG 20:36 · LAX 04:36 · JFK 07:36
    ♥ Do have faith in what you're doing.