当前位置: 首页 > news >正文

哈尔滨网站建设设计宁波企业建站

哈尔滨网站建设设计,宁波企业建站,媒体发布平台,wordpress 支付宝文章目录 1. 前置知识2. 原理和解决方案总结2.1. 跨域不通过原理流程图2.2. 实现原理#xff1a;添加以下http响应头2.3. 四种跨域实现方式及优先级#xff08;从高到低#xff09; 3. 具体实现代码3.1. 跨域全局配置方式-Filter(全适用)3.2. 跨域全局配置方式-SpringMvc3.3… 文章目录 1. 前置知识2. 原理和解决方案总结2.1. 跨域不通过原理流程图2.2. 实现原理添加以下http响应头2.3. 四种跨域实现方式及优先级从高到低 3. 具体实现代码3.1. 跨域全局配置方式-Filter(全适用)3.2. 跨域全局配置方式-SpringMvc3.3. 跨域单个配置方式-WebServlet3.4. 跨域单个配置方式-SpringMvc 4.非java实现方式4.1. nginx代理 9. 参考文章 1. 前置知识 【尚硅谷】【视频】【B站】禹神一小时彻底搞懂跨域解决方案【尚硅谷】【笔记】【CSDN】禹神彻底搞懂前端跨域解决方案 2. 原理和解决方案总结 2.1. 跨域不通过原理流程图 2.2. 实现原理添加以下http响应头 序号响应头含义1Access-Control-Allow-Origin允许的源2Access-Control-Allow-Methods允许的方法3Access-Control-Allow-Headers允许的自定义头4Access-Control-Max-Age预检请求的结果缓存时间可选 2.3. 四种跨域实现方式及优先级从高到低 跨域全局配置方式-Filter(全适用) 重写 Filter.doFilter()设置 res.setHeader(“Access-Control-Allow-Origin”, “*”) 等响应头参数跨域全局配置方式-SpringMvc 重写 WebMvcConfigurer.addCorsMappings()设置 registry.addMapping(“/**”).allowedOrigins(“*”)等响应头参数只对SpringMvc写法生效对原生Servlet不生效跨域单个配置方式-WebServlet 设置 res.addHeader(“Access-Control-Allow-Origin”, “*”) 等响应头参数跨域单个配置方式-SpringMvc 添加 CrossOrigin注解设置origins等响应头参数只对SpringMvc写法生效对原生Servlet不生效 3. 具体实现代码 gitee源码 3.1. 跨域全局配置方式-Filter(全适用) 重写Filter.doFilter()设置 res.setHeader(Access-Control-Allow-Origin, *) 等响应头参数 /** 1.跨域全局配置方式-Filter(全适用) */ Configuration public class CorsFilter implements Filter {Overridepublic void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {HttpServletResponse res (HttpServletResponse) response;res.setHeader(Access-Control-Allow-Origin, req.getHeader(Origin)); //【跨域配置】[必需] 允许请求源 默认值 无配置*允许所有。// 如果是复杂请求的预检请求判断逻辑同SpringMvc设置以下响应头且没必要执行其它过滤器链 chain.doFilter(request, response);if (req.getMethod().equalsIgnoreCase(OPTIONS) !ObjUtil.hasNull(req.getHeader(Origin), req.getHeader(Access-Control-Request-Method))) {res.setHeader(Access-Control-Allow-Methods, req.getHeader(Access-Control-Request-Method)); //【跨域配置】[有复杂请求方法时必需] 允许请求方法默认值 无配置 *允许所有res.setHeader(Access-Control-Allow-Headers, req.getHeader(Access-Control-Request-Headers)); //【跨域配置】[有复杂请求头时必需] 允许请求头 默认值 无配置 *允许所有res.setHeader(Access-Control-Max-Age, 5); //【跨域配置】[非必需] 预检缓存时长 默认值 依赖客户端。EDGE浏览器默认值为3秒。【注意浏览器不要禁用缓存否则不生效】return;}} }3.2. 跨域全局配置方式-SpringMvc 重写 WebMvcConfigurer.addCorsMappings()设置 registry.addMapping(“/**”).allowedOrigins(“*”)等响应头参数只对SpringMvc写法生效对原生Servlet不生效 /** 2.跨域全局配置方式-SpringMvc */ Configuration public class WebMvcConfig implements WebMvcConfigurer {Overridepublic void addCorsMappings(CorsRegistry registry) {registry.addMapping(/**) // 适配RequestMapping。 (例如/ajax/** 开头的)// 下面几个参数不配置会使用默认值。origins 和 originPatterns取并集.allowedOrigins(*) //【跨域配置】[必需] 允许请求源默认值为*即允许所有。相当于res.setHeader(Access-Control-Allow-Origin, ).allowedOriginPatterns(*) //【跨域配置】[必需] 允许请求源默认值为*即允许所有。相当于res.setHeader(Access-Control-Allow-Origin, ).allowedMethods(*) //【跨域配置】[有复杂请求方法时必需] 允许请求方法默认值为GET,POST,HEAD。相当于res.setHeader(Access-Control-Allow-Methods, ).allowedHeaders(*) //【跨域配置】[有复杂请求头时必需] 允许请求头 默认值为*即允许所有。相当于res.setHeader(Access-Control-Allow-Headers, ).maxAge(1800); //【跨域配置】[非必需] 预检缓存时长默认值 1800秒。小于等于0时缓存无效【注意浏览器不要禁用缓存否则不生效】。相当于res.setHeader(Access-Control-Max-Age, )} }3.3. 跨域单个配置方式-WebServlet 设置 res.addHeader(“Access-Control-Allow-Origin”, “*”) 等响应头参数 /** 3.跨域单个配置方式-WebServlet */ Slf4j WebServlet(name ajax, value {/ajax/WebServlet, /ajax/WebServlet/}) public class AjaxWebServlet extends HttpServlet {Overrideprotected void service(HttpServletRequest req, HttpServletResponse res) throws IOException {log.warn(method【{}】, name【{}】, header.origin【{}】, Access-Control-Request-Method【{}】, Access-Control-Request-Headers【{}】, req.getMethod(), req.getParameter(name), req.getHeader(Origin), req.getHeader(Access-Control-Request-Method), req.getHeader(Access-Control-Request-Headers));res.setHeader(Access-Control-Allow-Origin, *); //【跨域配置】[必需] 允许请求源 默认值 无配置*允许所有。res.setHeader(Access-Control-Allow-Methods, *); //【跨域配置】[有复杂请求方法时必需] 允许请求方法默认值 无配置 *允许所有res.setHeader(Access-Control-Allow-Headers, *); //【跨域配置】[有复杂请求头时必需] 允许请求头 默认值 无配置 *允许所有res.setHeader(Access-Control-Max-Age, 1800); //【跨域配置】[非必需] 预检缓存时长 默认值 依赖客户端。EDGE浏览器默认值为3秒。【注意浏览器不要禁用缓存否则不生效】res.getWriter().write(DateUtil.now() req.getMethod());} }3.4. 跨域单个配置方式-SpringMvc 添加 CrossOrigin注解设置origins等响应头参数只对SpringMvc写法生效对原生Servlet不生效 /* 4.跨域单个配置方式-SpringMvc */ Slf4j RestController RequestMapping(/ajax) public class AjaxController {CrossOrigin(// origins 和 originPatterns取并集。【注意】此处配置与下面的res.setHeader()功能相同优先级较低。二选其一即可origins {*}, //【跨域配置】[必需] 允许请求源 默认值为*即允许所有。相当于res.setHeader(Access-Control-Allow-Origin, )originPatterns {*}, //【跨域配置】[必需] 允许请求源 默认值为*即允许所有。相当于res.setHeader(Access-Control-Allow-Origin, )methods {}, //【跨域配置】[有复杂请求方法时必需] 允许请求方法默认值为优先以RequestMapping的method属性为准如果没有指定则默认为GET,POST,HEAD。相当于res.setHeader(Access-Control-Allow-Methods, )allowedHeaders {*}, //【跨域配置】[有复杂请求头时必需] 允许请求头 默认值为*即允许所有。相当于res.setHeader(Access-Control-Allow-Headers, )maxAge 1800 //【跨域配置】[非必需] 预检缓存时长默认值 1800秒。小于等于0时缓存无效【注意浏览器不要禁用缓存否则不生效】 。相当于res.setHeader(Access-Control-Max-Age, ))RequestMapping(value /CrossOrigin, method {RequestMethod.GET, RequestMethod.PUT})SneakyThrowsvoid ajax(HttpServletRequest req, HttpServletResponse res) {log.warn(method【{}】, name【{}】, header.origin【{}】, Access-Control-Request-Method【{}】, Access-Control-Request-Headers【{}】, req.getMethod(), req.getParameter(name), req.getHeader(Origin), req.getHeader(Access-Control-Request-Method), req.getHeader(Access-Control-Request-Headers));res.getWriter().write(DateUtil.now() req.getMethod());} }4.非java实现方式 4.1. nginx代理 优点不用侵入java代码 配置nginx反向代理。在配置文件nginx.conf的http中添加一个server将AJAX请求通过nginx转发。本例中将AJAX请求发给58080端口然后转发给8080端口 server {listen 58080;server_name localhost;location / {proxy_pass http://localhost:8080;# 增加响应头add_header Access-Control-Allow-Origin *; # 【跨域配置】[必需] 允许请求源 默认值 无配置*允许所有。if ($request_method OPTIONS) { # 如果是复杂请求的预检请求参考SpringMvc最好同时判断请求头Origin、Access-Control-Request-Method都不为null略设置以下响应头且没必要透传直接返回add_header Access-Control-Allow-Origin *; # 【跨域配置】[必需] 允许请求源 默认值 无配置*允许所有。add_header Access-Control-Allow-Methods *; # 【跨域配置】[有复杂请求方法时必需] 允许请求方法默认值 无配置 *允许所有add_header Access-Control-Allow-Headers *; # 【跨域配置】[有复杂请求头时必需] 允许请求头 默认值 无配置 *允许所有add_header Access-Control-Max-Age 5; # 【跨域配置】[非必需] 预检缓存时长 默认值 依赖客户端。EDGE浏览器默认值为3秒。【注意浏览器不要禁用缓存否则不生效】return 204;}} }9. 参考文章 CrossOrigin详细参数说明SpringBoot处理跨域请求的四种方法
http://www.hkea.cn/news/14354598/

相关文章:

  • 图片网站建设广东网站建设哪家专业
  • 黄村网站建设国家企业信用公示网全国上海
  • 做公司网站的模板如何修改网页上的内容
  • 企业网站 自助建站网站多页面布局
  • 基于php技术的个人网站设计深圳市交易服务中心
  • wordpress 网站域名广东工程建设监理协会网站
  • 做类似起点的网站wordpress站点演示
  • 中国空间站扩建POS机网站怎么做
  • 跟我学seoseo排名优化收费
  • 做网站是不是要域名费足球比赛直播平台
  • 济南网站开发哪家好浦东新区手机网站设计
  • 福建网站建设开发深圳做网站哪家公司好
  • 做本地网站赚钱吗?域名注册服务商网站
  • 动态素材网站网站域名怎么查询
  • 济南网站建设服务公司北京搜索关键词优化
  • 苏州网站建设制作网页设计实训内容及过程
  • 查询网站开发语言排网站搭建论文
  • 广西建设执业资格注册中心网站网站构成
  • 域名到网站上线WordPress这新手
  • 网站制作软件是什么电商网页设计理念
  • 网站备案个人信息科技有限公司属于什么行业
  • 慈溪企业网站建设刚做的网站怎么在百度搜到
  • 域名推广技巧安徽网站关键词优化
  • 做网站v赚钱wordpress简约企业主题
  • 西安网站建设推广专家ngrok 群晖wordpress
  • 自己做的网站如何在网络上展示太原建站公司有哪些
  • 个人网站模板建站软件技术适合女生学吗大专
  • 金华品牌网站建设wordpress 建企业网站
  • 手机ppt在哪个网站做招聘wordpress
  • 网站开发基础语言龙采网站建设资源分享平台