华为手机不认 HTTP 303

2020-04-17 20:24:01 +08:00
 mogutouer
我们一个小程序,因为内容有些是提前生成的,所以获取用户 ID 后,就 303 转到提前在 OSS 上的一个对应的 json 文件,运行了一段时间后其中有一个客户反馈说始终载入不到内容。

我们用该用户的 ID 测试接口一切都正常,但客户真机就是不行,然后我们把客户加到开发者然后用真机调试,发现请求没问题,也得到了了 303 的状态并且 Location 也返回了对应的地址,地址也是正常并且有内容的。

之前用 301 因为阿里云 OSS 的文件不能用 POST 请求,否则会 405 MethodNotAllowed,所以改成了用 303,强制 GET 到那边去。

但是华为手机获取到 303 之后就抛个 Error,然后就没然后了。

目前用户累计一百多个手机型号,唯独华为有这个问题,请问这个锅谁背?

手机型号:HUAWEI Mate 20 Pro ( LYA-L29 )
系统版本:10.0.0.198
微信版本:7.0.13
小程序基础库版本:2.10.4
2464 次点击
所在节点    全球工单系统
9 条回复
minami
2020-04-17 20:29:10 +08:00
众所周知 EMUI 已经把安卓底层掏空了,到时候抽掉框架就是 homo 系统。所以当然是开发者适配不力的锅了,华为只是“兼容安卓”而已
mogutouer
2020-04-17 20:41:33 +08:00
万万没想到,2020 年了,HTTP 底层的 3XX 代码还需要程序员主动判断再处理,附 2014 年 RFC 7231 标准 https://tools.ietf.org/html/rfc7231#section-6.4.2
Seanfuck
2020-04-17 20:41:37 +08:00
又一个不买华为的理由[dog]
kokutou
2020-04-17 20:43:12 +08:00
做个 workaround 嘛。。。

没有专门的 workaround 突击小队嘛?
zsj950618
2020-04-17 21:57:34 +08:00
我感觉你这用法有点问题,

看 303 定义

The response to the request can be found under another URI using the GET method. When received in response to a POST (or PUT/DELETE), the client should presume that the server has received the data and should issue a new GET request to the given URI.[24]

你是 POST 到一个 url,然后 server 返回了 303 到阿里 OSS ?总感觉不是很对。
mogutouer
2020-04-17 22:48:22 +08:00
@zsj950618 #5 对啊,我原本是 301,但部分手机会把 POST 请求也丢给 OSS,因为 OSS 接受不了 POST 请求,只有上传文件的时候可以 POST,所以 OSS 那边会返回 405 。

然后查资料发现 303 是把无论什么请求最后都变成 GET 请求到目标地址,正好符合 OSS 的规则,所以就用 303 了。

没问题的,我 POST userid 给后端,后端解析了之后让客户端去 GET 一个静态 json 文件,没毛病的,我要的也是 GET 。

如果是 POST 转 POST 需要重新发送资料,就要用 307 或 308
mogutouer
2020-04-17 22:51:20 +08:00
303 的文字描述是 See Other

本来是意思是用在比如你提交了表单了,服务器判断了,然后让你去一个结果页,那么这个结果页当然不需要再发送或接收数据,只是让你看结果,正所谓的 See Other,就是 GET 过去看。

因为之前的 301 302 有点混乱,后来又搞了清晰的 303 307 308 这些
zsj950618
2020-04-17 23:15:28 +08:00
@mogutouer 好吧,用法看来是对的。

但是众所周知,微信不用系统 webview 的,大概率还是微信的锅。
locoz
2020-04-18 09:51:08 +08:00
@zsj950618 #8 主贴中提到了“目前用户累积一百多个手机型号,唯独华为有这个问题”🤣这跟微信就没啥关系了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/663571

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX