总所周知,egg的csrf策略让post每次都要发送token码验证,为了方便,我在axios的interceptor里作了前置拦截。
结果不幸从此发生!
最开始没有看官方文档,以为csrf应该加在data里面,又没有考虑到要上传multipart/form格式的文档,所以直接 config.data = Assign({...data},{_csrf})
结果发送的type是application/type。这很正常,阅读源码知data为Obj时会自动添加application的头。
于是强行设置multipart/part的header,导致后端出现boundary not found
boundary作为请求的一部分,应由浏览器查看并正确设置,这点有后端经验的都很清楚,强行加boundary肯定没用。不加又以application上传了。
没办法,只有覆写transferRequest,然后更改config.data为config.data.append(_csrf,xxx),至此浏览器成功正确设置multipart头
PS:主动设置multipart头完全无效,axios源码里探测到multipart头就会删除它,网上不懂的人不要乱说行不行,中国论坛就是这种垃圾风气,没试过没看过就开始传播。。。。。。
PS2:没搞懂egg 安全策略默认禁止options请求,我怎么跨域呢????????????????????又回到上古世纪的jsonp或者只能proxy了???????
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。