跨域、同源策略

本文介绍了浏览器的同源策略,它是保障网络安全的基础,规定了只有同源的资源才能相互交互。同源策略包括协议、域名和端口必须一致。接着,文章讨论了AJAX跨域的问题,通过示例展示了浏览器在接收到资源前会检查其来源,导致跨域请求被阻止。针对跨域问题,提出了JSONP、WebSocket和CORS(重点讲解了CORS的简单和非简单请求)等解决方案。
摘要由CSDN通过智能技术生成

1、浏览器同源策略

浏览器最核心&最基本的安全功能;若无此策略,不同源的网站可以获取到cookie等,互联网就无安全可言;

同源三要素:

  • 协议相同
  • 域名相同
  • 端口相同

eg:

基于:http://www.example.com/dir/page.html

URL结果原因
http://www.example.com/dir2/other.html同源只有路径不同
http://www.example.com/dir/inner/another.html同源只有路径不同
https://www.example.com/secure.html失败协议不同
http://www.example.com:81/dir/etc.html失败端口不同 ( http:// 默认端口是80)
http://www.baidu.com/dir/other.html失败主机不同

2、AJAX如何规避跨域

2.1、AJAX跨域请求

本地用nginx或者openresty起一个服务,然后打开火狐或者谷歌浏览器,在console中输入:

$.ajax({                       
        type:"get",
        url:"http://localhost:80",
        async:true,
        success:function(res){
            console.log(res)
        },
        error:function(){
            console.log("error")
        }
    });

 返回结构如下:

已拦截跨源请求:同源策略禁止读取位于 http://localhost:5000/ 的远程资源。(原因:CORS 头缺少 'Access-Control-Allow-Origin')。

查看nginx或者openresty日志,服务端有请求记录,说明:浏览器在接收加载资源之前对其来源进行了检查,然后限制加载,而不是通过对发出的请求进行检查是否同源,然后决定是否对该请求加以限制来实现。

2.2、解决方案

  • JSONP
  • WebSocket
  • CORS(Cross-Origin Resource Sharing)

2.2.1、CORS

浏览器将CORS请求分成两类:简单请求(simple request)和非简单请求(not-so-simple request)。

  • 简单请求:需满足一下条件

(1) 请求方法是以下三种方法之一:

  • HEAD
  • GET
  • POST

(2)HTTP的头信息不超出以下几种字段:

  • Accept
  • Accept-Language
  • Content-Language
  • Last-Event-ID
  • Content-Type:只限于三个值application/x-www-form-urlencodedmultipart/form-datatext/plain

 根据服务端返回中的Access-Control-进行处理。

  • 非简单请求:不同时满足上述请求

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值