一、HTTP

HTTP常见的版本有0.9、1.0、1.1、2.0、3.0;

HTTP的版本查看

  1. 浏览器控制台查看request 请求如下图即为2.0;http版本查看

  2. 控制台打印window.chrome.loadTimes(); —— 找到对应对象npnNegotiatedProtocol: “h2”;

  3. 上面方法有的浏览器已被弃用可以使用performance.getEntriesByType(‘navigation’);—— 定位字段是nextHopProtocol: “h2”;

HTTP的版本特点

  • HTTP0.9第一个版本的HTTP协议,已过时,只有GTE请求,是无状态性的,每个事务单独进行,事务结束释放连接。
  • HTTP1.0第二个版本,新增POST请求,请求头、http状态码,cookie。
  • HTTP1.1新增keep-alive长连接,pipeline管道、请求方式添加了PUT、DELETE、OPTIONS、PATCH等新方法,新增缓存字段,请求头引入range字段,支持断点续传,强制要求Host头。
  • HTTP2.0头部支持二进制协议,支持头部压缩,新增多路复用。
  • HTTP3.0大改版,将底层TCP协议改为UDP,彻底解决队头阻塞问题。缺点:目前兼容性不够,不能规模使用。

HTTP1.1必记特点?

  1. HTTP1.1默认使用Connection:keep-alive(长连接),避免连接建立与释放的开销。
  2. 支持pipeline管道传输,可不必等待请求响应就发起下一请求,但响应结果是按序传输。
  • 长连接:
    • 引入TCP连接复用(一个TCP默认不关闭,可被多个请求复用)。
    • 因为TCP每次连接即每次的发收都需要三次握手;而开启长连接可避免,只需三次握手就可进行多次的收发。
  • 管道机制pipelining:
    • 一个TCP连接,可同时发送多个请求(但响应顺序必须和请求的顺序一致,因此不常用)。
    • pipeline的基础是长连接,建立在长连接之上。
      pipeline和长连接的区别?和多路复用的区别?
      (图一)单独长连接:发一条收一条,没收到就不能发下一条
      alt
      (图二)长连接+pipeline:发1、2收1、2收必须是发的顺序一一对应,卡住一个后面全卡住。
      在这里插入图片描述

(图三)多路复用:基于HTTP二进制的“分帧”,发送1后需要接收到的数据无论顺序和包装是否完整最后的组成只要是[1-1,1-2,1-3]就可以,即收到的数据不需要和发出去的顺序一致;解决了http层面的队头阻塞问题。
在这里插入图片描述

HTTP2.0必记特点?

1、二进制协议,头部和数据部分都是二进制,且统称为“帧”。
2、多路复用,避免队头阻塞问题(HTTP层面)。
3、头部信息压缩。
4、服务端主动推送。
5、数据流传输:服务端以流(stream)的形式向客户端返回内容,且每一个数据流有唯一的编号id,请求数据流ID为奇数,响应数据流ID为偶数;客户端还能指定数据流的优先级,优先级越高,服务器会越快作出反应。

HTTP3.0必记特点?

1、彻底解决队头阻塞问题(TCP层面)。为此,Google设计了基于UDP协议的QUIC协议并使用在HTTP3.0上。
2、使用UPD协议,不需要三次连接进行握手,也会缩短TLS(HTTPS)建立连接的时间。
3、实现动态可插拔,在应用层实现了拥塞控制算法,可随时切换。
4、报文头和报文体分别进行认证和加密处理,保障安全性。
5、连接可平滑迁移即手机或移动设备在4G信号和wifi等网络下切换,不会短线重连,用户甚至无感能实现平滑的信号切换。

  • 补充知识
    1)HTTP是基于TCP协议实现的。
    2)TCP主要作用是以正确的顺序将整个字节流从一个端点传输到另一个端点;当流中数据包丢失时,TCP需要重新发送丢失的包,只有丢失的数据包到达对应的端点才能被HTTP处理,这就是TCP队头阻塞问题。
    3)QUIC协议:特征是快,HTTP在传输层使用了TCP进行报文传输,建立连接需要三次握手;QUCI的握手连接更快是因为使用了UDP作为传输层协议,能减少三次握手的时间延迟。

二、网络分层

  1. 物理层:负责比特流在节点间的传输(就是把计算机连接起来的物理手段;)
    • 代表作用:传输0101信号;
    • 代表设备:网线,光纤;
  2. 数据链路层:控制网络层与物理层之间的通信,从网络层接收到的数据会被分割成待定的可被物理层传输的帧。一帧是64-1518字节。
    • 代表作用:Mac地址确认,Arp广播;
    • 代表设备:交换机,大型路由器;
  3. 网络层:将数据从发送方路由到接收方(主机到主机间的通信)。需综合考虑发送优先权、网络拥塞程度、服务质量、可选路由的花费等来决定一个网络从A节点到B节点的最佳路径。
    • 代表作用:分配IP地址;
    • 代表设备:家用路由器;
  4. 网络层:将数据从发送方路由到接收方(主机到主机间的通信)。需综合考虑发送优先权、网络拥塞程度、服务质量、可选路由的花费等来决定一个网络从A节点到B节点的最佳路径。
    • 代表作用:分配IP地址;
    • 代表设备:家用路由器;
  5. 应用层:应用程序收到传输层数据后,进行解读。而解读必须事先规定好格式,应用层就是规定应用程序的数据格式的。
    • 主要协议:HTTP、FTP、Telnet、SMTP、POP3等。

三、TCP与UDP的区别

1、TCP面向连接(如打电话需要先拨号建立连接)提供可靠服务;UDP无连接,尽最大努力交付,不保证可靠交付;
2、UDP具有较好的实时性,工作效率高,适用于高速传输和实时性有较高需求的通信或广播通信。
UDP应用场景:直播,游戏;
TCP应用场景:网页;
3、TCP面向字节流,TCP把数据看一连串无结构的字节流;UDP面向报文的一次交付一个完整的报文,报文不可分割,报文是UDP数据处理的最小单位。
4、每条TCP连接只能是一对一的,UDP支持一对一,一对多,多对一和多对多的交互通信。
5、UDP适合一次性传输较小数据的网络应用如DNS、SNMP(专业的网管,如服务器、路由器、交换机统一管理、排查错误等)。

四、常见的HTTP状态码

1XX:正在处理你的请求;
2XX:表示你的请求成功了,经典状态200表示成功请求和响应;
3XX:表示浏览器需要做一些其他处理才能继续处理你的请求:302重定向、304缓存;
4XX:客户端发生错误:401没有登录、403已经登录但是这个模块你没有权限、404服务器上没有请求的资源等;
5XX:后端(服务器)发生错误,联系后端;

五、TCP滑动窗口和拥塞控制

滑动窗口(Sliding window)

是一种流量控制技术,是为了解决早期网络通信双方不会考虑网络拥挤情况直接发送数据导致同时发送数据中间节点阻塞掉包,发送不了数据等的问题;流量控制要做的就是抑制发送端发送数据的速率,以便使接收端来得及接收。
1、TCP采用滑动窗口进行传输控制,滑动窗口的大小意味着接收方还有多大的缓冲区(内存占用)可用于接收数据,发送方可通过滑动窗口的大小来确定应该发送多少字节的数据;
2、客户端和服务端达成一致即到底发送多大的数据包过去给对方;
3、TCP也维持一个滑动窗口,解决的是端对端的问题,并且是动态变化的;

TCP的拥塞控制作用

1、某一时间段内当对某一资源的请求超过了改资源所能提供的可用部分,网络性就可能变坏,这种情况就叫拥塞;
2、拥塞控制就是为了防止过多的数据注入到网络中,前提是网络能够承受现有的网络负荷。拥塞控制是一个全局性过程,涉及到所有主机、路由器,以及与降低网络传输性能有关的所有因素。
3、为了进行拥塞控制,TCP发送方也要维持一个拥塞窗口的状态变量,拥塞控制窗口的大小取决于网络的拥塞程度,并且动态变化。

滑动窗口与拥塞控制的区别?

滑动窗口:解决我跟你,自己本身的问题;
拥塞控制:解决我去你那,路况拥堵问题;
发送方让自己发送窗口去拥塞窗口和滑动窗口中较小的一个。

六、HTTPS加密

对称加密:这把钥匙能加密也能解密;
非对称加密:两把钥匙,一把加密(公钥),一把解密(私钥);

HTTPS加密过程

1、客户端发起一个http请求,告诉服务器自己支持哪些hash算法;
2、服务器把自己的信息以数字证书的形式返回给客户端(证书内容包含公钥,网络地址,证书颁发机构,失效日期等)。证书中有一个公钥来加密信息,私钥由服务器持有;
3、验证证书的合法性:客户端收到服务器响应后会先验证证书合法性(地址与正在访问的地址是否一致,证书是否过期);
4、生成随机密码(RSA签名):验证通过或用户接受了不受信任的证书,浏览器会生成一个随机的对称密钥(session key,并用公钥加密,让服务端用私钥解密,解密后就用着各 对称密钥进行传输,也能说明服务端确实是私钥的持有者;
服务端和浏览器之间使用非对称加密沟通一个“随机字符串”,后续的通信过程就是使用这个随机字符串作为对称加密的密钥,来对双方沟通的内容进行加密和解密;
5、生成对称加密算法:验证完服务端身份后,客户端会生成一个对称加密的算法和对应密钥,以公钥加密后发给服务器,只有服务端的私钥可以对其进行解密,之后客户端与服务端就可以用这个对称加密算法来加密和解密通信内容了。

HTTPS不是绝对安全的

  1. 有一种攻击叫做“中间人攻击”,即中间人冒充服务器,对服务器冒充浏览器,从而拿到双发通信数据进行篡改;
    发送方让自己发送窗口去拥塞窗口和滑动窗口中较小的一个。
    如何防范:
  2. 不要轻易相信任何证书,不知名的小网站不要随意访问;
  3. 浏览器给的安全提示中显示有风险的需要谨慎;
  4. 谨慎连接公共wifi;

七、浏览器的强缓存和协商缓存

强缓存

强缓存时通过Expires与Cache-Control来控制缓存在本地的有效期;

  • Expires
    Expires是HTTP1.0提出的一个表示资源过期时间的Header,描述的时一个绝对时间,由服务器返回。受限于本地时间,倘若更改本地时间,强缓存可能失效,对于资源的请求在Expires内浏览器会直接读取缓存,不在请求服务器。
    Expires:Sun, 7 Dec 2025 09:50:57 GMT

  • Cache-Control
    出现于HTTP1.1,优先级高于Expires,表示相对时间,请求头和响应头都支持这个属性,通过它提供不同的值来定义缓存策略。
    Cache-Control:max-age=300:响应最大的过期时间设,单位秒,是距离请求发起的时间秒数。
    Cache-Control:no-store缓存中不得存储任何关于客户端请求和服务端响应的内容,每次由客户端发起的请求都下载完整的响应内容。
    Cache-Control:no-cache缓存中会存储服务端响应的内容,浏览器每次请求时,缓存都要向服务端评估缓存响应的有效性,协商缓存是否可用,以响应304还是200来判断使用本地缓存还是服务器响应的资源。
    Cache-Control:public || private:public表示该响应可以被任何中间人如中间代理CDN缓存;默认是private是该响应专用的,中间人不能缓存此响应,只能应用于浏览器私有缓存中。
    Cache-Control:must-revalidate使用时意味着缓存在考虑使用一个陈旧资源时,必须先验证它的状态,已过期的缓存将不被使用。

协商缓存

浏览器对某个资源的请求没有命中强缓存,就会发一个请求到服务器,验证协商缓存是否命中,如果协商缓存命中,请求返回的HTTP状态为304(Not Modified),该请求不携带实体数据,若未命中,则返回200并携带实体数据。协商缓存利用的是Last-Modified,If-Modified-Since和ETag、If-None-Match
这两队Header来管理。
Last-Modified,If-Modified-Since是HTTP1.0引入的,Last-Modified表示本地文件最后修改日期,浏览器请求会在头上带上If-Modified-Since(上次响应Last-Modified值)询问服务器是否在该日期后更新资源,若有会将新资源发回来,但若在本地打开缓存文件会造成Last-Modified被修改,所以HTTP1.1出现ETag。
ETag If-None-MatchETag像一个指纹,资源变化都会导致ETag的变化,可保证每一个资源时是唯一的,If-None-Match请求头字段会将上次返回的ETag发送给服务器,询问ETag是否有更新,有变动就会发送新的资源回来。ETag优先级比If-None-Match高。

ETag和If-None-Match区别

  1. If-None-Match精度到秒,但性能更好;
  2. ETag更精细,性能不如前者,因为文件变化都需要重新计算hash的值。

以百度的首页为例

没有缓存:
请添加图片描述

浏览器强缓存状态是成功200:请添加图片描述请添加图片描述
浏览器协商缓存状态码是304:
在这里插入图片描述
在这里插入图片描述

八、XSS攻击和防范

XSS指的是跨站脚本攻击,是一种代码注入攻击。攻击者通过在网站注入恶意脚本,使之在用户浏览器上运行,从而盗取用户的信息如cookie等。

如何防范XSS?

  1. 前段对表单的提交,敏感字符进行转义,例如“<”,“/”等;实际就是让其不能形成完成的sql语句,或者script请求。
  2. 前端的防范不一定绝对安全,因为会有抓包和篡改。
  3. 核心还是后台进行处理,比如转义等。

九、CSRF攻击和防范

csrf也叫做跨站请求伪造,一般需要借助XSS产生的漏洞。

  • 场景1:我们在访问淘宝taobao.com时不小心点到了淘宝里面的黑客故意留的taobao.com?pay(表面展示是普通评论但实际意思可能是把钱转过去),因为接口是在taobao.com这个下,接口会认为你已经登录了,从而支付成功。
  • 场景2:钓鱼网站,比如访问的事xxx.com点击这个域名下的某图片之后连接的是aobao.com?pay也会进行支付,因为之前在该设备或浏览器登录过淘宝,并且本地缓存有自己的cookie。

如何防范csrf?

  1. 堵住XSS漏洞;
  2. 在http的header中添加token校验;
  3. 校验请求的http reffer;

十、webscoket

  • webscoket是一个新的协议,为了兼容浏览器的握手规范,也可以说是HTTP协议的一种补充。与HTTP是部分交叉关系。
  • webscoket协议在2008年诞生,在2011年成为国际标准。
  • 最大的特点是:服务器与客户端都可以主动推送信息给对方(允许服务器与客户端进行全双工(full-duplex)的通信),是真正的双向平等对话,属于服务器推送技术的一种。
  • 其他特点有:
    • 建立在TCP协议之上,服务端实现比较容易;
    • 与http协议有良好的兼容性,默认端口80和443,握手阶段采用HTTP协议。
    • 数据格式轻量级,性能开销小,通信高效。
    • 可发送文本和二进制数据。
    • 没有同源限制,客户端可与任意服务器通信,可完全取代Ajax。
    • 协议标识符ws(加密则是wss,对应是HTTPS协议),服务器地址就是URL。

Scoket 和Webscoket的关系

  • TPC/IP协议是传输层协议,主要解决数据如何在网络中传输;
  • Scoket是对TCP/IP协议的封装和应用(程序员层面上);
Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐