全端工程师需要知道的计算机网络知识一、网络篇-http报文详解1、分类请求报文响应报文2、报文结构(一)、请求报文一条HTTP请求报文由四部分组成:请求行、请求头、空行和请求数据;请求行由三个字段组成:请求方法字段、URL字段和HTTP协议字段,由空格分隔组成;例如,GET/index.htmlHTTP/1.1。HTTP协议的请求方式有GET、POST、HEAD、PUT、DELETE、OPTIONS、TRACE、CONNECT。请求头请求头由关键字/值对组成,每行一对,关键字和值之间用冒号“:”分隔。请求头告知服务器客户端请求的信息;常用请求头:Accept设置接受的内容类型Accept:text/plain;Accept-Charset设置接受的字符编码:Accept-Charset:utf-8;Accept-Encoding设置接受的编码格式:Accept-Encoding:gzip,deflate;Accept-Language设置接受语言:Accept-Language:en-US;Cache-Control设置请求-响应链上所有缓存机制必须遵守的指令:Cache-Control:no-cache;Connection设置当前连接和逐跳协议请求字段列表的控制选项:Connection:keep-alive;Content-Length设置请求体的字节长度:Content-Length:348;Content-Type设置请求体的MIME类型(适用于POST和PUT请求):Content-Type:application/x-www-form-urlencoded;Cookie设置服务器发送的httpcookie使用Set-Cookie:Cookie:$Version=1;皮肤=新的;;Host设置服务器域名和TCP端口号。如果使用服务请求标准端口号,端口号可以省略:Host:en.wikipedia.org:8080;Origin标识跨域资源请求(请求服务器设置Access-Control-Allow-Origin响应字段):来源:http://www.example-social-network.com;Expires设置响应体的过期时间:Expires:Thu,01Dec199416:00:00GMT;ETag资源标识符的具体版本,通常是消息摘要:ETag:"737060cd8c284d8af7ad3082f209582d";Last-Modified设置请求对象的最后修改日期:Last-Modified:Tue,15Nov199412:45:26GMT;最后一个请求头之后的空行是一个空行,发送回车和换行,通知服务器没有更多的头可以跟随。请求体(数据)请求数据不是用在GET方法中,而是用在POST方法中。POST方式适用于需要客户填写表单的场合。与请求数据相关的最常用的请求头是Content-Type和Content-Length。(2)响应消息HTTP响应也由四部分组成,即:状态行、消息头、空行和响应文本。响应中唯一真正的区别是第一行中的状态信息而不是请求信息。状态行通过提供状态代码来描述所请求的资源。状态行格式:服务器HTTP协议响应的版本状态码状态码的文字描述;状态码由三位数字组成,第一个数字定义了响应的类型,有五个可能的值:1xx:Instructions--表示请求已经收到并继续处理。2xx:成功——表示请求已被成功接收、理解和接受。3xx:重定向-需要进一步操作才能完成请求。4xx:ClientError-请求有语法错误或请求无法完成。5xx:服务器端错误——服务器未能完成合法请求。常见状态码:200OK:表示请求成功,一切正常301MovedPermanently:重定向,客户端请求的文档在别处,新的URL在Location头中给出,浏览器应该自动访问新的URL302Found:TemporaryresetDirectional,类似于301,但新的URL应该被认为是临时替换而不是永久替换。304NotModified:客户端已经缓冲文件并提出条件请求。服务器告诉客户端可以继续使用原来的缓冲文档。400BadRequest:请求有语法错误。403Forbidden:资源不可用。404NotFound:找不到指定位置的资源。405MethodNotAllowed:请求方法(GET、POST、HEAD、Delete、PUT、TRACE等)不适用于指定的资源。500InternalServerError:服务器遇到意外情况,无法完成客户端的请求。501NotImplemented:服务器不支持实现请求(3)所需要的功能。关于请求post和getGET提交的区别,请求的数据会附加到URL中(即数据放在HTTP协议头);POST提交:将提交的数据放在HTTP包的包体中;传输数据的大小:HTTP协议没有限制传输数据的大小,HTTP协议规范也没有限制URL的长度。实际开发中存在的限制主要有:GET:特定的浏览器和服务器对URL长度有限制,比如IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,具体取决于操作系统的支持。因此,在提交GET时,传输的数据会受到URL长度的限制。POST:由于不通过URL传递值,理论上数据是无限的。但是每个WEB服务器其实都会对post提交的数据大小进行限制,Apache和IIS6都有自己的配置。4、安全性:POST的安全性高于GET。通过GET提交数据,用户名和密码会以明文形式出现在URL上,因为(1)登录页面可能被浏览器缓存,(2)其他人可以查看浏览器的历史记录,那么其他人就可以得到您的帐号和密码Password(4),http和https1.HTTP和HTTPSHTTP协议通常承载在TCP协议之上,在HTTP和TCP之间增加了一个安全协议层(SSL或TSL)。这时候就变成了我们常说的HTTPS了,HTTP默认的端口号是80,HTTPS的端口号是4432。为什么HTTPS是安全的,因为网络请求中间需要经过很多服务器路由器的转发。中间的节点可能会篡改信息,如果你使用HTTPS,密钥就只有你和端站了。https之所以比http安全,是因为它使用ssl/tls协议进行传输。包括证书、卸载、流量转发、负载均衡、页面适配、浏览器适配、referdelivery等。保证传输过程的安全性3.关于Http2.0HTTP/2引入了“服务器推送”的概念,允许服务器在客户端需要数据之前主动将数据发送到客户端缓存,从而提高性能。HTTP/2提供更多的加密支持HTTP/2使用多路复用技术,允许多个消息在一个连接上同时交叉。它增加了标头压缩(headercompression),因此即使对于非常小的请求,请求和响应标头也只会占用一小部分带宽。4、http缺点:通信采用明文,没有加密,内容可能被盗;不验证通信方的身份可能会被伪装;消息的完整性无法验证,可能会被篡改。https是加加密处理(通常是SSL安全通信线路)+认证+完整性保护5.HTTP/2和HTTP/1.x的关键区别二进制协议代替文本协议,更简洁高效每个域只有一个多路复用connection压缩header信息以减少开销,并允许服务器主动将响应推送到客户端的缓存(5),http状态码的简单版本[100继续继续,一般在发送post请求时发送httpheader之后服务器会返回此信息表示确认,然后发送具体参数信息200OK正常返回信息201Created请求成功,服务器创建了新资源202Accepted服务器已接受请求,但尚未处理301永久移动请求的网页已永久移动到新位置。302发现临时重定向。303SeeOther临时重定向,始终使用GET请求新的URI。304NotModified请求的页面自上次请求后未被修改。400BadRequest服务器无法理解请求的格式,客户端不应再次尝试发起相同内容的请求。401Unauthorized请求未被授权。403Forbidden禁止访问。404NotFound没有资源找到如何匹配URI。500InternalServerError最常见的服务器端错误。503ServiceUnavailable服务器暂时无法处理请求(可能是过载或维护)。]二、网络-其他1.一个页面从输入URL到完成页面加载显示,这个过程发生了什么?(过程越详细越好)一个页面从输入URL到页面加载显示的过程中发生了什么2.说说网络分层中的七层模型。、会话层(从上到下)(HTTP、FTP、SMTP、DNS)传输层(TCP和UDP)网络层(IP)物理和数据链路层(以太网)各层的作用如下:物理层:通过介质传输比特以确定机械和电气规格(Bit)数据链路层:将比特组装成帧并进行点对点传输(Frame帧)网络层:负责数据包从源到目的地的传输和互联网互连(Packet)传输层:提供端到端的可靠消息传递和错误恢复(Segment)会话层:建立、管理和终止会话(SessionProtocolDataUnitSPDU)表示层:翻译、加密和压缩数据(表示协议数据unitPPDU)应用层:表示允许访问OSI环境(应用协议数据单元APDU)3.304缓存的原理服务器先生成ETag,稍后服务器可以使用ETag判断页面是否被修改.本质上,客户端通过将令牌发送回服务器来请求服务器验证其(客户端)缓存。304是一个HTTP状态码,服务器用它来标识文件没有被修改,不返回内容。浏览器收到状态代码后,客户端使用浏览器缓存的文件请求页面(A)。服务端返回页面A,并为A添加ETag。客户端渲染页面,并将页面连同ETag一起缓存。客户端再次请求页面A,将上次请求时服务器返回的ETag传递给服务器。服务端检查ETag,判断该页面自上次客户端请求后未被修改,直接返回304(notmodified——NotModified)响应和空响应体。