计算机网络第5版重点,计算机网络知识点篇

计算机网络

HTTP缓存机制http缓存机制是浏览器第一次向服务器发起http请求之后,如果服务器返回请求资源,并在响应头添加一些有关缓存的字段 ,则请求结果和缓存标识存入浏览器缓存,所有http缓存的处理是跟根据第一次请求资源返回的响应头确定的。如果同时存在强缓存和协商缓存,强缓存的优先级更高。

缓存的优点减少冗余的数据传输

节约网络费用,缓解网络瓶颈问题

降低距离时延

降低对原始服务器的要求,服务器可以更快响应,避免出现过载

浏览器加载页面流程如下浏览器根据资源的请求的·http头信息判断是否命中强缓存,若命中且缓存未过期,则不向服务器发送请求,直接从缓存中获取资源,并且看到的返回状态码为200

若没有命中,则浏览器会将资源加载请求发送到服务器,根据请求携带的参数,判断缓存是否失效,如果失效则不会返回资源信息,浏览器继续从缓存加载资源

若未命中协商缓存,则服务器将资源完整返回,并且更新缓存

强缓存:  如果请求的数据命中强制缓存,则浏览器直接从本地缓存中获取数据,不与服务器进行交互,并且响应状态码直接为200

相关联的缓存字段是:Cache-Control来表示资源缓存的时间包括缓存对象的权限,可取的参数max-age,以及 public / private / no-cache / no-store 这些参数设置访问权限

协商缓存: 当没有命中强缓存的时候,则浏览器会将请求发送到服务器。服务器根据请求头中的参数If-Modify-Since的值 比较 资源实际修改的时间 判断是否命中缓存。若命中缓存此时返回状态码304,未命中则返回资源并且更新缓存。

或者是通过再请求头上带上If-None-Match这个含有Etag值的参数,来判断资源唯一标识符是否变化,如果变化说明资源内容发送修改,此时未命中否则未命中

存储机制浏览器的存储机制提供了可以将用户数据存储在客户端上的方式,并且利用cookie和session和服务端进行交互。

cookie和session

cookie和session都是用来跟踪浏览器用户身份的会话方式。两者区别如下:存储位置:cookie保存在浏览器端,session保存在服务器端

使用方式:cookie机制:服务器发给客户端的特殊信息,以文本形式保存在客户端。当我们设置cookie的缓存时间时,则cookie会被保存在内存当中,直到过期时间才消失;若没有设置缓存时间,则此时为会话cookie,关闭浏览器则cookie消失

session机制:当服务器收到请求创建session对象,会先判断请求参数中是否存在sessionID,如果存在,则直接通过sessionId获取到session对象,执行对应操作;若不存在,则创建新的session对象,并且在本次响应中将这个sessionId返回给客户端并通过cookie的形式进行存储。安全性:session安全性大于cookie存储内容格式:cookie通过保存字符串类型,以文本形式存储,而session通过HashTable的数据结构保存,支持任何对象存储大小:cookie不能超过4Kb,session大小无限制应用场景cookie:保存用户上次浏览信息、浏览计数

session:网上商城的购物车信息、保存每个用户的专用信息

webstorage是用来克服有cookie所带来的一些限制,1)提供一种在cookie之外存储会话数据的路径 2)提供一种存储大量跨会话的数据机制 。提供两种API:localstorage和sessionstorage存储大小:存储数据都是:5MB

存储位置:都是在客户端,不与服务端交互

存储类型:只能存储字符串类型

webstorage的优点存储空间相对较大,可存储5mb

节省网络流量,存储在本地就可直接获取,也不需要像cookie一样,每次都次请求都要传送到服务器。

安全性:相对于cookie来说,不会随着HTTP header发送到服务器端,不用担心截获问题,相对安全

localstorage和sessionstorage区别是前者除非被清除,否则会永久保存,后者则只在当前会话下有效,一旦关闭浏览器或者页面后被清除。

cookie和webstorage之间的区别存储空间更大

节省网络流量,一旦数据保存到本地,就可以避免再向服务器请求数据,减少数据在浏览器和服务器间不必要来回传递

相对更加安全

自身就拥有setItem、getItem,clear等封装好api,而cookie需要开发者自己封装

http响应状态码301表示请求的资源被永久的分配到了新的URL

302表示请求的资源被分配了新的URL,但是是临时的

303表示需要使用get请求获取被定向

304表示客户端发送资源的请求,但是该请求的资源和缓存的内容没有发生变化

403表示服务器接收到请求,但是拒绝执行

401表示请求无权限,考虑是否是用户登陆身份认证信息过期

500 服务器有问题

204 请求内容响应成功,但是响应数据为空

502 错误网关

503 网关超时请求,问题可能是前端也有可能在后端

get和post的区别

答案解析:参数位置:存放get的在url的query、post存放在body中

参数大小:get一般不超过32k,post不超过1G

安全性:get的安全性相对较差,因为其传递的直接暴露在地址栏中

缓存性:get可缓存其参数、post不能缓存其参数

网络***了解吗?怎么解决1、 xss:跨站脚本***。xss***是指在网站上注入恶意客户端代码,从而在用户使用浏览器进行访问时,获得用户隐私数据的一种行为。类型分有:反射型、存储型、基于DOM。反射型:简单地把用户输入的数据“反射”给浏览器,需要引诱使用用户点击一个恶意链接或者提交一个表单,注入脚本进入被***者的网站

存储型:把用户输入的数据存储在服务器端,当浏览器请求数据,脚本从服务器上传回并执行。

基于DOM:只在客户端发生***。指的是客户端的恶意脚本可以修改dom,不依赖于服务端数据。

防御方案:cookie设置为httpOnly属性,则无法通过js脚本获取cookie

对用户输入进行校验、进行特殊字符过滤

()2、csrf***:跨站请求伪造。***者盗用用户身份,以用户的名义发送恶意请求(也就是利用用户保持的登陆状态发起***)。登录页面添加验证码进行验证

请求时附带验证信息。服务器发一个随机token,请求时携带上token,服务器验证是否有效。

refer: http请求头有个refer字段,后端可以通过这个字段来进行拦截请求3、sql注入:通过把SQL命令插入到web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令。前端做得可以是用户的输入进行过滤4、中间人***:中间人截取客户端发送给服务器的请求,然后伪装成客户端与服务器进行通信,这样就可以截取服务端的内容发送给客户。这种***模式是通过各种技术手段将***者控制的一台计算机虚拟放置在网络连接中的两台通信主机之间,这台主机称为‘中间人’,该‘中间人’能与原始计算机建立活动连接并且允许其读取或者纂改传递的信息,然而两台原始计算机却认为是他们之间在相互通信。

常用手段是:DNS/ARP欺骗(将客户的DNS请求发送到***者,***者伪造DNS响应,并将正确的IP地址换成其他IP,从而获取用户在伪造网站输入一些重要信息。

浏览器的同源策略和cookie的作用域浏览器的同源策略是指的协议相同、域名相同、端口号一致的页面之间可以相互通信。

目的是: 保证用户信息安全,防止恶意的网站窃取数据。

限制范围是: 非同源情况下,cookie、localstorage、IndexDB无法读取;dom无法获取

解决方案: 使用jsonp、CORS 或者 window.loaction.name + iframe解决跨域问题

Cookie: 主要是通过浏览器保存在客户端的一些安全性要求不高的临时数据,涉及到两个重要属性Domain、Path 用来指示cookie的作用域domian:用来告诉浏览器当前添加cookie的域名归属,默认为当前域名

path:告诉浏览器当前要添加cookie的域名归属

综合浏览器提交的Cookie的作用域:1、当前域名或者父域名下的cookie; 2、当前路径或者父路径下的Cookie;满足以上两个条件则会被提交成功

TCP的三次握手和四次挥手

答案解析:

tcp的三次握手的流程客户端向服务器发送请求连接报文,SYN=1(说明是连接请求、或者是连接接收请求)、 seq = x(初始序号),此时客户端状态为SYN-SEND,等待确认

服务器接收到请求报文,确认连接后发送响应报文 ACK = 1(决定ack是否有效 为1则有效) 、SYN=1 (请求连接标志)、 ack = x+1(确认序号)、seq= y(初始序号)以确认连接请求.

客户端接收到确认后,检查ACK是否为1,ack是否为x+1,若确认无误,将ACK=1,ack=y+1 ,同时为tcp连接分配好资源,并将数据包发送给服务器,服务器确认无误,则成功建立连接。

提问:为何一定要三次握手,二次握手可以吗/。

因为tcp是全双工通信, 三次握手能够保证双方确认建立连接,并且双方对初始序号进行协商。如果只有两次握手,则可能会出现死循环的情况,在二次握手后,客户端并不知道服务器是否准备好,从而忽略服务端发来的任何数据分组,而服务端发送的分组没有得到响应,则重复发送,陷入循环当中.

TCP 和 UDP 的区别,以及两者的应用场景

答案解析:TCP和UDP都是TCP/IP协议中的运输层协议。

TCP协议: 可靠的、面向字节流的、需要连接的传输层协议,数据包的总长是20字节,只支持点对点连接。

UDP协议: 面向报文、无需连接、尽最大可能交付的传输层协议,数据包头部只有8个字节,支持多对多、一对多、多对一协议。

options请求什么时候用

答案解析:浏览器对于复杂的跨域请求的处理,会在实际发送请求前发送options预请求,来判断服务器是否支持改复杂的跨域请求,如果返回响应的是拒绝类型的,则会中止真正的请求。options所带有的参数有:Access-Control-Request-Method、Access-Control-Request-Headers

触发执行该操作的情况:请求类型不是HEAD/GET/POST

请求头的数据类型Content-type : text/plain 、multipart/form-data是这些之外的内容

自定义了请求头

http的历史发展,以及https有了解过吗

答案解析:http是一种无状态、以请求/应答方式运行、应用层的超文本传输协议。http 0.9 :支持短连接,请求只支持get请求,没有请求头描述信息

http 1.0 :请求类型增加post、delete、put、HEAD、增加响应状态码,引入HTTP头的概念,具备传输纯文本HTML以外的其他类型文档的能力

http1.1连接可以复用,节省多次打开tcp连接加载网页文档资源的时间

增加管线化技术,允许在第一个应答被完全发送之前发送第二个请求,降低通信延迟

引入了额外的缓存控制机制

增加host头,提供物理服务器处理速率,能够使得不同域名配置在同一个IP地址的服务器上http2.0支持多路复用,并行请求能在同一个链接中处理,移除http1.x中顺序和阻塞的约束。

压缩请求头信息,因为请求头在一系列请求中是相似的,其移除了重复和传输重复数据成本

增加服务器主动推送功能

数据以二进制进行传输

拓展:https执行过程https是在http的基础上结合ssl加密的协议,一次https请求实际上包括两次http请求客户端向服务端发送https请求,连接到服务端的443端口上

服务端接收请求,向客户端发送公钥,自己保留私钥,用来进行非对称加密、解密操作

客户端接收到服务端的证书之后,验证其合法性,若验证成功,则生成一个随机数,也称为客户端的密钥,并且与服务端的公钥进行非对称加密,将客户端的密钥变成密文。 验证失败,则https请求失败

客户端发起第二次请求,将加密后的密文发送给服务器端。

服务端用自己密钥进行非对称解密,获取到客户端密钥,使用客户端密钥和将要发送的数据进行对称加密,获得密文,发送给客户端。

客户端使用客户端密钥与密文进行对称解密,获取到需要的数据,则https的第二个http请求结束,整个https传输完成。

对称加密和非对称加密的区别对称加密:加密和加密使用的秘钥是同一个、算法公开、计算量小、加密速度快

非对称加密:需要一个私钥和一个密钥、安全、速度较慢

应用:常见的对称加密算法有: DES、3DES、Blowfish、IDEA、RC4、RC5、RC6 和 AES

常见的非对称加密算法有: RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)

常见的摘要算法有: MD2、MD4、MD5、HAVAL、SHA

DNS解析原理

答案解析:向浏览器输入网址,判断本地host文件是否存在映射,存在则解析结束,不存在则查询本地DNS服务器。如果本地缓存存在映射,则查询结束,不存在映射则向下一级服务器发起查询,查询的方式有两种:递归方式递归查询是指如果本地域名服务器没有查询到相对应的映射IP,则会以DNS客户端的身份向下一级服务器询问,层层递进,直到找到,再层层返回迭代方式迭代查询是指本地域名服务器没有查询到相对应的映射IP,会向下一级服务器询问

ajax和fetch的原理

ajax:是XMLHttpRequest的一个实例

只有当状态为200或者是304时才会请求成功

格式零散,容易出现回调地狱问题

fetch:基本promise实现的,也可结合async/await

fetch默认是不带cookie

所有版本的IE均不支持原生fetch

服务端返回状态码400、 500 的时候不会reject,只有网络错误导致请求不能完成才会reject//fetch的post请求方法中,需要自动创建formData对象并且传给body

var data = new formData()

var options = {

method:'post',

body:data,

headers:{

'Accept':'application/json'

}

}

fetch(url,options).then(res=>{

console.log(res)

}).catch((error)=>{

})复制代码

http的简单请求和复杂请求

简单请求请求方法GET

POST

HEAD不能自定义请求头header,只有简单的这几个请求头信息Accept

Accept-Language

Content-Language

Content-Type:text/plain、multipart/form-data (文件上传使用的数据类型)、application/x-www-form-urlencoded(最常见的post的表单提交数据类型)

复杂请求不符合简单请求的就是复杂请求

在跨域执行复杂请求的时候会发送一个预请求options,用于试探服务端是否接受真正的请求,如果得到的响应状态是拒绝性质的,则会停止post、put的请求发出。

网络分层网络分层是指将网络节点所要完成的数据的发送或者转发、打包、拆包,以及控制信息的加载或拆出等工作,分别由不同的硬件和软件模块完成。

目前通用的网络分层是5层,从下到上是:物理层:该层负责比特流在节点间的传输,即物理传输,通俗理解是将计算机连接起来的物理手段。

数据链路层:该层控制网络层与物理层之间的通信。主要功能是实现在不可靠的物理线路上进行数据的可靠传递

网络层主要做得是通过综合考虑发生优先权、网络拥塞程度、服务质量以及可选路由的花费来决定从一个网络中的节点A到另一个网络中节点B的最佳路径。

传输层是两个主机上的应用程序提供端到端的通信。

应用层:接收传输层传输的数据按照事先规定好格式解析

cookie禁止客户端获取 httponly设置了httponly属性,那么js脚本将无法读取到cookie的信息,有效防止xss***,窃取cookie内容//在设置的响应头中设置

response.setHeader('Set-Cookie','HttpOnly;Domain = domainvalue;path = pathname; cookiename = httpOnlyTest')复制代码

axios的实现原理特点:是一个基于promise的HTTP库,支持promise所有的API

支持请求和响应的拦截,可以转换请求数据和响应数据格式

安全性更高,客户端支持防御XSRF

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值