HTTP笔记

123 阅读7分钟

http

网络传输的情况:

数据包从一台主机到达另一台主机,需要考虑的问题如下列出:

  • 数据丢包
  • 数据重复
  • 对数据的完整性校验
  • 数字信号与模拟信号与光脉冲的转化
  • 信号的衰减
  • ......

解决一系列问题的第一步是将全部问题分层,由不同模块处理不同问题

分层的要求就是各层之间建立准确传输——下层对上层定义标准化接口。

细说过程:

  1. 用户输入URL

  2. 浏览器从URL中解析出域名

    • 浏览器会设置缓存,缓存中就存有某些之前访问过的域名的IP地址,如果解析出的域名在缓存中找到了IP,则直接下一步
    • 如果上一步没找到,回去本机域名解释文件——host,找找这个域名的IP有没有配置
    • 如果还没找到,去本地配置的DNS服务器找IP地址
    • 如果还没找到,去上一层配置的DNS服务器找IP地址
    • ......直到找到顶级域名的DNS服务器
  3. 浏览器用此IP地址进行网络请求(前后端通信)

    1. TCP三次握手
    2. 浏览器构建http请求报文
    3. 浏览器发送请求报文
    4. 后端应用服务器接收后完成逻辑操作,返回http响应报文
    5. 浏览器解析响应报文
    6. TCP四次挥手,用于结束请求

HTTPS:

http天生明文,整个传输过程完全透明,任何人都能够在链路中截获,修改,伪造请求和响应报文,数据具有不可信性。

例如:当访问某些网站时,网站本身没有广告,但响应在浏览器中就出现广告——响应报文被篡改了

HTTPS的逻辑:

HTTPS实际上就是在http报文发给tcp接口进行socket传输之前,先经过SSL层加密(Secure Socket Layer),然后传输给TCP接口进行传输。接收时TCP先发给安全层进行解密,在给到应用层组织http协议格式

缓存机制

在客户端(浏览器)和服务器之间的通信过程中,使用缓存来存储和重复使用已获取的资源的机制。HTTP缓存可以减少对服务器的请求次数,提高网页加载速度,并减轻服务器的负载。

以下是HTTP缓存的几个主要机制:

  1. 强缓存(Expires 和 Cache-Control):

    cache-control中设置的一些可选值全局控制传输的文件是否遵循此规则。

    例如,public——所以都被缓存

    no-cache/no-store——所有都不缓存

expires:规定缓存的最后期限,超过此时的内容将失效

淘汰时间设置太长不好,因为如果更改的话可能需要同步,设置太短也不好,因为这样约等于没有缓存

  1. 协商缓存(Last-Modified 和 If-Modified-Since):

    逻辑是浏览器发送的响应会携带文件的最后修改时间,客户端将此信息与文件副本存入缓存中,下一次再访问相同的文件时,只需要发送一个if-modified-since+时间,询问服务器此事件是否为最后修改时间,如果是,之间访问缓存

  2. 协商缓存(ETag 和 If-None-Match):

    和last-modified功能类似,是通过版本号控制是否淘汰。

Cookie机制:

由于http是一种无状态的协议,服务器无法根据连接来知晓用户的历史操作,这严重阻碍了web应用程序的交互,于是——Cookie是一段用作用户身份识别和操作记录的文本信息

机制:

1.客户端请求服务器时,若服务器需要记录用户状态,就在响应用户请求时发送一段Cookie信息。

2.客户端浏览器会保存该Cookie信息,当用户再次访问该网站时,浏览器会把Cookie做为请求信息的一部分提交给服务器。

3.服务器对Cookie进行验证,以此来判断用户状态,当且仅当该Cookie合法且未过期时,用户才可直接登录网站。

  1. Cookie由用户客户端浏览器进行保存,按其存储位置可分为内存式存储和硬盘式存储。

    1. 内存式存储将Cookie保存在内存中,在浏览器关闭后就会消失,由于其存储时间较短,因此也被称为非持久Cookie或会话Cookie。
    2. 硬盘式存储将Cookie保存在硬盘中,其不会随浏览器的关闭而消失,除非用户手工清理或到了过期时间。由于硬盘式Cookie存储时间是长期的,因此也被称为持久Cookie。

DNS域名解析:

  • 有趣的点:

    1. DNS解析的过程基本上是:现在浏览器的缓存找对应的IP,找不到去操作系统的缓存寻找对应IP,这一步是最危险的,因为第一步的对应关系来自过去接收的消息,且是动态更新的马,不太好偷偷摸摸操作,但在主机上的域名对应表,如果被篡改到危险网站,可就危险了,所以win7以后的版本,此表的文件都设置为只读。
    2. 系统可以跟踪域名解析过程——P14
  • 几种域名解析方式:(就是说服务器收到域名后返回什么)

    1. 返回A记录:就是返回IP地址

    2. 返回MX记录:(mail Exchange)将本服务器内配置的此邮件对应的MX记录返

      这是用于发送邮件的。

      由于邮件服务器有多台,于是在决定访问哪一台之前需要经过MX记录得到一个多台服务器的访问优先级,由此顺次访问直到成功。

      邮件服务器的作用不仅仅是路由,其实也相当于一个小程序,负责接收,存储,处理,提供访问接口...

      出于对服务器负载均衡和高可用性的考虑才进行的配置多台服务器的集群/链路,这就是分布式。

    3. 返回CName记录:(canonical name(规范名/别名)):用于将一个域名解析为另一个域名

    4. 返回NS记录:用于给一个域名返回特定的DNS服务器

    5. 返回TXT记录:返回一个和请求域名相关的文本消息

CDN 内容分布网络

配置集群/链路,使用户的访问都会从离自身最近的边缘服务器获取响应、

CDN是构建在现有网络基础之上的智能虚拟网络,依靠部署在各地的边缘服务器,通过中心平台的负载均衡、内容分发、调度等功能模块,使用户就近获取所需内容,降低网络拥塞,提高用户访问响应速度和命中率。


从技术视角理解,CDN 通过多级代理服务器对源站内容(例如 js/css/html/mp4 等)进行缓存,让静态内容缓存在距离用户更近的 IDC 机房节点上,实现用户获取资源的网络距离大幅度缩减,进而提升终端用户体验和传输效率。

img

CDN解析流程:

当用户A要访问淘宝的一个CSS文件时,在LDNS迭代解析后会访问到淘宝的一个DNS,这个DNS会返回一个Cname,是指向离用户A最近的一个服务器的。

负载均衡:

三种负载均衡架构:

  1. 链路负载均衡

  2. 集群负载均衡

    1. 硬件负载均衡
    2. 软件负载均衡
  3. 操作系统负载均衡

    链路负载均衡:就是前面一直再用的根据DNS解析成不同的IP,访问不同的边缘服务器

    集群负载均衡:没有中间DNS设备,

  4. 硬件...:中间使用一台专门的硬件设备来转发请求

  5. 软件...:中间使用负载均衡器进行路由

    负载均衡器(nginx,LVS,HAProxy):可以在网络层(IP路由)或者应用层(http路由)对请求进行分发,分发到不同服务器

    相比而言,硬件负载均衡里的设备很贵,软件负载均衡里的负载均衡器使用普通的PC就能做到。但问题就在于PC功能比较差,往往需要访问多个负载均衡器。