浏览器接收响应数据过大_DOM总结:数据通信(HTTP协议和Ajax)
HTTP协议:
一个完整的HTTP请求的过程:1、浏览器会向服务器端发送给一个包含命令和URL的HTTP请求报文;2、当服务器端接收到这个请求报文之后,会进行一系列的计算,向浏览器返回一个包含事务结果的HTTP响应报文;3、浏览器接收到响应报文之后,会将报文的主体显示在浏览器端上。
HTTP报文分为请求报文和响应报文。都是由三部分组成:头行、头部和主体。
头行由三部分构成:方法、主机地址、HTTP的版本
头部:许多的键值对构成
Accept:浏览器端可以接收的媒体类型
Accept-Encoding:浏览器端可以接收的媒体类型的编码的方式
Accept-Language:浏览器端可以接收的语言类型
Cache-Control:缓存策略
Connection:keep-alive
Cookie:浏览器端向服务器端发送的cookie值
Host:主机
Pragma:头域用来包含实现特定的指令,最常用的是no-cache
User-Agent:当前浏览器的版本
GET方法,请求体为空。
响应报文的格式:也是由三部分组成 头行 头部 和主体
头行:HTTP协议版本、HTTP状态码、HTTP状态码描述
expires:缓存的有效时间,如果缓存策略设置了缓存的话,可以设置下expires,赋一个时间戳。
server:服务器端的HTTP服务器使用的是Nginx服务器。
主体:因为访问的是一个页面,所以返回的是一个完整的xml文件。
常见的HTTP方法:
URL构成
protocol + host(hostname + port )+ pathname + search + hash
port、pathname、search、hash都是不必须的。
HTTP版本
1991年,HTTP的原型,有很多设计缺陷 HTTP/0.9
HTTP/1.0版本很快取代了0.9,成为了第一个广泛应用的版本。
HTTP/1.0+ 添加持久的keep-alive连接、虚拟主机支持,以及代理连接支持,称为非官方的事实标准。
HTTP/1.1 校正了结构性缺陷,明确语义,引入重要的性能优化措施,删除不好特性。
常见HTTP状态码
HTTP协议在前端开发中的应用
Asynchronous Javascript and XML
完整的Ajax通信流程
1、创建一个Ajax对象 XHR(readyState:0,status: responseText:)当XHR初始化的时候,readyState=0,另外两个属性的值为空。
2、调用XHR对象的open方法,readyState=1,开启一个请求,以备发送。但是没有向服务器端发请求。xhr.open(method,url [ , async = true]) 默认是异步请求。
调用open方法之后调用xhr.setRequestHeader(header, value),也不一定非要调用它。调用这个方法可以在请求体头部设置头部字段,比如把header的值设为content-type 。如果当前这个请求是表单编码的、文件上传
3、调用send方法,readyState=2,正式向服务器端发送请求。xhr.send([data = null])向服务器端发送请求的请求体里的数据。这个数据可以是string类型,也可以是formdata类型的。
4、当服务器端开始返回数据的时候,浏览器接收到这个数据,readyState=3。
5、浏览器端结束请求时,readyState=4,status=200,responseText=<!DOCTYPE html>
在HTTP2.0的标准里面,我们还可以监听它的xhr.onload事件,可以代替onreadystatechange事件,当readyState=4,&&status=200的时候才会触发。
请求参数序列化:
如果是get请求:需要把查询参数作为字符串,跟在URL后面,
如果这个查询参数是个对象,就需要把这个对象转换成这样一个字符串。
通过这个函数,我们传入一个对象,就会返回我们需要的那个字符串。
GET请求参数序列化
请求体里为null。
POST请求参数序列化
查询参数会作为send的参数。
同源策略:
两个页面拥有相同的协议(protocol)、端口(port)、主机(host),那么这两个页面就属于同一个源(origin)。
如果不满足同源策略的访问,称为:跨域资源访问,W3C定义了CORS,现代浏览器已经实现了对CORS的支持。
CORS标准的原理:
1、浏览器会捕获到A应用往S服务器发起的请求;
2、浏览器根据请求的情况,确定是否需要先作为一次预请求来验证S服务器是否允许发送当前请求过去、如果需要的话,浏览器会发起一个option的请求到S服务器来验证;
3、S服务器会根据浏览器发过来的header信息,验证S服务器对资源的配置信息,然后返回资源的实际控制配置权限,然后浏览器验证请求返回的信息,判断是否将请求发送到S服务器,4、如果可以的话就发送实际的请求到S服务器;如果不行,则异常退出。
4、如果不需要就跳过第三步;
5、S服务器返回请求数据及资源的配置信息至浏览器,然后浏览器验证资源的控制信息是否允许当前实际请求取到数据,
6、如果允许,则发送S服务器,返回数据给A应用。否则就异常退出。
其他跨域技术:
Frame代理
1、A应用要往S服务器取数据时,它会先用iframe请求S服务器上的代理文件,
2、S服务器返回了配置的代理文件,并载入iframe,
3、代理文件载入完成后,A应用将发送的请求通过消息、通信的方式传递给代理文件;
4、代理文件验证A应用是否在预先配置的白名单中,如果在则直接发送请求至S服务器,否则异常退出;
5、服务器返回数据至代理文件,
6、代理文件通过消息机制将请求的结果返回给A应用。
frame代理优点:1、参照cors标准,2、支持各种请求方法、
缺点:需要在目标服务器放置代理文件,它由于首次发起请求需要载入代理文件,在载入代理文件之前的所有请求都会存在一定的延迟,对于低版本浏览器受限于消息通信机制的限制,并发量大的请求返回时可能存在较大的延迟。
JSONP
JSON with padding(填充式JSON)
利用的是script可以跨域,利用script标签,向服务器请求一段JS代码,然后执行这段JS代码,实现跨域。
服务器就会返回一个叫json.js的一个文件,这个js文件里就是一段JS代码。执行handleResponse这个函数。response就是要从服务器端拿取得数据。
Comet
Web Sockets等
浏览器接收响应数据过大_DOM总结:数据通信(HTTP协议和Ajax)相关推荐
- 浏览器接收响应数据过大_交互响应性能之优化FID
由于 FID 需要一个真实用户的交互,所以无法用实验数据测试. 为了在实验数据下预测 FID,通常会用 TBT(Total Blocking Time),具体这个指标后面文章会介绍.他们测量的内容不同 ...
- 浏览器接收响应消息并显示内容
通过响应的数据类型判断其中的内容 Web服务器发送的响应消息会被分成多个包发送给客户端,然后客户端需要接收数据.首先,网卡将信号还原成数字信息,协议栈将拆分的网络包组装起来并取出响应消息,然后将消息转 ...
- 从输入 URL 到浏览器接收的过程中发生了什么事情
从输入 URL 到浏览器接收的过程中发生了什么事情? 原文:http://www.codeceo.com/article/url-cpu-broswer.html 从触屏到 CPU 首先是「输入 U ...
- 【前端问题分析】从输入 URL 到浏览器接收的过程中发生了什么事情?
从触屏到 CPU 首先是「输入 URL」,大部分人的第一反应会是键盘,不过为了与时俱进,这里将介绍触摸屏设备的交互. 触摸屏一种传感器,目前大多是基于电容(Capacitive)来实现的,以前都是直接 ...
- 从输入 URL 到浏览器接收的过程中发生了什么事情?
写得很全面,有待进一步展开.. 从触屏到 CPU 首先是「输入 URL」,大部分人的第一反应会是键盘,不过为了与时俱进,这里将介绍触摸屏设备的交互. 触摸屏一种传感器,目前大多是基于电容(Capaci ...
- c#实现ajax通信:向后台发送JSON字符串,接收响应字符串,并转换为对象
全栈工程师开发手册 (作者:栾鹏) c#教程全解 c#实现ajax通信,通过向服务器后台发送json数据,接收响应数据提交给前台. 其中包含两个主要函数,发送数据,接收响应数据的Http请求响应函数. ...
- 存储在Redis中的数据多大比较合适
存储在Redis中的数据多大比较合适 背景 过大的数据对 Redis 的影响 『过大』的定义是什么 结论 背景 本文是工作中应对一个实际业务场景的调研总结过程.在使用 redis 作为数据缓存的时候, ...
- 服务器向所有浏览器响应数据,浏览器工作原理与实践总结一
一.常用Chrome架构 Chrome 打开一个页面需要启动多少进程?你可以点击 Chrome 浏览器右上角的"选项"菜单,选择"更多工具"子菜单,点击&quo ...
- 406(浏览器接收的响应类型和服务器返回的响应类型不匹配)
也就是说,浏览器所接收的数据格式与服务器响应的数据格式是不匹配的. 浏览器接收的数据格式一般可以是任意格式,但是我们在发起Ajax请求时就已经确定了要接收的是Jsonp格式 响应的数据类型定义在的co ...
最新文章
- java junit 运行_appium+java+junit demo运行
- Oracle存储过程中异常Exception的捕捉和处理
- 上班族漫画(转收藏)
- mysql设置catalog_catalog恢复目录介绍和配置
- rabbitmq常用的五种模型
- 1/2 pymysql:Python连接MySQL数据库
- 对于 Netty ByteBuf 的零拷贝(Zero Copy) 的理解
- Ionic如何实现单选二级菜单切换
- SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory
- Android RadioButton(单选按钮)点击事件的两种方法
- Excel拼接数据库语句
- SpringBoot集成SpringSecurity步骤
- 高启(1336-1373)
- Centos7 下nexus的安装和使用
- 安卓 每日一题 2019年9-12月问题及答案
- 安装目录里无法找到计算机,Win7系统下programdata文件夹找不到怎么办?
- 用python自己动手做一个小游戏01
- windows系统 kettle 下载、安装
- 绝缘监测及故障定位在码头岸电配电系统的应用
- 【商品分类数据集】——RP2K
热门文章
- d3.js中点可以用图片吗_结论第16课——抛物线的中点弦斜率
- python中home定义是什么_第48p,什么是函数?,Python中函数的定义
- python使用作为转义字符_当需要在字符串中使用特殊字符时, Python使用()作为转义字符。...
- 政企边缘安全,如何助您提升企业免疫力?
- 阿里云邀您参加2020年数据湖高峰会议
- 《轩辕传奇手游》主程序带你拆解MMORPG游戏客户端
- 使用Unity引擎打造赛博朋克之城!CIGA Game Jam 2019 48小时独立游戏开发挑战
- Cocos Creator 3D 材质系统:曲面效果如何实现?
- 神超重回两只手操作时代?霸哥最强上单要被抢,战场在LOL手游
- 常见java面试题 普通类和抽象类的区别?