收藏
回答

【服务端】小程序登录API(code2Session)响应头的Content-Type不正确

Bug表现:

当小程序开发者后台使用正确的参数调用微信开放平台服务端 API code2Session 时,Response Body 返回了 JSON 内容,但 Response Header 中的 Content-Type 却为 text/plain。要复现该问题,需要向 API 传递完整参数;如果不带参数调用 code2Session,则 Response Header 中的 Content-Type 是 application/json,无法复现问题。

截图中,第一个调用不带参数,此时返回 Content-Type: application/json; encoding=utf-8。第二个调用带上了正确的参数,可以看到 Body 中返回了 JSON 内容,成功获取了 session_key 和 openid,但 Header 中却是 Content-Type: text/plain。


预期表现:

当 Response Body 的内容为 JSON 时,将 Response Header 中的 Content-Type 设为 application/json。(根据 IETF RFC 8259,JSON 默认用 UTF-8 编码,MediaType 不必再加 charset 之类的参数。如果要加,虽然“encoding”语义上可能更准确,但习惯上更常见的是“charset”。但加个 encoding=utf-8 倒也不算错。)


说明:

对于 HTTP 协议而言,Content-Type 不是什么无关紧要的元数据,错误的 Content-Type 会影响一些库对内容的解析。例如,在默认配置下,Spring 框架的 RestClient 遇到 text/plain 时,从 JSON 到 Java 对象的自动转换就无法按正常工作。(如果是在浏览器上,Content-Type 错误还可能导致安全问题。)

社区中已经有不少开发者反馈过 Content-Type 不对的问题:

https://developers.weixin.qq.com/community/develop/doc/0004ee74718d9897fca67d0c35e400

https://developers.weixin.qq.com/community/develop/doc/00088e5987c4c8e1f4eaa9b4c5a400

https://developers.weixin.qq.com/community/develop/doc/000c464f6501d82b074d5f5055b000

https://developers.weixin.qq.com/community/develop/doc/0000447948451076996f93e7e5b000

https://developers.weixin.qq.com/community/develop/doc/0000667e480a685a63b0c8bf666c00

可见此问题已存在多年。希望微信开放平台团队重视此类问题。


另注:建议Bug反馈的“问题模块”分类中加个关于服务端API的选项。

回答关注问题邀请回答
收藏
登录 后发表内容