代码如下:
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 改了;查了小半周
|