从fetch说起,用fetch构造一个POST请求。

fetch('http://127.0.0.1:8000/api/login', {
method: "POST",
headers: ({
'Content-Type': 'application/x-www-form-urlencoded'
}),
body: "name=" + name + "&password=" + pwd
}).then((res) = >{
console.log(res.status);
return res.json()
}).then((data) = >{
// console.log(data.result)
let loginResult = data.result
if (loginResult == 'ok') {
dispatch(getSuccess(data.list)) browserHistory.push('/index')
} else {
console.log("illegal login in !")
}
}).
catch((e) = >{
console.log(e.message)
})

这个POST发出去,一切正常。

由于业务需要,我增加一个头字段:Authorization。

fetch请求的代码修改如下:

...

headers: ({
'Content-Type': 'application/x-www-form-urlencoded',
'Authorization': '1111111222'
}),
body: "name=" + name + "&password=" + pwd
}).then((res) = >{ ...

问题出现了,服务器收到一个OPTIONS请求?!

二、原因

这是fetch出于安全性考虑做的一次服务器预查询,而我的服务没有做相应的处理,所以业务处理失败了。

三、解决

方法:

手动写一个Filter:

@Component
public class CorsFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// TODO Auto-generated method stub
} @Override
public void doFilter(ServletRequest req, ServletResponse res,
FilterChain chain) throws IOException, ServletException {
HttpServletResponse response = (HttpServletResponse) res;
response.setHeader("Access-Control-Allow-Origin", "*");
response.setHeader("Access-Control-Allow-Methods",
"POST, GET, OPTIONS, DELETE");
response.setHeader("Access-Control-Max-Age", "");
response.setHeader("Access-Control-Allow-Headers",
"Content-Type, x-requested-with, X-Custom-Header, Authorization");
chain.doFilter(req, res);
} @Override
public void destroy() {
// TODO Auto-generated method stub
}
}

一点说明:

response.setHeader("Access-Control-Allow-Headers", "Content-Type, x-requested-with, X-Custom-Header, Authorization");

配置中的Authorization是和请求中自定义的头部字段是一样的。

通过这个过滤器,fetch后续的POST请求就可以顺利的发出了。

 

最新文章

  1. WinForm跨窗体传值
  2. type="file" 选择图片后预览
  3. [.net 面向对象编程基础] (22) 事件
  4. 这些HTML、CSS知识点,面试和平时开发都需要 No8-No9
  5. HighCharts选项和参数详细配置查询表
  6. nc 局域网聊天+文件传输(netcat)
  7. js-小效果-瀑布流
  8. 个性二维码开源专题<介绍篇>
  9. 用wcf实现带有“秒传”功能的网盘
  10. jquery控制元素的淡入淡出切换
  11. JavaScript获取两个时间的时间差
  12. Django数据库配置
  13. linux 下各errno的意义
  14. 《剑指Offer》面试题5-替换空格
  15. 虚拟机创建流程中neutron代码分析(三)
  16. Oracle DataGuard 11g 双机实验
  17. Mac各种数据库安装和启动【笔记】
  18. 兼容Android 和 ios JavaScript copy paste
  19. git安装与初始化
  20. java不足前面补0

热门文章

  1. UVaLive 3695 City Game (扫描线)
  2. [WIP]webpack 概念
  3. Lightoj1028 【数学-乘法原理】
  4. 20道Java精选面试必问题(附详细解答),还有什么拿不到的offer
  5. hyperledger fabric 1.0.5 分布式部署 (一)
  6. mybatis二级缓存
  7. vmware vSAN 入门
  8. C【C#公共帮助类】分页逻辑处理类
  9. 栈 && 教授的测试
  10. 调用submit()方式提交表单