浏览器API与协议

现代浏览器是一个囊括了数百个组件的操作系统,包括进程管理、安全沙箱、分层的优化缓存、JavaScript虚拟机、图形渲染和GPU管道、存储系统、传感器、音频和视频,网络机制等等。

在浏览器上运行的应用的性能。,取决于多个组件:解析、布局、HTML和CSS样的计算、JavaScript执行速度、渲染管道、网络相关的各层协议的配合。

在这里插入图片描述

资源与客户端状态缓存:

浏览器在分派请求之前,会自动检查资源缓存,满足条件的就返回资源的本地副本,如果资源不在本地缓存中,浏览器就会发送网络请求,将响应自动填充到缓存中,方便后续访问。

XMLHttpRequest

XMLHttpRequest是浏览器层面的API,可以让开发人员通过JavaScript实现数据传输。发送请求后,浏览器会帮助我们完成所有底层的链接管理、协议协商、HTTP请求格式化,以及更多工作,比如:

  • 浏览器管理着连接建立、套接字池和连接终止
  • 浏览器决定最佳的HTTP(S)传输协议(HTTP 1.0、1.x和2.0)
  • 浏览器处理HTTP缓存、重定向和内容类型协商
  • 浏览器保障安全、验证和隐私

开发者只需要发起请你去、管理进度、然后处理服务器返回的响应数据就好。

跨源资源共享(CORS)

同源:是应用的协议、域名和端口三个都保持一致。
因为浏览器保存用户的数据,比如认证令牌、Cookie以及其他私有元数据,这些数据不能泄露给其他的应用。

为解决这个问题,XHR的早期版本都限制应用只能执行同源请求

要是没有同源沙箱,那么就导致一个应用可以访问另一个应用的用户数据。

如果我们的应用需要访问另一个服务器的资源,同源策略就会带来一些麻烦。所以就有了跨源资源共享,CORS。

// 脚本来源:(http, example.com, 80)
var xhr = new XMLHttpRequest();
xhr.open('GET', '/resource.js'); ➊
xhr.onload = function() { ... };
xhr.send();var cors_xhr = new XMLHttpRequest();
cors_xhr.open('GET', 'http://thirdparty.com/resource.js'); ➋
cors_xhr.onload = function() { ... };
cors_xhr.send();

发起跨域请求后,浏览器会自动追加受保护的Origin HTTP首部,包含了发出请求的来源。服务器也可以检查Origin首部,决定时候接受该请求,如果接受就返回Access-Control-Allow-Origin响应首部:

=> 请求
GET /resource.js HTTP/1.1
Host: thirdparty.com
Origin: http://example.com 
...<= 响应
HTTP/1.1 200 OK
Access-Control-Allow-Origin: http://example.com 
...

XMLHttpRequest可以传输文本数据,可以传输二进制数据。

事实上,浏览器可以自动为各种原生数据类型提供编码和解码服务,因此应用在直接将这些数据传给XHR时就已经编码/解码好了,反之亦然。浏览器可以自动解码的数据类型如下:

  1. ArrayBuffer:固定长度的二进制数据缓冲区。
  2. Blob:二进制大对象或不可变数据。
  3. Document:解析后得到的HTML文档
  4. JSON:简单数据结构的JavaScript对象
  5. Text:简单的文本字符串

浏览器可以根据http的context-type首部来判断适当的数据类型,比如把application/json响应解析为JSON对象。在代码中这样设置:

var xhr = new XMLHttpRequest();
xhr.open('GET', '/images/photo.webp');
xhr.responseType = 'blob'; xhr.onload = function() {if (this.status == 200) {var img = document.createElement('img');img.src = window.URL.createObjectURL(this.response); img.onload = function() {window.URL.revokeObjectURL(this.src); }document.body.appendChild(img);}
};xhr.send();

这是把返回的数据类型设置为Blob,基于返回的对象创建唯一的对象URL并且设置为图片的src。图片加载完毕后立即释放对象。

通过XHR上传数据:

基本代码实例如下:

var xhr = new XMLHttpRequest();
xhr.open('POST','/upload');
xhr.onload = function() { ... };
xhr.send("text string"); var formData = new FormData(); 
formData.append('id', 123456);
formData.append('topic', 'performance');var xhr = new XMLHttpRequest();
xhr.open('POST', '/upload');
xhr.onload = function() { ... };
xhr.send(formData); var xhr = new XMLHttpRequest();
xhr.open('POST', '/upload');
xhr.onload = function() { ... };
var uInt8Array = new Uint8Array([1, 2, 3]); ➍
xhr.send(uInt8Array.buffer); 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/838916.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

notepad++ 批量转所有文件编码格式为UTF-8

1、安装notepad及PythonScript_3.0.18.0插件 建议两者都保持默认路径安装x64版本&#xff1a; 阿里云盘分享https://www.alipan.com/s/xVUDpY8v5QL安装好后如下图&#xff1a; 2、new Script&#xff0c;新建脚本&#xff0c;文件名为ConvertEncoding 3、自动打开脚本&#xff…

YOLOV8 如何训练自己的数据

1、git code 项目 地址 2、数据标注&#xff1a;使用yolov8官方推荐的roboflow 地址 2.1 上传数据 2.2 标注 2.3 生成数据集 2.4 导出数据 3 训练 3.1 建.yaml 文件 建立.yaml 文件 3.2 修改.yaml文件里面的内容 1.这是roboflow 网站下下来的数据&#xff0c;只需要把.…

MySQL中锁的几种类型

MySQL根据加锁的范围&#xff0c;可以分为全局锁、表级锁、行级锁三类。 2.5.1. 锁定读 2.5.1.1. 共享锁和独占锁 事务的 读-读 情况并不会引起什么问题&#xff0c;对于 写-写、读-写 或 写-读 这些情况可能会引起一些问题&#xff0c;需要使用MVCC或者加锁的方式来解决。在…

15:00面试,15:08就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到8月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%…

MySQL数据库下的Explain命令深度解析

Explain是一个非常有的命令&#xff0c;可以用来获取关于查询执行计划的信息&#xff0c;以及如何解释输出。Explain命令是查看查询优化器如何决定执行查询的主要方法。这个功能有一定的局限性&#xff0c;并不总是会说出真相&#xff0c;但是它的输出是可以获取的最好信息&…

Kubernetes集群上的Etcd备份和恢复

在本教程中&#xff0c;您将学习如何在Kubernetes集群上使用etcd快照进行etcd备份和恢复。 在Kubernetes架构中&#xff0c;etcd是集群的重要组成部分。所有集群对象及其状态都存储在etcd中。为了更好地理解Kubernetes&#xff0c;有几点关于etcd的信息是您需要了解的。 它是…

【探索数据结构】线性表之双链表

&#x1f389;&#x1f389;&#x1f389;欢迎莅临我的博客空间&#xff0c;我是池央&#xff0c;一个对C和数据结构怀有无限热忱的探索者。&#x1f64c; &#x1f338;&#x1f338;&#x1f338;这里是我分享C/C编程、数据结构应用的乐园✨ &#x1f388;&#x1f388;&…

【超全干货】一文讲清什么是全民分销?怎么做好全民分销?

一、什么是全民分销&#xff1f; 全民分销&#xff0c;作为新时代营销模式的代表之一&#xff0c;是基于互联网尤其是社交媒体平台兴起的一种分销策略。它打破了传统零售与电子商务的界限&#xff0c;允许任何个人&#xff0c;无论是否为专业销售人员&#xff0c;都能成为品牌…

【WEB前端2024】开源智体世界:乔布斯3D纪念馆-第27课-门的打开

【WEB前端2024】开源智体世界&#xff1a;乔布斯3D纪念馆-第27课-门的打开 使用dtns.network德塔世界&#xff08;开源的智体世界引擎&#xff09;&#xff0c;策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎&am…

FreeRTOS_互斥量_学习笔记

互斥量 数值只有0或1 谁获得互斥量&#xff0c;就必须由谁释放同一个互斥量。 但其实在freeRTOS中&#xff0c;任务A获取的互斥锁&#xff0c;任务B也能释放。因此谁上锁谁开锁只是约定&#xff0c;在程序实现上不是强制的。 “可重入的函数"是指&#xff1a;多个任务同时…

Qt输入输出类使用总结

Qt输入输出类简介 QTextStream 类(文本流)和 QDataStream 类(数据流)Qt 输入输出的两个核心类,其作用分别如下: QTextStream 类:用于对数据进行文本格式的读/写操作,可在 QString、QIODevice或 QByteArray 上运行,比如把数据输出到 QString、QIODevice 或 QByteArray 对象…

Linux-文件或目录权限

在使用 ll 时&#xff0c;可以查看文件夹内容的详细信息&#xff0c;信息的第1位表示类型&#xff0c;具体信息如下&#xff1a; 类型说明-普通文件d文件夹b块设备文件c字符设备文件p管道文件s套接口文件 第2-10位表示权限&#xff0c; 举例&#xff1a;rwxr-xr-x 类型说明r…

业务架构核心要素之间的关系

背景 前面已经对业务架构的概念和发展简史有了初步的了解&#xff0c;现在主流的业务架构就是价值流能力&#xff0c;在这套架构体系中&#xff0c;有四个核心元素&#xff0c;分别是价值流、业务能力、信息、组织。 这四个核心元素&#xff0c;特别是对于价值流以及业务能力…

查看主机的php参数short_open_tag 是否为 on

我想要查看主机的php参数short_open_tag 是否为 on&#xff0c;由于我使用的是Hostease的Linux虚拟主机产品&#xff0c;在cPanel面板中并没有找到这个参数选项&#xff0c;因此无法查看。这边联系了Hostease技术支持了解&#xff0c;可以通过以下方式进行查看。 1.先登陆cPane…

Shell编程之条件判断语句

目录 一、条件判断 1、test命令 2、文件测试 3、整数值比较 4、字符串判断 5、逻辑测试 二、if语句 1、if单分支语句 2、双分支语句 3、多分之语句 4、case 分支语句 一、条件判断 Shell环境根据命令执行后的返回状态值&#xff08;echo $?&#xff09;来判断是否执行成…

鸿蒙HarmonyOS开发中的易混点归纳-持续补充中

相关文章目录 鸿蒙HarmonyOS开发术语全解&#xff1a;小白也能看懂&#xff01; 文章目录 相关文章目录前言一、build()函数和Builder装饰器&#xff1f;二、自定义组件和系统组件&#xff08;内置组件&#xff09;三、组件和页面四、自定义弹窗和其他弹窗总结 前言 一、build…

SpringBoot(五)之新增注解

SpringBoot&#xff08;五&#xff09;之新增注解 文章目录 SpringBoot&#xff08;五&#xff09;之新增注解核心注解EnableAutoConfiguration**SpringBootApplication** 条件注解Spring原生Conditional注解手写Conditional注解**ConditionalOnProperty****ConditionalOnMissi…

Logrus IT的供应商经理如何找到优秀地翻译人员

在现代世界&#xff0c;翻译和本地化可以使企业打入新市场并与来自不同国家的客户互动&#xff0c;从而对企业的成功起到决定性作用。翻译过程中的一个关键部分是寻找和招聘翻译。在Logrus IT&#xff0c;这是Anna Gulenkova的工作&#xff0c;我们决定和她谈谈她是如何做到的。…

BUUCTF---misc---我吃三明治

1、下载附件是一张图片 2、在winhex分析&#xff0c;看到一串整齐的编码有点可疑&#xff0c;保存下来&#xff0c;拿去解码&#xff0c;发现解不了&#xff0c;看来思路不对 3、再仔细往下看的时候也发现了一处这样的编码&#xff0c;但是这次编码后面多了一段base编码 4、拿去…

最长前缀数组

欢迎关注更多精彩 关注我&#xff0c;学习常用算法与数据结构&#xff0c;一题多解&#xff0c;降维打击。 基本问题 给定一个字符串s, 返回一个数组Z, Z[i]代表子串s[i…n] 与s最长公共前缀的长度。 朴素做法 可以枚举所有s[i…n]子串&#xff0c;然后与s一一比较&#x…