Java服务端用CORS方法解决浏览器跨域问题

跨域问题简单来说,就是浏览器访问a.com时,a.com中的javascript,想要访问b.com的资源。

浏览器从安全角度考虑限制了这种行为。所以访问失败了。

解决方案主要有两种:

1.JSONP

2.CORS

JSONP

JSONP方案是将数据放在服务端的javascript脚本中,请求这个javascript。由于浏览器不限制javascript的跨域访问,因此服务端只要把数据放在这个伪javascript中就可以了。需要服务端定义好存有JSON数据的javascript脚本。

CORS

CORS是服务端通过响应请求中的ORIGIN头,设置Access-Control-Allow-Origin头,指定允许跨域的域名来允许跨域访问的。

浏览器在请求中带一个ORIGIN的头:

服务端如果允许这个Origin的域名访问本站点,那么在返回的http Response头中加上一个Access-Control-Allow-Origin,它的值包含请求中Origin带的域名。那么浏览器就可以访问服务器的Response。应答如下:

修改代码很简单,只要在response中加入Access-Control-Allow-Origin头部就行。

  private static void responseCORS(HttpServletResponse response) {
        response.addHeader("Access-Control-Allow-Origin", "*");
        response.addHeader("Access-Control-Allow-Methods", "GET, POST, OPTIONS");
        response.addHeader("Access-Control-Allow-Headers", "Origin, Accept, Accept-Language, Content-Language, Content-Type");
   }
时间: 2024-10-08 05:59:39

Java服务端用CORS方法解决浏览器跨域问题的相关文章

解决浏览器跨域限制发送ajax请求

一.什么是浏览器跨域限制?本质是什么? 所谓浏览器跨域限制,其实是为了数据安全的考虑由Netscape提出来限制浏览器跨域访问数据的策略,这是一中约定,正式叫法为浏览器同源策略,目前已经在大多数浏览器中支持. 本质上,所谓浏览器同源策略即:不允许浏览器访问跨域的Cookie,ajax请求跨域接口等.也就是说,凡是访问与自己不在相同域的数据或接口时,浏览器都是不允许的. 最常见的例子:对于前后端完全分离的Web项目,前端页面通过rest接口访问数据时,会出现如下问题: 不允许发送POST请求:在发

解决浏览器跨域问题

最近在做项目过程中遇到客户端访问不同域的服务时,IE10以下的版本不会发起http请求(google和火狐内置支持跨域). 这是为了对跨站点请求伪造攻击采取的安全措施.如果我们需要跨域访问,那该怎么办那? 不用怕IE还是给我们提供了一个解决方法.在IE8以后,它提供了一个XDomainRequest 对象(详细内容请看http://msdn.microsoft.com/en-us/library/cc288060(VS.85).aspx),它是专门跨站数据获取的对象,它里面有两个比较重要的方法:

解决浏览器跨域的几种方式

1.什么是跨域问题 在页面中使用js访问其他网站的数据时,就会出现跨域问题,比如在网站中使用ajax请求其他网站的天气.快递或者其他数据接口时,以及hybrid app中请求数据,浏览器会提     示一下错误: XMLHttpRequest cannot load http://你请求的域名. No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://当前页的域  

通过jsonp解决浏览器跨域问题

一.什么是jsonp 为了便于客户端使用数据,逐渐形成了一种非正式传输协议,人们把它称作JSONP,该协议的一个要点就是允许用户传递一个callback参数给服务端,然后服务端返回数据时会将这个callback参数作为函数名来包裹住JSON数据,这样客户端就可以随意定制自己的函数来自动处理返回数据了. 二.例子 1.客户端写法 这里借用了前端jquery框架对jsonp的支持 var ajaxUrl = "http://192.168.8.141:9092/project/rest/team/m

跨域_解决浏览器跨域的方式

这里介绍的是--disable-web-security参数.这个参数可以降低chrome浏览器的安全性,禁用同源策略,利于开发人员本地调试. (1)新建一个chrome快捷方式,右键“属性”,“快捷方式”选项卡里选择“目标”,添加   --disable-web-security(1图) (2)新建一个chrome快捷方式,右键“属性”,“快捷方式”选项卡里选择“目标”,添加  --args --disable-web-security --user-data-dir(2图) 原文地址:htt

如何解决ajax跨域问题(转)

最近项目中用到json作为系统间交互的手段,自然就伴随着众多ajax请求,随之而来的就是要解决 ajax的跨域问题.本篇将讲述一个小白从遇到跨域不知道是跨域问题,到知道是跨域问题不知道如何解决,再到解决跨域问题,最后找到两种方法解决ajax 跨域问题的全过程. 不知是跨域问题 起 因是这样的,为了复用,减少重复开发,单独开发了一个用户权限管理系统,共其他系统获取认证与授权信息,暂且称之为A系统:调用A系统以B为例.在B系统 中用ajax调用A系统系统的接口(数据格式为json),当时特别困惑,在

如何解决ajax跨域问题

如何解决ajax跨域问题(转) 由 于此前很少写前端的代码(哈哈,不合格的程序员啊),最近项目中用到json作为系统间交互的手段,自然就伴随着众多ajax请求,随之而来的就是要解决 ajax的跨域问题.本篇将讲述一个小白从遇到跨域不知道是跨域问题,到知道是跨域问题不知道如何解决,再到解决跨域问题,最后找到两种方法解决ajax 跨域问题的全过程. 不知是跨域问题 起 因是这样的,为了复用,减少重复开发,单独开发了一个用户权限管理系统,共其他系统获取认证与授权信息,暂且称之为A系统:调用A系统以B为

webapi 解决ajax跨域请求问题

webapi在配置文件中加入这几句就可以解决浏览器跨域请求调用的问题?为什么呢? <system.webServer> <validation validateIntegratedModeConfiguration="false" /> <modules runAllManagedModulesForAllRequests="true" /> <httpProtocol> <customHeaders> &

[JavaEE]Get请求URI中带的中文参数在服务端乱码问题的解决方法

在Get请求中,如果请求参数中带有中文,如 http://localhost:8080/DinnerParty/shop/search?query=多伦多, 在服务端拿到的是乱码. 这是因为客户端提交过去的是UTF-8编码的数据,而服务端解析URi时可能使用的是 iso8859-1编码. 修改tomcat配置文件server.xml <Connector port="8080" protocol="HTTP/1.1"               connect