错误内容:
fetch 获取的response status 在 IOS 和 Android 下不一致
背景:
- react SPA
- fetch 抓取 API
- Ruby On Rails
因为默认我都是需要传送 cookies
的
所以重写了一个 _fetch
方法,
请求头 设置成 json
默认 get
请求
偷懒只对 401
抛出异常(导致后来的错误)
export function _fetch(url, method = 'get', body) {
return fetch(url, {
headers: {
'Accept': 'application/json',
'Content-Type': 'application/json'
},
credentials: 'same-origin',
method,
body,
})
.then(res => {
if (res.status == 401) {
throw new Error(401);
}
return res;
})
.then(res => res.json());
}
BUG
上线后,不断有 Android
用户反馈 需要 验证身份 的按钮没效果.
之前在 iPhone
做测试上一直没问题的.
后台显示的错误信息是 没有匹配路由
PUT
请求 /users/sign_in
(sign_in只有接受 get
请求)
报 403
错误
而403 我是没有处理过的
(身份验证这边的错误处理确实不完整, 如果报出一个未知错误给用户我想用户体验会好很多的)
DEBUG
出现问题的用户的共同点:
- Android
- 未注册/登录
找来台 Android
机器 测试, 发现未登陆的时候 获取的状态码 是 403
现象很明显, 就是在请求 需要验证身份的 功能时, 后台判断你未登陆会重定向到 /users/sign_in
因为之前的请求是 PUT
所以重定向的时候也是PUT
请求.
继而 报 403
Ruby On Rails
我一直有种抵触的心里, 没太多的碰过.
临时处理只能是 把 403
错误也当 401
错误抛出去
疑惑
为什么 在Android
和 IOS
上会有不同的状态码? 是 fetch
的原因吗?
总结
- 测试还是应该做完整一点,主流的
Android
和IOS
还是应该测测的, 'WP' 相对而言暂时还可以放放. - 异常错误一定要做好交互, 不然用户体验太差, 让他们手足无措, 自然用户就会关闭窗口, 留下不好的印象.
- 开发经验还是十分不足, 需要加油啊!