ajax跨域请求如何解决?什么是跨域?

2020-05-12 22:26:34 java常见问答 8044

大家有了解跨域的含义吗?什么是跨域问题?今天小编给大家带来的则是ajax的跨域,那么跨域问题是如何进行解决的呢?接下来让我们一起来了解下吧。

跨域问题来自于JavaScript的"同源策略",也就是说只有协议加主机名加端口号 (如存在)相同,那么就允许相互访问。

即JavaScript只可以访问和操作自己域下的资源,不可以访问和操作其它域下的资源。

跨域问题是针对JS和ajax的,html本身不存在跨域问题。

一、如何去解决跨域问题?

1、响应头添加Header允许访问

2、jsonp只支持get请求不支持post请求

3、httpClient内部转发

4、使用接口网关——nginx、springcloud zuul (这个是互联网公司常用的解决方案)

解决方式一:

响应头添加Header允许访问

跨域资源共享(CORS)Cross-Origin Resource Sharing

这个跨域访问的解决方案的安全基础是基于"JavaScript无法控制该HTTP头"

它要通过目标域返回的HTTP头来授权是否允许跨域访问。

response.addHeader(‘Access-Control-Allow-Origin:*’);//允许所有来源访问

response.addHeader(‘Access-Control-Allow-Method:POST,GET’);//允许访问的方式

解决方式二:

jsonp 只支持get请求不支持post请求

用法:

1、dataType改为jsonp 

2、jsonp : "jsonpCallback"————发送到后端实际为http://a.a.com/a/FromServlet?userName=644064&jsonpCallback=jQueryxxx 

 3、后端获取get请求中的jsonpCallback 

4、构造回调结构

JSONP实现原理

在同源策略之下,在某一个服务器下的页面是不能够获取到这个服务器之外的数据的,也就是一般的ajax是不可以进行跨域请求的。

但是img、iframe 、script等标签就是一个特殊的存在了,这些标签能够通过src属性请求到其他服务器上的数据。

解决方式三:

httpClient内部转发

实现的原理真的很简单,假如想要在B站点中通过Ajax访问A站点获取结果,那么就一定会有ajax跨域问题,可是B站点当中访问B站点获取结果,不存在跨域问题,这种方式实际上是在B站点中ajax请求访问B站点的HttpClient,再通过HttpClient转发请求获取A站点的数据结果。

可是这种方法产生了2次请求,效率低,但内部请求,抓包工具无法分析,安全。

解决方式四:

使用nginx搭建企业级接口网关方式

www.a.a.com不可以直接请求www.b.b.com的内容,可以通过nginx,根据同域名,但项目名不同进行区分。

这个是什么意思呢?

假如我们公司域名是www.nginxtest.com

在我们要访问www.a.a.com通过www.nginxtest.com/A访问,并通过nginx转发到www.a.a.com

在我们要访问www.b.b.com通过www.nginxtest.com/B访问,并通过nginx转发到www.a.a.com

在访问公司的域名的时候,是"同源"的,但是,只是项目名不一样,这个时候项目名的作用只是为了区分,方便转发。

以上就是今天所讲的java常见问答内容,更多知识的了解,请继续关注本网站。

ajax datatype参数会遇到什么问题?

ajax请求的五个步骤是什么?五个步骤整理

Ajax工作原理是什么?怎样实现?