手工木雕网站建设策划书,北京旅游攻略,手机版网站建站,wordpress如何还原浏览器的通信能力
用户代理
浏览器可以代替用户完成http请求#xff0c;代替用户解析响应结果#xff0c;所以我们称之为#xff1a;
用户代理 user agent
在网络层面#xff0c;对于前端开发者#xff0c;必须要知道浏览器拥有的两大核心能力#xff1a;
自动发出请…浏览器的通信能力
用户代理
浏览器可以代替用户完成http请求代替用户解析响应结果所以我们称之为
用户代理 user agent
在网络层面对于前端开发者必须要知道浏览器拥有的两大核心能力
自动发出请求的能力自动解析响应的能力
自动发出请求的能力
当一些事情发生的时候浏览器会代替用户自动发出http请求常见的包括 用户在地址栏输入了一个url地址并按下了回车 浏览器会自动解析URL并发出一个GET请求同时抛弃当前页面。 当用户点击了页面中的a元素 浏览器会拿到a元素的href地址并发出一个GET请求同时抛弃当前页面。 当用户点击了提交按钮button typesubmit.../button 浏览器会获取按钮所在的form元素拿到它的action属性地址同时拿到它method属性值然后把表单中的数据组织到请求体中发出指定方法的请求同时抛弃当前页面。 这种方式的提交现在越来越少见了 当解析HTML时遇到了link img script video audio等元素 浏览器会拿到对应的地址发出GET请求 当用户点击了刷新 浏览器会拿到当前页面的地址以及当前页面的请求方法重新发一次请求同时抛弃当前页面。 浏览器在发出请求时会自动附带一些请求头 重点来了
从古至今服务器和浏览器都有一个约定
当发送GET请求时不会附带请求体
这个约定深刻的影响着后续的前后端各种应用现在几乎所有人都在潜意识中认同了这一点无论是前端开发人员还是后端开发人员。
由于前后端程序的默认行为逐步造成了GET和POST的各种差异 浏览器在发送 GET 请求时不会附带请求体 GET 请求的传递信息量有限适合传递少量数据POST 请求的传递信息量是没有限制的适合传输大量数据。 GET 请求只能传递 ASCII 数据遇到非 ASCII 数据需要进行编码POST 请求没有限制 大部分 GET 请求传递的数据都附带在 path 参数中能够通过分享地址完整的重现页面但同时也暴露了数据若有敏感数据传递不应该使用 GET 请求至少不应该放到 path 中 POST 不会被保存到浏览器的历史记录中 刷新页面时若当前的页面是通过 POST 请求得到的则浏览器会提示用户是否重新提交。若是 GET 请求得到的页面则没有提示。
自动解析响应的能力
浏览器不仅能发送请求还能够针对服务器的各种响应结果做出不同的自动处理
常见的处理有 识别响应码 浏览器能够自动识别响应码当出现一些特殊的响应码时浏览器会自动完成处理比如301、302 根据响应结果做不同的处理 浏览器能够自动分析响应头中的Content-Type根据不同的值进行不同处理比如 text/plain: 普通的纯文本浏览器通常会将响应体原封不动的显示到页面上 text/htmlhtml文档浏览器通常会将响应体作为页面进行渲染 text/javascript或application/javascriptjs代码浏览器通常会使用JS执行引擎将它解析执行 text/csscss代码浏览器会将它视为样式 image/jpeg浏览器会将它视为jpg图片 application/octet-stream二进制数据会触发浏览器下载功能 attachment附件会触发下载功能 该值和其他值不同应放到Content-Disposition头中。
基本流程 访问https://oss.duyiedu.com/test/index.html AJAX 浏览器本身就具备网络通信的能力但在早期浏览器并没有把这个能力开放给JS。 最早是微软在IE浏览器中把这一能力向JS开放让JS可以在代码中实现发送请求并不会刷新页面这项技术在2005年被正式命名为AJAXAsynchronous Javascript And XML AJAX 就是指在web应用程序中异步向服务器发送请求。
它的实现方式有两种XMLHttpRequest 简称XHR和Fetch
以下是两者的对比
功能点XHRFetch基本的请求能力✅✅基本的获取响应能力✅✅监控请求进度✅❌监控响应进度✅✅Service Worker中是否可用❌✅控制cookie的携带❌✅控制重定向❌✅请求取消✅✅自定义referrer❌✅流❌✅API风格EventPromise活跃度停止更新不断更新