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. Maven 生命周期的概念(指令默认顺序执行)

    生命周期的概念 IDEA中使用maven构建项目都集中放到了窗口右侧"Maven Projects"中,点击该区域可以直观的看到,maven中几个常用指令都归类为LifeCycle ...

  2. 「UVA12004」 Bubble Sort 解题报告

    UVA12004 Bubble Sort Check the following code which counts the number of swaps of bubble sort. int f ...

  3. 「Luogu P2015」二叉苹果树 解题报告

    题面 一个二叉树,边数为n\((2<n\le 100)\),每条边有一个权值,求剪枝后剩下p\((1<p<n)\)条边,使p条边的权值和最大 还看不懂?-- 2 5 input:5 ...

  4. spring cloud微服务快速教程之(三)声明式访问Feign、负载均衡Ribbon

    0-前言 eureka实际上已经集成了负载均衡调度框架Ribbon: 我们有了各个微服务了,那怎么来调用他们呢,一种方法是可以使用 RestTemplate(如:String str= restTem ...

  5. Python基础(一):初识基本数据类型

    这个系列主要是对以往学过的Python3基础的总结和回顾. Python的基本数据类型包含数字.字符串.列表.元组.字典.集合几大类. 在介绍基本数据类型之前,先说明三个Python内建方法,有助于认 ...

  6. docker-覆盖网络

    docker network rm docker_gwbridge Error response from daemon: Error response from daemon: network ne ...

  7. Redis系列之----Redis的数据类型及使用场景

       Redis是一个开源的.高性能的.基于键值对的缓存与存储系统,能够提供多种不同的键值数据类型来适应不同场景下的缓存和存储需求.    Redis中所有的数据都存储在内存中,因此读写速度非常快,相 ...

  8. 通过例子学习C++(二)最小公倍数

    本文是通过例子学习C++的第二篇,通过这个例子可以快速入门c++相关的语法. 题目要求:输入两个整数,求其最小公倍数. 解答方法一:两个数的最小公倍数,是这两个数中的大数,或者是这2个数的倍数中的最小 ...

  9. 一次asp.net core3.1打造webapi开发框架的实践

    aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAigAAAAbCAYAAABWfHSvAAAH30lEQVR4nO1dy5GsMAx80RIESRAEST ...

  10. APICloud开发者进阶之路 | UIPickerView 模块示例demo

    本文出自APICloud官方论坛 rongCloud2  3.2.8 版本更新后添加了发送小视频接口,发送文件接口. rongCloud2  概述 融云是国内首家专业的即时通讯云服务提供商,专注为互联 ...