前言

今天给小伙伴开放一个接口方便调试数据,但是老是出现CROS策略阻塞,查询资料后知道了是ajax跨域引起的,以此记录此次解决问题的过程。

什么是ajax跨域

ajax跨域的原理

ajax出现请求跨域错误问题,主要原因就是因为浏览器的“同源策略”,可以参考浏览器同源政策及其规避方法(阮一峰)

CORS请求原理

CORS是一个W3C标准,全称是”跨域资源共享”(Cross-origin resource sharing)。它允许浏览器向跨源服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。

基本上目前所有的浏览器都实现了CORS标准,其实目前几乎所有的浏览器ajax请求都是基于CORS机制的,只不过可能平时前端开发人员并不关心而已(所以说其实现在CORS解决方案主要是考虑后台该如何实现的问题)。

关于CORS,强烈推荐阅读跨域资源共享 CORS 详解(阮一峰)

如何判断是否是简单请求?

浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。只要同时满足以下两大条件,就属于简单请求。

请求方法是以下三种方法之一:HEAD,GET,POST

HTTP的头信息不超出以下几种字段:

Accept

Accept-Language

Content-Language

Last-Event-ID

Content-Type(只限于三个值application/x-www-form-urlencoded、 multipart/form-data、text/plain)

凡是不同时满足上面两个条件,就属于非简单请求。

ajax跨域的表现

说实话,当初整理过一篇文章,然后作为了一个解决方案,但是后来发现仍然有很多人还是不会。无奈只能耗时又耗力的调试。然而就算是我来分析,也只会根据对应的表现来判断是否是跨域,因此这一点是很重要的。

ajax请求时,如果存在跨域现象,并且没有进行解决,会有如下表现:(注意,是ajax请求,请不要说为什么http请求可以,而ajax不行,因为ajax是伴随着跨域的,所以仅仅是http请求ok是不行的)

如何解决ajax跨域

一般ajax跨域解决就是通过JSONP解决或者CORS解决,如以下:(注意,现在已经几乎不会再使用JSONP了,所以JSONP了解下即可)

JSONP方式解决跨域问题

jsonp解决跨域问题是一个比较古老的方案(实际中不推荐使用),这里做简单介绍(实际项目中如果要使用JSONP,一般会使用JQ等对JSONP进行了封装的类库来进行ajax请求)

基于JSONP的实现原理,所以JSONP只能是“GET”请求,不能进行较为复杂的POST和其它请求,所以遇到那种情况,就得参考下面的CORS解决跨域了(所以如今它也基本被淘汰了)

JAVA后台配置解决ajax跨域

JAVA后台配置只需要遵循如下步骤即可:

第一步:获取依赖jar包下载 cors-filter-1.7.jar, java-property-utils-1.9.jar 这两个库文件放到lib目录下。(放到对应项目的webcontent/WEB-INF/lib/下)

第二步:如果项目用了Maven构建的,请添加如下依赖到pom.xml中:(非maven请忽视)

CORS

com.thetransactioncompany.cors.CORSFilter

cors.allowGenericHttpRequests

true

cors.allowOrigin

*

cors.allowSubdomains

false

cors.supportedMethods

GET, HEAD, POST, OPTIONS

cors.supportedHeaders

Accept, Origin, X-Requested-With, Content-Type, Last-Modified

cors.exposedHeaders

X-Test-1, X-Test-2

cors.supportsCredentials

true

cors.maxAge

3600

CORS

/*

如何解决ajax跨域java,ajax跨域问题,从java角度解决相关推荐

  1. 【转】JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  2. JS跨域(ajax跨域、iframe跨域)解决方法及原理详解(jsonp)

    这里说的js跨域是指通过js在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过js获取页面中不同域的框架中(iframe)的数据.只要协议.域名.端口有任何一个不同,都被 ...

  3. ssm项目解决AJAX跨域,ssm项目跨域访问

    最近使用ssm开发了一个项目,为了项目的开发速度,采用的是前后端同时开发,所以前端文件没有集成在项目中,最后在调试时涉及到了跨域.跨域的解决方法很多,我采用的是最简单的一种,代码如下: 新建一个过滤器 ...

  4. apache ajax 跨域访问,AJAX跨域访问(从Tomcat8到Apache/Nginx)

    1.在Tomcat的Root目录下放入如下的文件 apache-tomcat-8.0.12X64\webapps\ROOT clientaccesspolicy.xml文件 crossdomain.x ...

  5. AJAX跨域访问(不同域之间相互访问)

    目录 一.跨域: 二.同源策略: 三.解决Ajax跨域问题的方案: 方案一:设置响应头 方案二:jsonp 方案三:jQuery封装jsonp 方案四:代理机制(httpclient) 方案五:ngi ...

  6. Ajax基本请求方式及其跨域请求

    1.Ajax异步刷新 Ajax的工作流程 Jsp页面通过js向服务器(servlet)发送请求获取到数据,将数据获取到js中,js将数据显示到jsp页面中(document来操作element),最后 ...

  7. jQuery中的ajax、jquery中ajax全局事件、load实现页面无刷新局部加载、ajax跨域请求jsonp、利用formData对象向服务端异步发送二进制数据,表单序列化(异步获取表单内容)

    jQuery中使用ajax: 在jQuery中使用ajax首先需要引入jQuery包,其引入方式可以采用网络资源,也可以下载包到项目文件中,这里推荐下载包到文件中:市面上有多个版本的jQuery库,这 ...

  8. ajax背景、ajax对象、ajax状态、ajax与http、ajax请求数据接口、同步与异步、ajax请求XML数据、封装ajax函数、artTemplate简介、同源策略和跨域请求、JSONP

    AJAX简介: ajax背景: 1.AJAX(Asynchronous JavaScript And Xml)异步的 JavaScript 和 XML:ajax是浏览器提供的一套API,最早出现在谷歌 ...

  9. Jsonp跨域,Ajax浅述

    最近在进行历史项目重构,前后端分离时候需要把接口封成jsonp,来解决域中的跨域问题.这里简单总结一波: 开发中由于同源策略,在一个Service上的应用是访问不到另一个地址空间的资源的,所以在分布式 ...

最新文章

  1. 敏捷开发第二阶段个人(二)
  2. linux 怎样设置ip、网关、掩码
  3. win10巨帧数据包在哪里设置_Win10电脑总感觉网速慢,是什么原因
  4. andy the android ppt,新概念同步测试1.ppt
  5. 自由自在公司意式手工冰淇淋以“怪“取胜
  6. Ubuntu20.4显示N卡 花屏问题
  7. Github Actions 中 Service Container 的使用
  8. C/C++基础面试-Const的全面理解(C部分)
  9. 数理统计-大厂笔试题
  10. (12)System Verilog随机变量
  11. html input 字体颜色_html 元素参考整合实用收藏!前端web工程师必备!
  12. 面试官问你final、finally、finalize的区别
  13. 【原创】大数据基础之Spark(1)Spark Submit即Spark任务提交过程
  14. php 程序性能分析工具,php的性能分析工具:xhprof
  15. [小说]魔王冢(22)启程
  16. 记录一次C#爬虫记录,获取必应图片
  17. Android自动化刷量、作弊与防作弊视频教程-彭斌-专题视频课程
  18. 《信息检索》课程笔记
  19. 3.2 Processing实用调色教程:HSB模式与颜色插值
  20. 获得32位UUID字符串和指定数目的UUID

热门文章

  1. 分享76个ASP整站程序源码,总有一款适合您
  2. 计算机系统的备份与还原实验报告,实验报告系统备份和恢复.doc
  3. Python删除字符串中指定字符
  4. JIRA-使用教程_问题单-新建
  5. Word中怎么删除空白页?这三种方法简单高效专业
  6. java服务端统一消息推送(苹果, 华为, 小米, 极光,vivo)
  7. ContentResolver监听
  8. 你真的了解main函数吗?
  9. 计算机网络组建与维护,计算机网络组建与维护大作业.docx
  10. linux lun分区,linux下支持多LUN方式的设置方法