V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
nnegier
V2EX  ›  程序员

请问哪里可以看到最全的 HTTP Header 的说明呀?

  •  
  •   nnegier · 2023-05-06 21:43:16 +08:00 · 1163 次点击
    这是一个创建于 568 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我用 ChatGPT 问了一个获取客户端 IP 的代码,不太敢用,我得查一下:

    public String getClientIP(HttpServletRequest request) {
        String ip = request.getHeader("X-Real-IP");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            //经过如负载均衡后的请求 header 会添加此请求头来标识源客户端的 IP 地址,如果不这样弄的话,那拿到负载均衡机器的 IP 地址并没有什么用的。
            ip = request.getHeader("X-Forwarded-For");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        return ip;
    }
    

    这是我发现的网站: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers ,但像代码中的大部分 Header 查不到,我就只查到一个 X-Forwarded-For

    Kumo31
        1
    Kumo31  
       2023-05-06 21:48:51 +08:00
    546L5LiK6ZOt
        2
    546L5LiK6ZOt  
       2023-05-06 21:50:16 +08:00
    Kumo31
        3
    Kumo31  
       2023-05-06 21:53:01 +08:00
    @Kumo31 刚刚没看清楚问题... 你的这些 Header 都是自定义的,不是标准的一部分,每个反向代理或 API 网关都有可能自己定义一个不同的 Header 用来表示真实 IP ,所以得看你的具体场景来判断...
    v2eb
        4
    v2eb  
       2023-05-06 21:54:37 +08:00
    请求被 nginx 转发时, 可能会添加请求头 x-real-ip 这种, nginx 没配置的话就没有了
    其他几个请求头同理
    aru
        5
    aru  
       2023-05-06 21:54:58 +08:00
    不要随便相信 header 里面附带的 IP 变量!!!
    很多网站的 ip 限制就是被这种方式给骗过去的。
    mikewang
        6
    mikewang  
       2023-05-06 22:01:28 +08:00
    0. 目前来说,ChatGPT 生成的代码质量很低,不能直接用;
    1. WL-Proxy-Client-IP 这类 header 是网关或者 CDN 自己定义的,需要查它们的文档,没有汇总;
    2. 这种代码是有隐患的,客户端通过伪造这些 header ,可以欺骗你的程序。参考中科大测速被 XSS 的事件: /t/889220
    yinmin
        7
    yinmin  
       2023-05-06 23:01:46 +08:00 via iPhone
    如果你是使用 nginx 前置部署的话,建议自定义一个 header 私有名称,避免被欺骗。
    nnegier
        8
    nnegier  
    OP
       2023-05-06 23:04:30 +08:00
    @546L5LiK6ZOt 那里面的内容和我文中的链接里的一样一样的
    nnegier
        9
    nnegier  
    OP
       2023-05-06 23:06:31 +08:00
    @ aru
    @ mikewang
    @ yinmin
    感谢提醒呀
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3171 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 13:38 · PVG 21:38 · LAX 05:38 · JFK 08:38
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.