当内容类型和内容编码标头一起发送时,表达js拒绝发布请求(400错误请求)

Posted

技术标签:

【中文标题】当内容类型和内容编码标头一起发送时,表达js拒绝发布请求(400错误请求)【英文标题】:expressjs rejecting post request (400 bad request) when content-type and content-ecoding headers are sent together 【发布时间】:2020-08-11 17:02:25 【问题描述】:
app.use( 
    express.text(type: 'text/xml'), 
    express.json(type: 'application/json'),
    other middlewares...) ```

发布方法头: 连接:'保持活动', '内容长度':'1082', '内容编码':'gzip', “内容类型”:“文本/xml”, 接受:'/', '接受编码':'gzip', 来源:'chrome-extension://sxwwwagimdiliamlcqswqsw', '接受语言': 'fr-FR,fr;q=0.9,en-US;q=0.8,en;q=0.7'


Also I have tried express.raw with a wildcard for the type, but the response 
is always 400.

```express.raw(type:'*/*', inflate:true), (req, res, next)=>console.log(req.body); next() ,```



【问题讨论】:

【参考方案1】:

在找到这个nodejs 教程后,我能够修复它。 关键是不要使用任何 express 解析器,而是使用 vanilla nodejs。

  app.use( 

        (req, res, next)=>
            let data = []
            req.on('data', chunk => 
                data.push(chunk)
            )
            req.on('end', () => 
                req.body = data.toString()
            );
            next()
        
    )

【讨论】:

以上是关于当内容类型和内容编码标头一起发送时,表达js拒绝发布请求(400错误请求)的主要内容,如果未能解决你的问题,请参考以下文章

IIS 网站正在为 zip 文件发送多个内容类型的标头

为啥编码标头内容类型:text/html;在 Outlook 插件中使用 MailItem 时缺少 GMAIL 的 SMTP 服务器:SMTP.GMAIL.COM?

当客户端未在标头中发送内容长度时,rails v6 如何填充 REQUEST 的内容长度?

使用“application/x-www-form-urlencoded”内容类型请求标头时,未正确发送 HttpClient 后正文参数

标头内容类型字符集 UTF-8 和 BOM

OAuth2RestTemplate 将字符集添加到内容类型标头中