大家有了解跨域的含义吗?什么是跨域问题?今天小编给大家带来的则是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常见问答内容,更多知识的了解,请继续关注本网站。