1. ajax的跨域问题是:前台调用后台服务接口的时候,如果两个部分不再同一个域的时候就会出现跨域问题,简而言之就是,前台无法调用后端接口的问题。

 

2. 为什么会出现ajax跨域问题

A. 浏览器限制的问题,当浏览器检测返现出跨域问题的时候,会自动拦截。

B. 跨域端口号不一样。

C. 发出的请求只要不是XHR(XMLHttpRequest)请求,就不会发生跨域问题。

 ajax跨域的问题

3. 解决思路

A. 因为当出现的请求是XHR的格式的时候会发现跨域问题。所以处理的方法,可以将返回的格式修改成其他格式如jsonP,

Jsonp的缺点:后台代码需要修改,即服务器代码需要修改。支持get提交。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

二.常见jAVAEE的架构的论述

1.请求过程

 ajax跨域的问题

 ajax跨域的问题


2. 解决跨域的方法

 ajax跨域的问题

这种方式,直接从浏览器中发出去请求请求被调用方。在被调用方上做相应的修改,修改是根据HTTP协议关于跨域的先关规定进行的,就是在返回头上增加以一些字段,告诉浏览器也允许调用。方法二。直接通过浏览转出去。通过HTTP转发的时候,这个是通过修改调用方处理的。

被调用方解决,是基于支持跨域的解决思路,基于http协议关于跨域方面的一些规定,在响应头里加允许调用字段,跨域请求是直接从浏览器发送过去的;

调用方解决:是基于隐藏跨域的解决思路,跨域请求不会直接从浏览器发到被调用方,而是从中间的http服务器转发过去的。

 

三.具体解决方法

服务端实现,Http服务器

被调用方

Fiter解决方式

1. 区分简单请求和非简单请求

a.简单请求

请求方式是GET/HEAD/POST,请求头header里面无自定义的头,

content-Typetext/painmultipart/form-dataapplication/x-www-form-urlencoded

b.非简单的请求

请求方式是putdelete方法的ajax请求,发送的json格式的ajax请求,带自定义的ajax请求;非简单请求会向浏览器发出两个请求,第一次option校验,校验通过,再次发送请求。在设置的时候,可以设置预警命令的缓存机制,可以有效的解决多次请求的问题。设置option协议之后,加载一次之后,就不会再次加载。【处理方法设置报文头 Access-Control-Max-Age=3600: response.addHeader("Access-Control-Max-Age", "3600");

 

2. cookie的跨域

Response.addhear添加res.addHeader("Access-Control-Allow-Credentials", "true")允许使用cookie

 

3. 带自定义头的跨域问题

String headers = req.getHeader("Access-Control-Request-Headers");//获取自定义的头

// 支持所有自定义头,将获取的自定义头,重新放入头信息中

if (!org.springframework.util.StringUtils.isEmpty(headers)) {

res.addHeader("Access-Control-Allow-Headers", headers);

}

 

 

 

 

 

相关文章: