事情是这样,python 同事在 A 网络环境发送 Content-Type=multipart/form-data 的文件上传 HTTP 请求。 我在 B 网络环境接收,A 和 B 中间有类似防火墙的机制。 结果在 Nginx 这一层提示 invalid header Content_Type ,发现变成了下划线的请求头了 而且在后端使用 Java 接收接口时,压根就没有了此请求头,也就导致文件上传的请求失败。 现在处理方式就是在 nginx 中加了个配置 underscores_in_headers on 将 Content_Type 头部设置到 Content-Type 中,才完成了请求。 结果收到请求体后发现,每次请求都比发送的包少一部分,大概 1/4
|      1THESDZ      2022-06-30 14:37:53 +08:00 自己开发的网关? | 
|  |      2realpg PRO https 呢 | 
|  |      3xiangyuecn      2022-06-30 15:20:40 +08:00 花几十块钱买一个服务器,上传到那上面去 完美绕过🐶 | 
|  |      4doomfirst      2022-06-30 15:36:51 +08:00 Content_Type 是自己自定义的  header 头字段 应该是流量转发的时候 改写了 中间人代理? | 
|      5bugfan      2022-06-30 15:38:33 +08:00 把 http 改成 https 尝试一下 估计有 waf | 
|      6lolizeppelin      2022-06-30 15:51:17 +08:00 搞不好是 python 的锅    python 很多库接收 http 请求的时候会把-换成下划线 出去的时候又把下划线转回- 搞不好你同事哪里搞错了 | 
|      9sqmwin OP @lolizeppelin 能展开说说吗,或者有没有链接。python 处理 http 请求 | 
|      10lolizeppelin      2022-06-30 17:12:52 +08:00 翻下 python http 库不就知道了 以为 python 可以用 req.content_type 访问变量不能用 req.Content-Type 形式访问 所以代码内部-换成_,然后统一 lower 所有 header 是很常见的处理方法 一般会在出去的时候下划线统一换回-,然后首字母大写 | 
|  |      11Martens      2022-06-30 17:44:24 +08:00 可以用排除法排查下是不是 py 的问题,比如用其他语言做上传,实验 | 
|  |      14rekulas      2022-06-30 23:28:28 +08:00 为了安全 内网也应该上 ssl | 
|  |      15vone      2022-07-01 09:38:30 +08:00 你让你的 python 同事在 A 网络环境直接把数据发送到 https://postman-echo.com/post ,这个地址会把你的请求内容原封不动的返回给你。这样你就可以知道你发出去的原始内容有没有问题。 | 
|  |      16eudore      2022-07-01 14:14:32 +08:00 Content_Type 这个不符合 header 命名规范 |