分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

Ajax 发送OPTION请求

发布时间:2023-09-06 01:17责任编辑:沈小雨关键词:Ajax

从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:

@Componentpublic 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", "3600"); ???????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请求就可以顺利的发出了。

 

Ajax 发送OPTION请求

原文地址:http://www.cnblogs.com/laneyfu/p/7667396.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved