
代码如下:
for k, value := range MetaMap { k = "Meta-" + k header.Set(k, value) } 其中 header ==> http.Header{}, MetaMap ==> map[string]string 且只有一个键值对: Password: admin123 ,但是 Debug 发现 header 中却是 Meta_password ,而不是 Meta-Password 。有人遇到过这种问题吗
Debug 是在远程主机上运行的,本地和远端代码一模一样,本地通过 git push 到 GitHub ,远端直接 git pull ,且两端的编译命令相同,go 版本相同。本地却没有这样的问题。
1 learningman 2022-11-26 16:10:41 +08:00 via Android 你远端是不是套网关了 |
2 yaott2020 OP @learningman 没有,两端的配置文件一模一样,请求地址也一样,都是 Cloudflare ,而且情况是发生在发生请求前。应该和网关无关 |
3 learningman 2022-11-26 16:13:36 +08:00 via Android 既然是 cf ,那可以看下 cf 的 trace 吧,看看 cf 传的是啥 |
4 yaott2020 OP 源站用 nginx ,根据 nginx"特性",默认会把 header 中含有"_"过滤掉,造成后端收不到含有"_"的 header 字段信息 |
5 yaott2020 OP @learningman cf 不会有问题的,有问题的话本地应该也请求失败才对 |
6 iamzuoxinyu 2022-11-26 16:16:42 +08:00 via Android 浏览器上看的头吗?有可能浏览器显示的是这样,实际上传输的就是小写和下划线。 |
7 yaott2020 OP @iamzuoxinyu 我这个是客户端请求,没有使用浏览器,请求前看了 request 里的 header ,就是有问题的 |
8 rozbo 2022-11-26 16:39:17 +08:00 这种 header 不规范,可能因为 nginx 的版本导致各种意想不到的差异,规范的做法是 X-USERNAME 。(虽然这个规范后来被废弃了,但是实际场景中还是有很多问题) |
9 yaott2020 OP @rozbo header 确实没有一个统一强有力的规范,首字母大小写的规范不一样,每段首字母大小写的规范也不一样,甚至用横杠 /下划线分隔多段的规范也不一样。 |
10 horsley 2022-11-28 08:45:02 +08:00 header.set 会经过 mime 标准化,就是会换成横杠的,不想被转换要用 header[k] = []string{v} 文档其实说的很清楚的 Set sets the header entries associated with key to the single element value. It replaces any existing values associated with key. The key is case insensitive; it is canonicalized by textproto.CanonicalMIMEHeaderKey. To use non-canonical keys, assign to the map directly. |
11 GopherDaily 2022-11-28 12:18:50 +08:00 // Set sets the header entries associated with key to the // single element value. It replaces any existing values // associated with key. The key is case insensitive; it is // canonicalized by textproto.CanonicalMIMEHeaderKey. // To use non-canonical keys, assign to the map directly. func (h Header) Set(key, value string) { textproto.MIMEHeader(h).Set(key, value) } |
12 yaott2020 OP @horsley 我的意思是 key 是横杠,设置 header 后 header 里面变成下划线。 |
13 ql562482472 2022-11-28 16:59:39 +08:00 spring 里面用 spring 工具取 header 时,不区分大小写,-或_都能取出来 |
15 yaott2020 OP @horsley 还是没懂我的意思,我知道 set 函数会自动格式化 key ,但是我这里的 key 进去是横杠,set 之后变成了下划线,难道函数有这样的实现吗 |
16 lysS 2022-11-29 13:44:49 +08:00 网关是真的搞,有次把我们的 sql 改了;查了小半周 |