什么是跨域以及跨域解决方法

一、什么是跨域

当一个请求url的协议、域名、端口三者之间任意一个与当前页面url不同即为跨域

当前页面url

被请求页面url

是否跨域

原因

http://www.test.com

http://www.test.com/a.html

同源(协议、域名、端口号相同)

http://www.test.com

https://www.test.com/a.html

跨域

协议不同(http/https)

http://www.test.com

http://www.baidu.com/

跨域

主域名不同(test/baidu)

http://www.test.com

http://a.test.com/

跨域

子域名不同(www/blog)

http://www.test.com:8080

http://www.test.com:1234/

跨域

端口号不同(8080/7001)

 

二、跨域解决方法

出于安全的考虑,浏览器允许跨域写,而不允许跨域读

(1)法一:设置header头

header("Access-Control-Allow-Origin: *"); (在该方法最开始处加上)

访问控制允许同源",这是由于ajax跨域访问引起的

(2)法二:jsonp (ajax跨域)

如:

  $(document).ready(function(){

   var url='http://localhost:8080/WorkGroupManagment/open/getGroupById"

       +"?id=1&callback=?';

   $.ajax({

     url:url,

     dataType:'jsonp',

     processData: false,

     type:'get',

     success:function(data){

       alert(data.name);

     },

     error:function(XMLHttpRequest, textStatus, errorThrown) {

       alert(XMLHttpRequest.status);

       alert(XMLHttpRequest.readyState);

       alert(textStatus);

     }});

   });

3)比较一下json与jsonp格式的区别:

json格式:

{

    "message":"获取成功",

    "state":"1",

    "result":{"name":"工作组1","id":1,"description":"11"}

}

jsonp格式:

callback({

    "message":"获取成功",

    "state":"1",

    "result":{"name":"工作组1","id":1,"description":"11"}

})

jsonp比json外面有多了一层,callback()。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
跨域(Cross-Origin)指的是在浏览器中,当一个网页的 JavaScript 代码尝试访问不同源(即不同域名、端口或协议)的资源时,就会触发跨域问题。浏览器为了保护用户的安全,限制了跨域资源的访问。 跨域问题可以通过以下几种方式进行解决: 1. JSONP(JSON with Padding):JSONP 是一种利用 `<script>` 标签可以跨域加载资源的特性来实现跨域请求的方法。服务器端返回的数据需要包裹在一个函数调用中,前端通过动态创建 `<script>` 标签来获取数据。但是 JSONP 只支持 GET 请求,并且存在安全性问题,容易受到 XSS 攻击。 2. CORS(Cross-Origin Resource Sharing):CORS 是一种现代浏览器支持的跨域解决方案。它通过在服务器端设置响应头来控制是否允许跨域请求。具体来说,服务器需要在响应头中设置 `Access-Control-Allow-Origin` 字段来指定允许的源(域名、端口或通配符 *),以及其他相关的 CORS 相关字段。通过这种方式,浏览器会根据响应头的配置判断是否允许跨域请求。 3. 代理服务器:可以通过在服务器端设置代理服务器来解决跨域问题。前端代码发送请求给同源的服务器,然后由服务器端代理转发请求到目标服务器,并将响应结果返回给前端。这种方式需要在服务器端进行配置,并且会增加服务器的负载。 4. WebSocket:WebSocket 是一种全双工通信协议,它可以在浏览器和服务器之间建立持久连接。由于 WebSocket 协议并不受同源策略的限制,因此可以用于跨域通信。 5. postMessage:postMessage 是一种在不同窗口或 iframe 之间进行跨域通信的方法。通过调用 `window.postMessage` 方法,可以在不同窗口之间传递消息。 需要注意的是,以上解决方案的可行性和适用性取决于具体的情况和需求。在使用时需要根据实际情况选择合适的解决方案。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值