fetch meet 302 redirect


公司用的统一登录,当session过期后,fetch发起的请求会返回302,然后fetch会跟随302 redirect的url继续请求
但之后的地址是一个普通http页面地址,应该直接访问而不是ajax访问。而且redirect之后的页面也没有设置access-allow-origin的跨域请求头。
在自己封装的fetch函数中竟然不能获取返回状态码是302的请求的response信息。

查到了可用的方案,在fetch的参数中添加 redirect: ‘manual’,之后fetch若是返回302,会进入then环节,但仍然不能获取到302的redirect地址,而且response.status 是0而不是302,只能靠type === ‘opaqueredirect’来判断。

发表在 ecmascript | 留下评论

react-router没有自动更新组件的问题

今天碰到了如题的问题,最后排查出是包裹<Route />组件的外层<App>组件,添加了mobx的observer修饰器导致的。
总之去掉就恢复正常了,具体原因仍未排查出。程序员的第六感告诉我,可能和React的context,或者observer修饰器修饰过之后context被覆盖有关系。
发表在 react | 留下评论

fetch自动先发起option请求的问题

以前有些fetch在发起post请求之前总会先发一个option,等服务器返回头allow-methods里有post才会再发真正的post请求。没仔细研究还以为是post的特殊行为。最近遇到了get请求竟然也会先发option请求,但服务器没有正确返回头信息,导致请求中断。

仔细研究了一下以前不会先发起option请求区别发现在于只要有自定义的header放到fetch的option里,就一定会先试探发起一个option请求,不管是get还是post或其他什么请求方法。

发表在 ecmascript | 留下评论