当前位置: 首页 > Web前端 > HTML5

关于HTTP的那些事

时间:2023-04-05 15:28:23 HTML5

什么是HTTPHTTP是一种超文本传输??协议,用来完成客户端和服务端等一系列操作过程。协议是规则的约定。换句话说,Web是建立在HTTP协议之上进行通信的。一般使用TCP/IP协议的网络都是在TCP/IP协议的基础上运行的,HTTP属于它的一个子集。当计算机和网络设备相互通信时,两者必须基于相同的方法。协议内容包括:从电缆规格到IP地址的选择方法、寻找远程用户的方法、双方建立通信的顺序、网页显示的处理步骤等。这些的集合相关协议统称为TCP/IP。TCP/IP模型各层的作用:TCP/IP的重点是分层。有以下4层:应用层、传输层、网络层和数据链路层。应用层:应用层决定了向用户提供应用服务时的通信活动,如FTP(文件传输协议)和DNS(域名解析系统)。HTTP协议也在这一层。传输层:传输层提供通过网络连接到上层应用层的两台计算机之间的数据传输。该层有2个不同的协议:TCP传输控制协议和UDP用户数据协议。网络层:用于处理网络上的数据包。数据包是通过网络传输的最小数据单位。网络层的作用是在多条路由中选择一条传输路由进行数据传输。链路层:处理连接到网络的硬件部分。包括操作系统、硬件、路由器等设备都属于这一层。TPC/IP分层的好处是,如果Internet是按一种协议统一规划的,当某处设计需要改动时,所有的部分都必须整体更换。分层后,只需替换改变的图层即可。层与层之间的接口规划好后,各层的内部设计就可以自由更改。比如应用层的一个应用程序,只能考虑分配给自己的任务,而不考虑其他问题。TCP/IP通信传输流程:TCP/IP协议通信时,会通过层级顺序与对方进行通信。客户端从应用层往下走,服务端从链路层往上走。首先,客户端在应用层发送HTTP请求。然后,传输层接收到应用层的数据后,对其进行划分,在每条报文上标上序号和端口号,转发给网络层。在网络层,加上通信目的的MAC地址,转发给链路层。接收端(serverend)的服务器在链路上接收,并按顺序向上层发送,直到到达应用层。客户端发送的HTTP请求在传输到应用层时实际上是被接收到的。与HTTP相关的协议在HTTP客户端向服务器端发送消息之前,IP、TCP、DNS是三个离不开HTTP的协议。IP网络协议IP网络协议处于网络层,IP协议的作用是相互传输各种数据包。但要确保正确传输给对方,IP地址和MAC地址(如家庭地址和电话号码)两个重要条件。IP地址:是分配给节点的地址。MAC地址:网卡所属的固定地址。IP地址可以与MAC地址配对。IP地址是可变的,MAC地址是不可变的。TCP协议TCP协议处于传输层,其主要功能是提供可靠的字节流服务。字节流业务是指将大块的数据分成以报文段为单位的数据包进行管理,以方便传输。可靠传输服务是指能够准确、可靠地向对方传输数据。三向握手:客户端首先向服务器发送一个带有SYN标志的数据包。服务端收到后返回一个带有SYN/ACK标志的数据包表示确认信息,最后客户端发回一个带有ACK标志的数据包,表示握手结束。DNS服务DNS服务与HTTP协议一样,处于应用层。它的主要功能是将域名解析为IP地址。DNS协议可以通过域名查找IP地址,也可以通过IP地址查找域名的服务。与HTTP相关的WEB服务器HTTP通信时,除了客户端和服务器外,还有通信数据转发的程序。代理是一种具有转发功能的程序,存在于客户端和服务器之间,相当于一个中间人。将请求从客户端转发到服务器。服务器返回的数据也会转发给客户端。网关是其他服务器的中间实体使用的特殊服务器。用于将HTTP请求转换为其他协议通信。当网关收到请求时,它就像处理自己的资源源服务器一样处理请求。隧道是根据需要与其他服务器建立通信线路,使用SSL加密通信。隧道的目的是确保客户端和服务器之间的安全通信。缓存缓存是保存在代理服务器(缓存服务器)或客户端本地磁盘(浏览器中的缓存)上的资源副本。使用缓存可以减少对源服务器的访问,主要目的是减少网络带宽流量和通信时间。缓存服务器是一种代理服务器,当代理从服务器转发回响应时,它会保存资源的副本。缓存服务器的好处是缓存可以避免多次从源服务器转发资源。因此,客户端可以就近从缓存服务器获取资源,源服务器不必多次处理同一个请求。HTTP缓存目前是大多数项目的缓存方案:HTML:Negotiatecaching。css、js、图片:强缓存(文件名加hash)缓存类型:数据库缓存、CDN缓存、代理服务器缓存、浏览器缓存。我们第一次进入页面,请求服务器,然后服务器响应。浏览器根据ResponseHeader判断是否缓存资源。如果响应头中的Expires、Paragma和Cache-Control字段表明这是一个强缓存,浏览器会将资源缓存到内存缓存或磁盘缓存中。第二次再次请求时,浏览器判断请求参数,如果满足强缓存条件(未过期),则直接返回200,从本地缓存中获取数据。否则,将响应参数存储在请求头中,看是否满足协商缓存(资源没有变化)。如果是,它将返回304,如果不是,服务器将返回一个新的资源。强缓存当我们访问URL时,浏览器会判断请求的资源是否在有效期内。如果在有效期内,则直接从缓存中读取资源,同时返回200。强缓存通过Expires、Paragma和Cache-Control字段设置。expires不是时间戳,服务器返回请求结果时的过期时间。如果重新发起时没有超过,可以直接使用缓存,超过了就重新请求。注意:它使用本地时间判断是否过期,本地时间可以自行更改。优先级最低的Cache-Control优先级最高,主要取值有:public:客户端和服务端都可以缓存资源private:只有客户端可以缓存资源no-cache:客户端缓存资源,但是缓存是否需要通过协商缓存来验证。no-store:不使用缓存max-age:缓存保质期Pragma值no-cache与Cache-Control=no-cache效果相同。客户端缓存资源,但是是否缓存需要通过协商缓存来验证。强缓存主要将资源放在内存缓存和磁盘缓存中。一般图片、网页等都存放在磁盘缓存中,操作系统缓存文件大部分存放在内存缓存中,速度比较快。找到浏览器缓存的位置:ServiceWorker->MemoryCache->DiskCache->PushCache。协商缓存无效后,向服务端发送get请求,并带有缓存标识,服务端根据缓存标识决定是否使用缓存在此过程中,如果协商缓存有效,则返回304,指向缓存地址。协商缓存失效,返回200和请求的结果。主要由Last-Modified/If-Modified-Since和Etag/If-None-Match设置。Last-Modified/If-Modified-SinceLast-Modified是服务器响应请求,返回资源文件在服务器上最后一次修改的时间。If-Modified-Since表示客户端再次发起请求时,携带上次请求返回的Last-Modified值,并通过该值告诉服务端上次请求返回的资源的最后修改时间。服务端通过If-Modified-Since比较资源在服务端的最后修改时间。如果服务器上的最后修改时间大于If-Modified-Since,说明资源又被修改了,再次返回资源,状态为200,否则返回304,可以继续使用缓存。Etag/If-None-Match优先级高,性能成本高。Etag是服务器响应请求时返回当前资源文件的唯一标识(由服务器生成)。If-None-Match表示客户端再次发起请求时,会携带上次请求返回的Etag值。服务端收到后,会根据If-None-Match,将其与服务端资源的Etag进行比较。如果匹配,则返回304resourcenotupdatedCache,否则返回资源,200。不同的是,强缓存不会向服务器发送请求,所以有时候浏览器并不知道资源什么时候更新。但是,协商缓存会将请求发送到服务器。大多数Web服务器默认启用协商缓存。ctrl+f5时,会经过强缓存和协商缓存,直接从服务器加载。f5时会跳过强缓存,但会检查协商缓存。