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 实现局部刷新

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

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

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

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

  (2)、hash

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

  (3)、postMessage

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

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

  1. var ws = new WebSocket('wss://localhost:3000');
  2.  
  3. ws.onopen = function(evt){
  4. console.log('Connection open ...');
  5. ws.send('hello');
  6. }
  7.  
  8. ws.onmessage = function(evt){
  9. console.log('Received Message:'+ evt.data);
  10. ws.close();
  11. }
  12.  
  13. ws.onclose = function(evt){
  14. console.log('Connection closed.');
  15. }

  (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. 「洛谷P1080」「NOIP2012提高组」国王游戏 解题报告

    P1080 国王游戏 题目描述 恰逢 \(H\)国国庆,国王邀请\(n\)位大臣来玩一个有奖游戏.首先,他让每个大臣在左.右手上面分别写下一个整数,国王自己也在左.右手上各写一个整数.然后,让这 \( ...

  2. 动态规划最短路径LintcodeNO110

    动态规划最短路径LintcodeNO110 简单的dp题,没啥好说的... class Solution { public: /** * @param grid: a list of lists of ...

  3. 通过例子学习C++(三)最大公约数,并知其然

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

  4. 自定义实现的ArrayList以及自定义实现的Iterator迭代器

    ArrayList的底层是长度可动态变化的数组,其适用于查找多,修改少的情况,原因是数组的元素的增加删除元素会涉及大量元素的移动,效率比较低,ArrayList中的元素可以重复,与插入时的顺序相同,可 ...

  5. YOLO V3训练自己的数据集

    数据的输入几乎和Faster rcnn一样,标签格式xml是一样的. 相比Faster rcnn,数据多了一步处理,通过voc_annotation.py将图片路径和bbox+class存储在txt下 ...

  6. php5升php7代码修改整理

    1. 为什么升级至php7 a.安全需要 过早以至于不维护的php版本难免会有未修补的漏洞,安全性要求较高的行业是要及时升级的. b.性能提升(开启opcache hugepage) 据说性能提升一倍 ...

  7. max_element( )

    直接用这个函数 , 会比自己写个for 判断快的多了 . position=max_element(a,a+n)-a; position  代表找到最大元素的位置 , max_element( ) 的 ...

  8. electron教程(番外篇二): 使用TypeScript版本的electron, VSCode调试TypeScript, TS版本的ESLint

    我的electron教程系列 electron教程(一): electron的安装和项目的创建 electron教程(番外篇一): 开发环境及插件, VSCode调试, ESLint + Google ...

  9. Android studio 连接真机

    首先用数据线连接真机 1.打开开发者模式(小米手机mix2s为例 设置->我的设备->全部参数->连续点击MIUI版本——开启成功) 2.在更多设置中找到系统安全设置——允许安装未知 ...

  10. EFCore-脚手架Scaffold发生Build Failed问题的终极解决

    大家在使用EntityFrameworkCore的DBFirst的脚手架(Scaffolding)时应该遇到过Build Failed的错误,而没有任何提示,我也遇到过不少次,目前已经完美解决并将排查 ...