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

2023-05-06 21:43:16 +08:00
 nnegier

我用 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

1185 次点击
所在节点    程序员
9 条回复
Kumo31
2023-05-06 21:48:51 +08:00
546L5LiK6ZOt
2023-05-06 21:50:16 +08:00
Kumo31
2023-05-06 21:53:01 +08:00
@Kumo31 刚刚没看清楚问题... 你的这些 Header 都是自定义的,不是标准的一部分,每个反向代理或 API 网关都有可能自己定义一个不同的 Header 用来表示真实 IP ,所以得看你的具体场景来判断...
v2eb
2023-05-06 21:54:37 +08:00
请求被 nginx 转发时, 可能会添加请求头 x-real-ip 这种, nginx 没配置的话就没有了
其他几个请求头同理
aru
2023-05-06 21:54:58 +08:00
不要随便相信 header 里面附带的 IP 变量!!!
很多网站的 ip 限制就是被这种方式给骗过去的。
mikewang
2023-05-06 22:01:28 +08:00
0. 目前来说,ChatGPT 生成的代码质量很低,不能直接用;
1. WL-Proxy-Client-IP 这类 header 是网关或者 CDN 自己定义的,需要查它们的文档,没有汇总;
2. 这种代码是有隐患的,客户端通过伪造这些 header ,可以欺骗你的程序。参考中科大测速被 XSS 的事件: /t/889220
yinmin
2023-05-06 23:01:46 +08:00
如果你是使用 nginx 前置部署的话,建议自定义一个 header 私有名称,避免被欺骗。
nnegier
2023-05-06 23:04:30 +08:00
@546L5LiK6ZOt 那里面的内容和我文中的链接里的一样一样的
nnegier
2023-05-06 23:06:31 +08:00
@ aru
@ mikewang
@ yinmin
感谢提醒呀

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

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

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

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

© 2021 V2EX