常见问题
这有一份网络相关的消息,请查收
疫情虽然没有竣事,不外学习始终是不能停的。这次的内容主要以网络为主,也是依据正常面试中常被问及的话题举行了梳理每个点都没有太过的深究,也是为了文章字数不要太过庞大思量的,点到为止,是这次的主题那么,让我们闲言少叙,开始进入主题吧!!!httphttp1.1和http2.0如果要说http1.1和http2.0的区别,那就先要说http1.1和兄弟http1.0的区别了现在我们常用的http协议也是http1.1这个版本的http1.1支持长链接,默认是Connection: keep-alive 淘汰了TCP建设和关闭毗连的消耗和延迟,一次建设多次请求和响应缓存处置惩罚 http1.0使用头部的Expires和Pragma来控制缓存 http1.1里支持了更多的缓存计谋,Etag、If-Modified-Since、If-Unmodified-Since、If-Match、If-None-Match、Cache-ControlHost头处置惩罚 同一台机械上,可能部署多个app,通过剖析host+端口,指定详细会见站点好了,知道了现在市面上最广泛的协议都可以做什么,那么就再来看看http2.0这个时隔了16年的小朋侪都有哪些过人之处吧!!!其实与其说http2.0的过人之处,不如说它是在优化http1.1上的不足下面写的都是在改善以前的缺点,一起看看吧http2.0支持头部压缩头太大,太重,晕晕的,需要减负体积压缩 所以http2.0接纳了HPACK算法压缩了header的巨细缓存header 对传输过的header举行缓存,如果有传输过header的键名,就不再重复发送了,淘汰了传输的巨细多路复用解决了什么问题?答: 浏览器限制同一个域名下请求的数量,(chrome似乎是6个)多路复用的大致意思就是在一个TCP毗连中可以同时发送多个请求,制止线头阻塞问题,极大的提高传输性能服务端推送就是服务端主动的把你肯定需要的资源推送给你,让你在请求一次的情况下获得多个响应数据举个栗子,好比你会见了首页,服务器就会主动的把首页的css,js,图片等资源都主动推送已往,究竟这些都是必须的资源好了,http1.1和http2.0版本之间的差别就简简朴单的写到这里吧,由于本人也不是科班身世,对这种盘算机网络知识实在匮乏,就先点到为止吧,下面继续看其他的http和https的区别其实谈及二者的区别,也是在告诉大家http有哪些不宁静因素那么我们来看看不宁静的点都有哪些吧之后你就会明确https的泛起到底何等有意义了不宁静的http信息被窃听 http的报文是使用明文方式发送认证问题 通信双方在请求和响应时无法确认挟制数据 请求和响应的传输历程中,容易被运营商挟制,窜改数据,无法掩护数据的完整性https够宁静https的端口是443,它基于http协议,通过ssl或tls提供加密处置惩罚数据、验证对方身份以及数据完整性掩护的https是在http(应用层)和tcp(传输层)之间加了一层ssl协议,来举行加密,从而酿成了我们所知的https组成部门: https = http + ssl/tls下面我们就简朴聊聊ssl/tls协议ssl和tlsssl/tls用来处置惩罚信息加密、完整性校验、身份验证ssl/tls基于三类算法实现对称加密 -> 信息加密 我们拥有同一把钥匙来开门(客户端|服务端有相同的钥匙),别人没钥匙开不开非对称加密 -> 身份验证密钥协商 我们都能进饭馆用饭(公钥),可是收银台的钥匙(私钥)只有老板有散列算法 -> 完整校验 只有你自己的指纹(加密)可以解锁门锁毗连历程首先建设tcp握手毗连举行ssl协议的握手密钥交流通过配合约定的密钥开始通信通过以上内容的相识,https是网站宁静的代言人,尽快的都使用上https协议吧http报文头部有哪些字段?有什么意义?通用头字段字段名 常见值 意义 Connection keep-alive 链接的治理 Cache-Control max-age=xxx秒 控制缓存行为 Date 日期和时间 报文日期 Transfer-Encoding chunked 报文主体的传输编码方式请求头字段字段名 常见值 意义 Accept * / * 处置惩罚的媒体类型 Accept-Encoding gzip 编码类型 Accept-Langulage zh-CN,zh 编码语言 Host 域名或IP 指定详细会见站点 If-Modified-Since 日期和时间 比力资源更新的时间 If-None-Match Etag戳 比力实体标志 Referer 域名或IP 请求泉源 User-Agent 浏览器版本信息 用户署理响应头字段字段名 常见值 意义 Content-Encoding gzip 主体编码类型 Content-Type application/json或text/css等 主体媒体类型 Expires 日期和时间 逾期时间 Last-Modified 日期和时间 最后修改时间 Etag Etag戳 资源匹配信息http响应状态码状态码想必是经常见到的工具了,这里要是展开说的话也会有许多内容的,不外我们依然重新开始,梳理一下常见的状态码以及使用情况状态码总共分为5个大类1xx: 信息类状态码(属于准备阶段)2xx: 乐成状态码3xx: 重定向状态码4xx: 客户端错误状态码5xx: 服务端错误状态码各大类中常见的状态码每个大类中都有我们常见的状态码,不多不少,我们都有过照面,这就足够了2xx - 乐成系列200 - 请求乐成204 - 返回响应头,不带响应体(如:打点请求)206 - 返回部门数据(如:断点续传)3xx - 重定向系列301 - 永久重定向302 - 暂时重定向303 - 只能用get请求的暂时重定向304 - 没有更改(主要用来处置惩罚缓存)307 - 不改变请求方法的暂时重定向4xx - 客户端错误系列400 - 请求报文语法错误401 - 需要认证403 - 拒绝会见资源404 - 文件不存在5xx - 服务器错误系列500 - 服务器故障503 - 服务器宕机了或许就把关于http部门的内容先说到这里吧,下面我们来说一下老生常谈的话题:缓存,缓存的作用想必不用说也知道(淘汰数据传输,提高网页速度),所以我们就直奔主题进入缓存吧缓存缓存主要分为两种,一种是强制缓存,另一种就是协商缓存了(304其实就是协商缓存)强制缓存强制缓存通常是用在图片或者logo这样恒久不会更改的资源上的当第一次会见资源的时候,会正常拿到200的状态码当第二次会见资源的时候,就会去浏览器的缓存里找缓存文件使用了,不外返回的状态码仍然是200强制缓存主要是通过Cache-Control和Expires来设置的Cache-Control通过在服务端设置响应头来添加Cache-Control如: Cache-Control: max-age=100max-age是一个相对时间,单元是秒上面那行表现强制缓存100秒内不再去服务器拿资源,而是直接使用浏览器的缓存里的文件ExpiresExpires可以说是很早就有了,之所以设置强缓存的时候还设置它也是为了兼容低版本如: Expires: new Date(+new Date + 20 * 1000).toUTCString()Expires吸收的是绝对时间,单元是毫秒,而且要转成格林威治时间,以前的toGMTString()已经废弃了,现在统一用toUTCString()优先级由于Expires是一种向下兼容的方式,所以如果同时有Cache-Control和Expires被设置的情况下,强缓存会只认Cache-Controlok,说完了强制缓存,就轮到协商缓存登场了,对于协商缓存来说也经常是考点之一协商缓存还是一样的套路当第一次会见资源的时候,会正常拿到200的状态码,服务端会把缓存标识和数据一起返回当第二次会见资源的时候,就会把缓存标识发给服务端,服务端去校验是否匹配,匹配乐成就返回304,直接使用缓存即可协商缓存常见的也是两种,一种是Last-Modified,另一种是Etag先从Last-Modified说起吧Last-ModifedLast-Modified从单词的大意可以看出,表现的是最后修改时间客户端会见资源,服务端会设置一个响应头为Last-Modified而且把值设置为绝对时间这样客户端再会见同一个资源的时候,请求头上会带有一个If-Modified-Since的字段关键点:服务端会通过客户端发来的If-Modified-Since和Last-Modified的值比力相同: 返回304状态码,使用缓存文件不相同: 返回200状态码,请求资源缺点:时间不准确,如果最后修改时间变了,可是内容没有变就失效了举个例子: 好比我5秒前改了个值,刷新请求返回200 然后我又打消了适才改的代码,再刷新请求又返回200 可是其实我的内容没有改变,只是凭据我修改的时间来判断,就不太准相识决这个问题并不难,直接把下一位主角请上来EtagETag是实体标签的缩写,凭据实体内容生成的一个hash戳,只有内容改变了Etag才变流程一样,还是客户端第一次会见资源时,服务端会把Etag和数据一起返回再次会见资源时,请求头就会有个If-None-Match字段而且也会发送给服务端一样的关键点:服务端会通过客户端发来的If-None-Match和Etag的值比力相同: 返回304状态码,使用缓存文件不相同: 返回200状态码,请求资源强制不缓存曾经有道题目问的是不缓存有哪些方式?其实很简朴,只要在设置Cache-Control: no-store就可以了可是许多人也都见过no-cache这个值,实际上它依然会缓存可是每次都像服务器发请求而已跨域跨域是前端同学见责不怪的问题了,浏览器本着宁静的原则接纳了同源计谋要求只有域名、协议、端口号`都相同的才可以举行请求观点的工具,我就不烦琐了,下面直接开始说跨域的几种方式吧jsonp 通过script的src来举行跨域请求,把数据包在一个函数内通报过来 优点:使用简朴、兼容性好 缺点:只支持get请求,不够宁静有XSS攻击的危险复制代码cors 发送请求时会附带一个Origin头部包罗请求页面的源信息(协议、域名、端口号) 服务端凭据头信息来举行处置惩罚,如果接受就在Access-Control-Allow-Origin头部回发相同的源信息实现跨域 优点:使用利便 缺点:浏览器兼容问题,修改主要在后端复制代码postMessage 两个页面(窗口)之间的通信,可以和内嵌的iframe通信 iframe.contentWindow.postMessage(数据, 目的域名) 优点:H5提供的API,使用利便 缺点:浏览器兼容问题,而且需要依赖iframe复制代码window.name name属性在差别的页面也存在简朴用法:在localhost:8000/2.html页面中添加数据到window.name,看下面代码// 这是http://localhost:8000/2.html页面<script> let list = [1,2,3,4,5]; // 由于window.name内部挪用了toString方法 // 所以如果你想要获得你想要的数据类型,就需要先举行JSON.stringify window.name = JSON.stringify(list);</script>复制代码现在localhost:9000/1.html想拿到上面的数据,就需要借助window.name来取了// 这是http://localhost:9000/1.html页面<body> <div>我是1页面,内里有嵌套页面</div> <iframe src="http://localhost:8000/2.html" id="f" onload="load()"></iframe> <script> let flag = true; function load() { if (flag) { // 页面第一次加载完成就把iframe的src修改为同域下的3.html页面 f.src = 'http://localhost:9000/3.html'; flag = false; } else { // 之后再加载新的src的时候就可以拿到window.name上挂载的数据了 const data = JSON.parse(f.contentWindow.name); console.log(data); // [1,2,3,4,5] } } </script></body>复制代码 优点:挂到window.name上写法很简朴 缺点:依赖iframe,且挂载到window.name上不宁静复制代码domain 二级页面通过document.domain设置相同的域名,强制实现了同域 优点:设置利便 缺点:依赖iframe,只支持一级和二级域名复制代码webSocket 双工通信,没有跨域限制,需要前后端建设websocket毗连,开始通信 优点:H5的API,用法简朴 缺点:兼容问题,需要后端提供ws服务复制代码网络宁静XSS用户输入的内容可能会有恶意代码所以,一句话就是转义用户输入的内容,转义转义转义(encodeURICompoent)// 转义html里的字符function encodeHtml(str) { return str.replace(/&/g, '&'). replace(/"/g, '"'). replace(/'/g, '&apos'). replace(/</g, '<'). replace(/>/g, '>')}复制代码CSRF跨站请求伪造,如:钓鱼网站验证码校验 express可以用个svg-captcha生成验证码,后台举行校验判断泉源 referer 请求头里的referer判断泉源,纷歧致的不处置惩罚token 钓鱼网站不能拿到cookie,可以通过cookie+标识符发给服务端,让服务端去匹配发送的token是否一致 在登录后服务端会返回token,前后端拿着token举行匹配,一样的就可以TCP我们知道tcp是在七层网络模型中的传输层,对于tcp的内容来讲,大多数感兴趣的都在它的那三次握手和四次挥手上了那么我们也简朴的说说看是怎么回事吧三次握手为什么要三次握手?答: 为的是同步毗连双方简直认号和序列号,而且交流tcp窗口巨细信息一句话:保证双方收发都没问题握手历程如下:建设毗连服务端收到客户端发的SYN报文,确认序列号(SYN)并发送确认号(ACK)客户端收到服务端发的SYN+ACK报文,发送确认号(ACK),完成握手四次挥手为什么要四次挥手?一句话:双方数据都发送完毕了,都以为可以断开了挥手历程如下:客户端向服务端发送竣事号(FIN)报文,请求关闭毗连服务端收到FIN报文,返回ACK报文,等候关闭服务端看看数据发完没有,直到数据都发完了,再返回FIN报文,请求关闭毗连客户端收到FIN报文,发送ACK报文让服务端关闭毗连,等一会看服务端没反映了,自己也关闭毗连更直白的历程:客户端: 我要关闭毗连了服务端: 好的,稍等服务端: 数据都给你了,可以关了客户端: 你关了,我就关固然另有个总被提及的问题为什么握手是三次,但挥手却是四次?其实从上面直白的挥手历程就能发现多了一次就是在“好的,稍等”那次,哈哈CDN的作用cdn想必事情中都有用到,观点什么的就不再赘述了,总结了它的3点作用,究竟我们不用太深入相识它的事情原理,知道作用就行了缓存节约服务器流量最近节点优先在浏览器地址栏输入URL,回车后发生了什么这种问题在回覆方面小大由之,可深可浅,大致流程还是亘古稳定的,只不外要看是不是想深究其因了下面我就写出来,我小我私家认为的历程吧DNS将URL剖析为IP 有缓存,直接返回缓存 无缓存,继续递归剖析DNS剖析获得服务器的IP,与服务器建设TCP毗连 IP协议:选择传输门路,卖力找到 TCP协议:三次握手、分片、可靠传输、重新发送的机制浏览器通过http协议发送请求 请求行、请求头、请求体服务器吸收请求后,开始查库,读文件,拼接要返回的http响应浏览器收到html文件开始渲染剖析html为dom树,剖析css为css-tree,最终生成render-tree渲染树,阻塞渲染遍历渲染树开始结构,盘算每个节点的巨细位置信息将渲染树每个节点绘制到页面上加载js文件,执行js剧本回流reflow和重绘repaint就这么10条吧,其实每一条都有可以深入展开的内容,不外我这里就纷歧一先容了,究竟我也知道的甚少,就不装腔作势了,哈哈点到为止对于网络方面的知识我并不熟悉,也是在学习一点点的皮毛,分享给大家也是为了和大家一起进步好了,就写到这里吧,谢谢大家的寓目了,886作者:chenhongdong链接:https://juejin.im/post/5e81c18ae51d4546e07b5776泉源:掘金著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
本文关键词:这有,一份,网络,相关,的,消息,请,查收,疫情,十大网赌信誉老品牌网站
本文来源:十大网赌信誉老品牌网站-www.redpocketfarm.com