六、什么是跨域

什么是跨域:

1. 什么是跨域

跨域:协议,域名,端口只要有一个不同就算跨域 ,比如:http://ic2c.cc 和 https://ic2c 就是跨域…

1.例如tomcat下,部署了2个应用,A应用调用B的jsp页面,这算不算跨域?:
算,你如果能同时启动两个tomcat,说明你两个端口号不同,那么当一个端口号下的程序调用另一个,就是跨域。比如dubbo,就会涉及到跨域的情况。

2. 如何实现跨域

在这里插入图片描述

java跨域的含义:
在说跨域之前,首先要了解一下same-origin policy,即同源策略。
same-origin policy简单的说,浏览器中访问的A网站中不能访问B网站中的数据,除非A,B网站是同源的,即对应的协议、域名、端口完全相同。否则是从不同origin得来的,不允许被访问。

这就产生了跨域的问题,浏览器拦截了服务器端返回的响应,而不是浏览器拦截了请求,想要能够跨域访问,需要浏览器和服务器同时支持跨域。

1.JSONP
在这里插入图片描述

通过在文档中嵌入一个script标记来从另一个域中返回数据。例如在页面中添加一个如下的script标记:

<script src="http://blog.ambergarden.com/someData?callback=some_func"/>

该标记会向http://blog.ambergarden.com/someData发送一个GET请求。在数据返回到客户端后,some_func()函数将会被调用。
该方法的缺点就是:
1.只支持Get,不支持Post;
2.本质上是脚本注入的方式,存在安全隐患;

2.CORS(跨域资源共享):
CORS是一个W3C标准,全称是"跨域资源共享"(Cross-origin resource sharing)。它允许浏览器向跨源(协议 + 域名 + 端口)服务器,发出XMLHttpRequest请求,从而克服了AJAX只能同源使用的限制。
CORS需要浏览器和服务器同时支持。它的通信过程,都是浏览器自动完成,不需要用户参与。对于开发者来说,CORS通信与同源的AJAX通信没有差别,代码完全一样。浏览器一旦发现AJAX请求跨源,就会自动添加一些附加的头信息,有时还会多出一次附加的请求,但用户不会有感觉。
因此,实现CORS通信的关键是服务器。只要服务器实现了CORS接口,就可以跨源通信。

javaweb跨域问题的来源:
当我们在做开发的时候,有时候需要将前后端分别部署在两台或者更多的服务器上面,然后再做前后端通信的时候就会出现无法访问的问题,这个问题的来源主要是因为浏览器的安全策略,不进行设置的话是不允许进行跨域访问的。即时是你在同一台机器上的同一个Tomcat容器中,只要不是同一个项目,通信就无法完成。
详情解读:
其实在这个操作的过程中是分两部分的,首先是页面端发起对后台程序的访问的时候是可以操作的,而且处理后的数据也response回来了,只是浏览器自身的安全处理上不允许这类数据的接受。对于这个问题的解决有很多,比如ajax的访问方式修改为jsonp,或者在服务器端将访问返回的数据的消息头进行修改。这里主要说明第二种方式:在服务器端,返回数据到客户端主要是依靠response进行的操作。加入下面的代码即可实现跨域的数据传输:
respons.setHead(“Access-Control-Allow-Origin”,"")
其中
代表任意连接,这里可以替换为前端页面服务器的ip

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值