http-header含义,css提高页面性能,跨域,浏览器同源策略,

79 阅读9分钟

http协议当中的header以及含义你知道吗?

css提高页面性能

跨域了解以及解决方案 同源策略是一个重要的安全策略,它用于限制一个gin的文档或者它加载的脚本如何能与另一个源的资源 进行交互。它能帮助阻隔恶意文档,减少可能被攻击的媒介。

如果两个url的protocol,port(en-us)(如果有指定的话)和host都相同的话,则这两个url是同源。

什么是浏览器的同源策略? 当一个请求url的协议,域名,端口三者之间任意一个与当前页面url不同即 为跨域 www.imooc.com:443

jsonp 原理: 利用《script>标签没有跨域限制的漏洞,网页可以得到从其他来 源动态产生的json数据。jsonp请求一定需要对方的服务器做支持 才可以。 (www.imooc.com?callback-getdata 优点:json优点是简单兼容性好,可用于解决主流浏览器的跨域数据 访问的问题 缺点:仅支持get方法具有局限性,不安全可能会遭受xss攻击。 postmessage postmessage是html5 xmlhttprequest level 2中的api,且是为 数不多可以跨域操作的window属性之一,它可用于解决以下方面的问 题 1.页面和其打开的新窗口的数据传递 2.多窗口之间消息传递 3.页面与嵌套的iframe消息传递 4.上面三个场景的跨域数据传递

nginx反向代理 需要搭建一个中转nginx服务,用于转发请求

http有哪些请求方法?GET和POST有什么区别?

特点:

简单快速,灵活,无连接,无状态

请求行,请求头,空行,请求体,

状态行,响应头,空行,响应体 get/post/put/delete

get获取数据,post提交数据

get明文传输,post放到请求体当中传输的

get参数有长度的限制,受限于url长度,具体的数值取决于浏览器和服务器的限制,最长2048字节,post没有这个限制

事件传输机制了解吗?

背景: 事件传输机制冒泡和捕获分别由微软和网景公司提出 这两个概念都是为了解决页面中事件流(事件发生顺序)的问题

事件触发的三个阶段 捕获阶段 目标阶段 冒泡阶段

事件捕获

事件冒泡,从内到外

1.说出浏览器的事件传输机制背景 2.说出浏览器事件出发的三个阶段 3.扩展至谈一谈框架中的事件绑定机制(react合成事件为例)

事件循环机制

宏任务:script整个代码段 setTimeout,setInterval,setImmediate,IO,UI render 微任务: process.nextTick promise,astc,await,mutationObserver(html5新特性) script(整个代码段) settimeout setinterval 宏任务 setimmediate 1/0 你对浏览器的事件循环机制了解多少 ui render process.nexttick promise 微任务 async/await mutationobserver(html5新特性)

执行宏任务,然后执行该宏任务产生的微任务,如果微任务再执行的过程产生了新的微任务,则继续执行微任务,微任务执行完毕之后,再回到宏任务当中进行下一轮循环

属于红任务的范围one,then,宏任务执行完之后执行微任务,

HTTP协议和UDP协议的区别?

网络协议

http协议在应用层 tcp udp 协议再传输层 严格来说,应该拿tcp和udp进行比较

tcp协议 有连接(三次握手) 有断开(四次挥手) 稳定传输

udp协议 无连接,无断开 不稳定传输,但效率高 如视频会议,语音通话 答案 http是应用层,tcpudp是传输层 tcp有连接,有断开,稳定传输 udp无连接,无断开,不稳定传输,但效率高

css属性继承

font 字母间距 letter-spacing 可见性 visibility font-family font-slze line-height 字体 font-style text-align font-variant 文字展示 字间距 word-spacing text-indent font-weight text-transform

webpack当中的哪些plugin分别用来做什么的

webpack中的loader和plugin的区别?

面试中遇到该问题我们该如何回答 从三个层面讲清楚webpack中的loader和plugin的区别 1.功能层面:loader 做的事情plugin 也可以做 2.执行顺序: plugin可以在webapck编译的整个过程中执行,类比于react/vue的生命周期 loader只能在固定的阶段执行 3.本质层面: loader理解为翻译官,对客户端识别不了的源码进行翻译 plugin 执行一些副操作

如何写一个plugin

面试中遇到该问题我们该如何回答? 1.讲清楚plugin是什么? plugin本质上是一个构造函数,通常用class类来表示,constructor中接受入参,且必须变现apply方法来接收webply方法来表示,constructor中接受入参,且必须变现apply 象compiler 2.讲清楚自己实现过哪些自定义的plugin,分别是用来做什么的? 打印日志的logplugin

使用过webpack中的哪些plugin分别是用来做什么的?

面试中遇到该问题我们该如何回答? mooc 1.有哪些常用的plugin o diiplugin 建立动态链接库极大的缩短构建时间 o hotmodulereplacementplugin 启用模块热替换 o htmlwebpackplugin 简单创建html文件用于服务器访问 o providerplugin全局注入模块,不必通过import/require使用模块 2.plugin的执行顺序问题 plugin 可以在webpack的整个编译周期执行

webpack当中的loader分别用来做什么

babel-loader:处理javascript文件,提供语法转换,语法垫片 js相关 source-map-loader:从现有源文件中提取源映射关系 style-loader:把编译后的css以style标签的格式插入dom中 css相关 css-loader:处理css中比如url()@import等语法的文件引用路径问题 loader less-loader:将less编译为css file-loader:处理文件引用路径问题 文件相关 gzip-loader:加载gzip资源 url-loader:允许有条件地将文件转换为内联的base-64 url

如何写一个loader

面试中遇到该问题我们该如何回答? 1.讲清楚loader是什么? loader本质上是一个函数,这个函数接收source为参数,函数返回值便是我们最终loader处理的结果。 2.讲清楚自己实现过哪些loader分别是用来做什么的? 代码压缩的uglify-loader

如何实现一个loader

loader本质上是一个函数

module.exports=(source)=>{

conssole.log(source,source);

}

http状态码|缓存

200请求成功 301永久重定向 302临时重定向 403没有权限 404表示服务器上没有找到该资源 505服务器错误 http协议类 持久连接 http协议采用"请求,应答"模式,当使用普通模式,即非keep-alive模式时,每个请求/应答客 户和服务器都要新建一个连接,完成之后立即断开连接(http协议为无连接的协议) 当使用keep-alive模式(又称持久连接重用)时,keep-alive功能使客户端到服务器端 的连接持续有效,当出现对服务器的后继请求时,keep-alive功能避免了建立或者重新建立连接

leep-alive功能使得客户端到服务器的连接持续有效,当出现对服务器的后继请求的时候,kepp-alive功能避免了建立或者重新建立连接

管线化

http协议类 管线化 在使用持久连接的情况下,某个连接上消息的传递类似于 请求1>响应1>请求2>响应2>请求3>响应3 某个连接上的消息变成了类似这样 请求1>请求2>请求3>响应1>响应2>响应3 管线化通过持久话连接完成,http1.1支持这个技术

只有get和head请求可以进行管线化,post有所限制

初次建立连接的时候不应该启动管线机制,因为对方服务器不一定支持1.1版本

不会影响响应到来的顺序,服务器支持管线化, http协议类 管线化 :管线化机制通过持久连接完成,仅http/1.1 支持此技术 只有get和head 请求可以进行管线化,而post则有所限制 .初次创建连接时不应启动管线机制,因为对方(服务器)不一定支持http/1.1版本的协议 .管线化不会影响响应到来的顺序,如上面的例子所示,响应返回的顺序并未改变 .http/1.1要求服务器端支持管线化,但并不要求服务器端也对响应进行管线化处理,只是 要求对于管线化的请求不失败即可 .由于上面提到的服务器端问题,开启管线化很可能并不会带来大幅度的性能提升,而且很多服务 器端和代理程序对管线化的支持并不好,因此现代浏览器如 chrome和firefox默认并未开启管线 化支

强缓存,协商缓存

能不能说一说浏览器缓存?
强缓存
浏览器中的缓存作用分为两种情况,一种是需要发送HTTP请求,一种是不需要发送。
首先是检查强缓存,这个阶段不需要发送HTTP请求。
通过相应的字段来进行检查
在HTTP/1.0和HTTP/1.1当中,这个字段是不一样的。
Expires
HTTP/1.0时期,使用的是Expires
Expires即过期时间,存在于服务端返回的响应头中,告诉浏览器在这个过期时间之前可以直接从缓存里面获取数据,无需再次请求。比如下面这样:

Expires:Wed, 22Nov201908:41:00GMT

表示资源在2019年11月22号8点41分过期,过期了就得向服务端发请求。
这个方式看上去没什么问题,合情合理,但其实潜藏了一个坑,那就是服务器的时间和浏览器的时间可能并不一致,那服务器返回的这个过期时间可能就是不准确的。因此这种方式很快在后来的HTTP1.1版本中被抛弃了。
Cache-Control
在HTTP1.1中,采用了一个非常关键的字段

HTTP协议1.0,1.1,2.9的区别?

http1.0 最基础的http协议 支持基本的get和post方法 http 1.1 缓存策略 cache-control e-tag等 支持长连接connection:keep-alive,一次tcp连接多次请求 断点续传,状态码206 海量资源:666java.com http 1.1 支持新的方法put delete等,可用于 restful api

http 2.0 可压缩header 减少体积 多路复用,一次tcp连接中可以多个http并行请求 服务端推送