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

什么样的网络中间层能把 Content-Type 改为 Content_Type

  •  
  •   sqmwin · 2022-06-30 14:31:30 +08:00 · 3282 次点击
    这是一个创建于 862 天前的主题,其中的信息可能已经有所发展或是发生改变。

    事情是这样,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

    18 条回复    2022-07-03 22:41:45 +08:00
    THESDZ
        1
    THESDZ  
       2022-06-30 14:37:53 +08:00
    自己开发的网关?
    realpg
        2
    realpg  
       2022-06-30 15:05:18 +08:00
    https 呢
    xiangyuecn
        3
    xiangyuecn  
       2022-06-30 15:20:40 +08:00
    花几十块钱买一个服务器,上传到那上面去 完美绕过🐶
    doomfirst
        4
    doomfirst  
       2022-06-30 15:36:51 +08:00
    Content_Type 是自己自定义的 header 头字段 应该是流量转发的时候 改写了 中间人代理?
    bugfan
        5
    bugfan  
       2022-06-30 15:38:33 +08:00
    把 http 改成 https 尝试一下
    估计有 waf
    lolizeppelin
        6
    lolizeppelin  
       2022-06-30 15:51:17 +08:00
    搞不好是 python 的锅
    python 很多库接收 http 请求的时候会把-换成下划线
    出去的时候又把下划线转回-

    搞不好你同事哪里搞错了
    sqmwin
        7
    sqmwin  
    OP
       2022-06-30 16:55:13 +08:00
    @realpg 因为是两边都是内网内部环境,https 暂时用不到
    sqmwin
        8
    sqmwin  
    OP
       2022-06-30 16:55:33 +08:00
    @THESDZ 也不清楚中间网关是怎么处理的
    sqmwin
        9
    sqmwin  
    OP
       2022-06-30 16:56:10 +08:00
    @lolizeppelin 能展开说说吗,或者有没有链接。python 处理 http 请求
    lolizeppelin
        10
    lolizeppelin  
       2022-06-30 17:12:52 +08:00
    翻下 python http 库不就知道了

    以为 python 可以用 req.content_type 访问变量不能用 req.Content-Type 形式访问
    所以代码内部-换成_,然后统一 lower 所有 header 是很常见的处理方法

    一般会在出去的时候下划线统一换回-,然后首字母大写
    Martens
        11
    Martens  
       2022-06-30 17:44:24 +08:00
    可以用排除法排查下是不是 py 的问题,比如用其他语言做上传,实验
    popvlovs
        12
    popvlovs  
       2022-06-30 19:27:02 +08:00
    @Martens 那也不用其他语言,写个 curl 就可以验证了吧
    realpg
        13
    realpg  
       2022-06-30 20:04:58 +08:00
    @sqmwin #7
    https 就是防止这种事情的绝佳工具
    内网可自己签
    rekulas
        14
    rekulas  
       2022-06-30 23:28:28 +08:00
    为了安全 内网也应该上 ssl
    vone
        15
    vone  
       2022-07-01 09:38:30 +08:00
    你让你的 python 同事在 A 网络环境直接把数据发送到 https://postman-echo.com/post ,这个地址会把你的请求内容原封不动的返回给你。这样你就可以知道你发出去的原始内容有没有问题。
    eudore
        16
    eudore  
       2022-07-01 14:14:32 +08:00
    Content_Type 这个不符合 header 命名规范
    sqmwin
        17
    sqmwin  
    OP
       2022-07-03 22:41:29 +08:00
    @realpg 感谢 能给个关键词吗,内网自签名?
    sqmwin
        18
    sqmwin  
    OP
       2022-07-03 22:41:45 +08:00
    @vone 第一次听说可以用这个工具,谢谢了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2890 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 11:07 · PVG 19:07 · LAX 03:07 · JFK 06:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.