为什么会设置同源策略

> 适用于浏览器的一种资源访问策略 > 同源策略(Same origin policy)是一种约定,它是浏览器最核 心也最

基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受 到影响。可以说Web是构建在同源策略基 础之上的

,浏览器只是针对同源策略的一种实现。

浏览器为什么使用同源策略

- 同源策略,它是由Netscape提出的一个著名的安全策略。 - 现在所有支持 JavaScript 的浏览器都会使用这个策略。 - 所谓同源是指,域名/IP/主机,协议,端口相同。

- 在浏览器的js中,通过代码(脚本)去访问网络资源的时候会应用该策略 假设在a页面的地址是(http://www.baidu.com/a.html),那么a页面所在的源信息是:协议:http,域名:baidu.com, 端口:80,那么在这个页面中通过js去访问另外一个资源:(http://www.baidu.com/b.html),那么这个时候会使用同源策略进行
检测,上面两个页面的协议、域名、端口
是相同的,那么这时候一个同源请求,如果访问的是:(http://www.qq.com/b.html),那么很明显这个时候就是非同源请
求,这个时候,请求会受到一定的限制。

以 http://www.baidu.com/a.html 为例,以下都是非同源的:
- http://www.qq.com/b.html
- http://www.baidu.com:8080/b.html
- http://baike.baidu.com/b.html
- https://www.baidu.com/b.html
- http://baidu.com/b.html 注意:www其实也是一个二级子域名,只是习惯把www和顶级域名绑定在一起去使用而已

我们使用ajax去请求资源的时候,就被使用同源策略进行检测
同源策略是适用于浏览器的,也就是说如果我们发送了一个跨域的请求,服务器是能接收到并能处理和返回的,但是浏览器
在接收到返回数据以后,会比较他们的域是否相同,如果不相同,拒绝接收和处理!

解决

  - 设置一个特有的头信息:Access-Control-Allow-Origin,当浏览器接收到非同源数据的时候,会首先去头信息看Access-Control-Allow-Origin字段里
   面的值,如果当前域在Access-Control-Allow-Origin里面有包含,则忽略同源策略
- 后端代理,因为后端是不受限于同源策略的,所以,我们可以让我们的后端去访问非同源的资源,然后我们去访问我们的后端,我们把自己的后端作为一个代理
- flash代理:和后端代理类似 ActionScript

主要使用方法JSONP

jsonp的方法的概述
在html标签中 有些标签引用文件是不会受同源策略的影响。所以我们可以用script标签来引用不同域的文件
所以我们可以创建一个script标签
然后向其中的src中添加要拿去的文件地址如
var scriptElement = document.createElement('script');
scriptElement.src = 'https://suggest.taobao.com/sug?code=utf-8&q='+this.value+'&callback=miaov';
这其中的code=utf-8&q='+this.value
q后的值表示要搜索的参数 要添加code=utf-8这个编码不然不识别中文 callback=miaov';这个可以在后面添加加 如下的名为miaov的函数 具体的操作搜索jsonp
function miaov(data) {

if (data.result.length) {

ul.style.display = 'block';

let html = '';
data.result.forEach(item => {
html += '<li><a target="_blank" href="https://s.taobao.com/search?q='+item[0]+'">'+ item[0] +'</a></li>'
});
ul.innerHTML = html;
} else {
ul.style.display = 'none';
}
}

跨域访问 - 跨域请求 同源策略概念对跨域请求的影响 及几种解决跨域请求的方法如 jsonp的更多相关文章

  1. Ajax跨域请求 同源策略与Jsonp

    同源策略 同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之上的 ...

  2. Django之跨域请求同源策略

    同源策略: 首先基于安全的原因,浏览器是存在同源策略这个机制的,同源策略阻止从一个源加载的文档或脚本获取或设置另一个源加载的文档的属性. 而如果我们要跳过这个策略,也就是说非要跨域请求,那么就需要通过 ...

  3. ajax异步请求/同源策略/跨域传值

    基本概念 Ajax 全称是异步的 JavaScript 和 XML . 通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以在不重新加载整个网页的情况下,对网页的某部分进 ...

  4. JavaScript JSON timer(计时器) AJAX HTTP请求 同源策略 跨域请求

    JSON 介绍 1. JSON: JavaScript Object Notation 是一种轻量级的数据交换格式. 它基于ECMAScript的一个子集. JSON采用完全独立于语言的文本格式,但是 ...

  5. 跨域Ajax原理以及浏览器同源策略

  6. JS同源策略和跨域访问

    同源策略(Same origin policy)是一种约定,它是浏览器最核心也最基本的安全功能,如果缺少了同源策略,则浏览器的正常功能可能都会受到影响.可以说Web是构建在同源策略基础之上的,浏览器只 ...

  7. JSONP跨域的script标签请求为什么不受同源策略的限制?

    在复习跨域的时候,复习到了JSONP跨域,大家都知道JSONP跨域是通过动态创建script标签,然后通过其src属性进行跨域请求的,前端需要一个数据处理的回调函数,而服务端需要配合执行回调函数,放入 ...

  8. Jsonp的js实现,跨域请求,同源策略机制

    Jsonp的js实现,跨域请求,同源策略机制1.跨域请求:请求URL的协议,域名,端口三者之间任意一个与当前页面地址不同即为跨域 存在跨域的情况: 网络协议不同,端口不通,域名不同,子域名不同,域名和 ...

  9. 同源策略和Ajax跨域访问

    1. 什么是同源策略 理解跨域首先必须要了解同源策略.同源策略是浏览器上为安全性考虑实施的非常重要的安全策略.    何谓同源:        URL由协议.域名.端口和路径组成,如果两个URL的协议 ...

随机推荐

  1. Android实用代码七段(三)

    正文  一.获取已经安装APK的路径 PackageManager pm = getPackageManager(); for (ApplicationInfo app : pm.getInstall ...

  2. thinkphp5学习

    1.路由的问题 1.1 // pathinfo分隔符 'pathinfo_depr' => '-'设置-后,如果访问的是/index/index 化,路由规则就不能解析 必须改为index-in ...

  3. decltype操作符

    关于decltype操作符的说明: 1.在C++中,decltype作为操作符,用于查询表达式的数据类型.decltype在C++11标准制定时引入,主要是为泛型编程而设计,以解决泛型编程中,由于有些 ...

  4. 浅谈 ThreadLocal

    有时,你希望将每个线程数据(如用户ID)与线程关联起来.尽管可以使用局部变量来完成此任务,但只能在本地变量存在时才这样做.也可以使用一个实例属性来保存这些数据,但是这样就必须处理线程同步问题.幸运的是 ...

  5. Android类加载机制及热修复实现

    Android类加载机制 Dalvik虚拟机如同其他Java虚拟机一样,在运行程序时首先需要将对应的类加载到内存中.而在Java标准的虚拟机中,类加载可以从class文件中读取,也可以是其他形式的二进 ...

  6. 【bug清除】新Surface Pro使用OneNote出现毛刺现象的解决方案

    在写字的时候,左手触摸Surface的金属外壳背面,大概两个手指指肚大小.问题亲测可以得到解决. 推测是设备使用时接地没有做好,导致电磁笔出现偏移.问题初步锁定在新笔的倾斜感应上. 参考资料: htt ...

  7. LeetCode题型分类及索引

    目录 这是一个对LeetCode题目归类的索引,分类标准参考了July大神的<编程之法>以及LeetCode的tag项.分类可能还不太合理,逐步完善,请见谅~ 题主本人也在一点一点的刷题, ...

  8. vue-入门

    数据绑定   <!--步骤1:创建html文件--> <!DOCTYPE html> <html lang="en"> <head> ...

  9. Hazelcast分布式

    一般的应用正式环境中都不止一台服务器(也就是说是集群的),那么如果只是简单的将数据预加载到内存,那么就会有数据不同步的现象. (更新了其中一台JVM,另一台JVM并不会收到通知从而保持数据同步). 这 ...

  10. 新概念英语(1-131)Don't be so sure

    Lesson 131 Don't be so sure! 别那么肯定! Listen to the tape then answer this question. What's the problem ...