1、什么是同源策略及限制?

  同源策略限制从一个源加载的文档或者脚本如何与来自另一个源的资源进行交互。

这是一个用于隔离潜在恶意文件的关键安全机制。

  所谓同源,就是指两个页面具有相同的协议,主机(也常说域名),端口,三个要素缺一不可。

  所谓限制,即不是一个源的文档或者脚本不允许操作另一个:

  1)、Cookie、LocalStorage和 IndexDB无法读取

  2)、DOM 无法获得

  3)、AJAX 请求不能发送

2、前后端如何通信?

  Ajax            WebSocket             CORS

3、如何创建 Ajax?

  Ajax的原理简单来说通过XmlHttpRequest对象来向服务器发异步请求,从服务器获得数据,然后用javascript来操作DOM而更新页面。

这其中最关键的一步就是从服务器获得请求数据

  ajax过程:

  1)、创建 XMLHttpRequest 对象,也就是创建一个异步调用对象
  2)、创建一个新的 HTTP 请求,并指定该 HTTP 请求的方法、URL 及验证信息
  3)、设置响应 HTTP 请求状态变化的函数
  4)、发送 HTTP 请求
  5)、获取异步调用返回的数据
  6)、使用 JavaScript和 DOM 实现局部刷新

function load() {
/*1、创建XMLHttpRequest*/
var xhr;
if (window.XMLHttpRequest) {
// IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
xhr = new XMLHttpRequest();
} else {
// IE6, IE5 浏览器执行代码
xhr = new ActiveXObject("Microsoft.XMLHTTP");
} /* 2、向服务器发送请求(open()和send())
* open(method,url,async):
* 1)、method:请求的类型;GET 或 POST
* 2)、url:文件在服务器上的位置
* 3)、async:true(异步)或 false(同步)
*send(string):
* string:仅用于 POST 请求
*/
xhr.open('get', 'getUser.php?user=xxx&pass=xxxx', true);
xhr.send(); /*3、处理服务器响应
*onreadystatechange 事件
*readyState 状态(0,1,2,3,4)
*status (200,404,...)
*/
xhr.onreadystatechange = function() {
if (xhr.readyState == 4 && xhr.status == 200) {
// responseText获取字符串形式的响应数据 responseXML获取XML形式的响应数据
console.log(xhr.responseText);
}
}

4、跨域通信的几种方式?

  (1)、jsonp(需要服务端支持)

  <button id="btn">点击</button>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<script>
$('#btn').click(function(){
//向头部输入一个脚本,该脚本发起一个跨域请求
$("head").append("<script src='http://localhost:9090/student?
callback=showData'><\/script>");
}); function func(res){
  alert(res.message+res.name+'你已经'+res.age+'岁了');
}
</script>

  (2)、hash

//场景是当前页面 A 通过iframe 或 frame 嵌入了跨域的页面 B
//在 A 中的伪代码如下:
var B = document.getElementsByTagName('ifame');
B.src = B.src + '#' + 'data'; //在B中的伪代码如下:
window.onhashchange = function(){
var data = window.location.hash;
}

  (3)、postMessage

//窗口A(http: A.com)向跨域的窗口B(http://B.com)发送信息
window.postMessage('data', 'http://B.com'); //在窗口B中监听
window.addEventListener('message',function(event){
console.log(event.origin); //http://A.com
console.log(event.source); //B window
console.log(evnet.data); //data
});

  (4)、webSocket(需要服务端支持)

var ws = new WebSocket('wss://localhost:3000');

ws.onopen = function(evt){
console.log('Connection open ...');
ws.send('hello');
} ws.onmessage = function(evt){
console.log('Received Message:'+ evt.data);
ws.close();
} ws.onclose = function(evt){
console.log('Connection closed.');
}

  (5)、CORS

  CORS即“跨域资源共享”,这是一种最常用的跨域实现方式,一般需要后端人员在处理请求数据的时候,添加允许跨域的相关请求头信息。

  大致思路是这样的:首先获取请求对象的信息,比如Origin字段,通过预先配置的参数判断请求是否合法,

  然后设置相应对象response的头信息,实现跨域资源请求。

web通信类几个相关知识的更多相关文章

  1. web跨域及cookie相关知识总结

    原文:web跨域及cookie相关知识总结   之前对于跨域相关的知识一致都很零碎,正好现在的代码中用到了跨域相关的,现在来对这些知识做一个汇总整理,方便自己查看,说不定也可能对你有所帮助. 本篇主要 ...

  2. DesignPattern系列__08UML相关知识

    前言 现在,很少有人和90年代一样,自己去实现一个软件的各个方面,也就是说,在工作中,和人沟通是必备的技能.那么,作为一枚码农,如何和他人沟通呢?这就要依靠本文的主题了--UML. 简介 UML--U ...

  3. web聊天相关知识

    http相关知识 http是无状态,请求,响应模式的通信模式,就是用户每次通过浏览器点击一下页面,都需要重新与web服务器建立一下连接,且发送自己的 session id 给服务器端以使服务器端验证此 ...

  4. 【Python五篇慢慢弹(5)】类的继承案例解析,python相关知识延伸

    类的继承案例解析,python相关知识延伸 作者:白宁超 2016年10月10日22:36:57 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给 ...

  5. WEB相关知识和Tomcat服务器

    WEB相关知识 1.Internet上供外界访问的Web资源分为: 静态web资源:指web页面中供人们浏览的数据始终是不变的. 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间 ...

  6. 移动WEB像素相关知识

    了解移动web像素的知识,主要是为了切图时心中有数.本文主要围绕一个问题:怎样根据设备厂商提供的屏幕尺寸和物理像素得到我们切图需要的逻辑像素?围绕这个问题以iphone5为例讲解涉及到的web像素相关 ...

  7. 背水一战 Windows 10 (76) - 控件(控件基类): Control - 基础知识, 焦点相关, 运行时获取 ControlTemplate 和 DataTemplate 中的元素

    [源码下载] 背水一战 Windows 10 (76) - 控件(控件基类): Control - 基础知识, 焦点相关, 运行时获取 ControlTemplate 和 DataTemplate 中 ...

  8. 背水一战 Windows 10 (75) - 控件(控件基类): FrameworkElement - 基础知识, 相关事件, HorizontalAlignment, VerticalAlignment

    [源码下载] 背水一战 Windows 10 (75) - 控件(控件基类): FrameworkElement - 基础知识, 相关事件, HorizontalAlignment, Vertical ...

  9. 04StringBuffer相关知识、Arrays类、类型互换、正则、Date相关

    04StringBuffer相关知识.Arrays类.类型互换.正则.Date相关-2018.7.12 1.StringBuffer A:StringBuffer的构造方法: public Strin ...

随机推荐

  1. teamviewer早期版本下载链接

    https://www.teamviewer.cn/cn/download/previous-versions/

  2. HDU2089 不要62 题解 数位DP

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2089 题目大意:求区间 \([l,r]\) 范围内不包含数字"4"且不包含连续的数 ...

  3. 1081 检查密码 (15分)C语言

    本题要求你帮助某网站的用户注册模块写一个密码合法性检查的小功能.该网站要求用户设置的密码必须由不少于6个字符组成,并且只能有英文字母.数字和小数点 .,还必须既有字母也有数字. 输入格式: 输入第一行 ...

  4. 小小知识点(三十八)MPSK和MQAM调制的实现——利用IQ调制

    IQ调制的原理 (一)调制基本原理 (二)调制基本原理 利用IQ调制实现MPSK(QPSK 8PSK BPSK)和MQAM(16QAM 64QAM)调制     (一)利用IQ调制实现QPSK调制   ...

  5. tensorflow数据读取机制tf.train.slice_input_producer 和 tf.train.batch 函数

    tensorflow中为了充分利用GPU,减少GPU等待数据的空闲时间,使用了两个线程分别执行数据读入和数据计算. 具体来说就是使用一个线程源源不断的将硬盘中的图片数据读入到一个内存队列中,另一个线程 ...

  6. SharePoint REST 上传文件请求403错误

    最近,需要在SharePoint上传文件到文档库,但是,上传的过程报错了. 错误代码 { "error": { "code": "-213057525 ...

  7. 优化webpack构建时间的小技巧

    在之前工作的地方,我们一直使用webpck去构建.但是,经过长达四年的更新迭代,每个人都在同一个项目中做了不同的操作和更新,这导致我们生产构建时间达到了惊人的一分半,watch模式的rebuild也达 ...

  8. JS的var和let的区别(详细讲解)

    let是ES6新增的,它主要是弥补var的缺陷,你也可以把let看做var的升级版.下面我就来详细讲讲var和let的区别 相同点: var和let都有函数级作用域 不同点: (1)var是全局作用域 ...

  9. 2D地图擦除算法

    . 关于2D地图擦除算法,去年我写过一个实现,勉强实现了地形擦除,但跟最终效果还相差甚远,这次我写了一个完整的实现,在此记录,留个印象. . 去年的版本<<算法 & 数据结构--裁 ...

  10. 「2.0」一个人开发一个App,小程序从0到1,文件剖析

    不知你是不是见到“文件剖析”这4个大字,才点进来看一看的?如果真是的话,那我可以坦诚.真心.负责任地告诉你:你上当了,你上了贼船啦,如果你现在想跳的话,还来得及,反正茫茫大海中,鲨鱼正缺搞程序的人.说 ...