Http学习篇

777 阅读11分钟

学习资料链接

HTTP面试篇

1.http请求头和响应头里有哪些参数

Request Headers

  • Accept: 客户端能接收的资源类型
  • Accept-language: 客户端能接收的语言类型
  • Accept-Encoding: 客户端能接收的压缩数据类型
  • connection: 客户端和服务端的连接关系
  • Host: 目标主机和端口号(用于虚拟主机)
  • User-Agent: 客户端版本号名字
  • Cookie: 客户端暂存服务端的信息
  • Date: 客户端请求服务端的时间

Response Headers

  • Connection: 客户端和服务端保持的连接关系
  • Content-Encoding: 服务端压缩编码类型
  • Content-Type: 资源类型 application/json;charset=utf-8 ; text/css; application/javascript;
  • Content-Length: 压缩数据的长度
  • Cache-Control
  • Last-Modified: 上次修改时间
  • Etag: 上次修改时间
  • Access-Control-Allow-Credentials
  • Access-Control-Allow-Origin
  • Access-Control-Allow-Methids
  • Date: 服务端响应时间

2. cookie选项

一文看懂cookie

  • Name
  • Value
  • Domin
  • Path
  • Expires/MaxAge
  • Size
  • HttpOnly: 禁止js读取cookie
  • Secure: 只有https能携带cookie信息
  • SameSite: 禁止跨域,防止
  • Priority: 优先级

3.什么是HTTP,HTTPS和HTTP的区别

HTTP协议

超文本传输协议,是实现网络通信的一种规范

  • 灵活:支持客户端/服务端模式
  • 简单快速:客户端请求服务器时,只需要传送请求方法和路径
  • 无连接:每次连接只处理一个请求,随后断开
  • 无状态:HTTP请求无法根据以前的状态处理本次请求

HTTPS协议

由于HTTP是以明文的形式进行数据传输,不安全,HTTPS = HTTP + SSL/TLS,让HTTP协议运行在安全的SSL/TLS协议上,通过SSL证书来验证服务器的身份,并为浏览器和服务器之间的通信进行加密

SSL/TLS协议运行在TCP/IP协议和应用层协议之间,浏览器和服务器建立SSL连接时需要选择一组恰当的加密算法来实现安全通信,为数据通信提供安全支持

区别

  • http是明文传输不安全
  • 默认端口不一样,http是80, https是443
  • https需要SSL证书,证书要钱,费用高

4.HTTPS如何保证安全

HTTP协议存在的问题

  • 使用明文通信,内容可能被窃听
  • 不验证身份,因此可能遭到伪装

HTTPS

使HTTP协议运行在SSL/TSL协议之上,安全性由SST来保证

SSL:Secure Socket Layer 安全套接字协议 TSL: 传输层协议

优势

信息加密、完整性校验、身份验证

实现

SSL的实现主要依赖于以下几种手段

  • 对称加密: 采用协商的密钥对数据加密
  • 非对称加密: 实现身份认证和密钥协商
  • 摘要算法: 验证信息的完整性
  • 数字签名: 身份验证

对称加密

加密和解密的密钥是同一个。只要保证了对称密钥是安全的,就可以保证通信安全,而如何保证对方拿到安全的对称密钥,使用到了非对称加密技术。

非对称加密

公钥加密和私钥解密,公钥可公开给任何人使用,私钥保密

混合加密

在HTTPS通信过程中,使用的是对称加密+非对称加密。

发送密文的一方使用对方的公钥进行加密处理“对称的密钥”,这样对方用自己的私钥拿到了对称的密钥,之后就可以通过这个对称的密钥进行加密通信

摘要算法

一种特俗的压缩算法,常说的散列函数、哈希函数,给数据生成了一个数字指纹。发送一段数据的时候,附上她的摘要,对方接收到数据之后进行对比,就知道数据有没有被修改。

数字签名

数字签名可以确定消息是由发送方签名发出来的,因为别人假冒不了发送方的签名。

原理是利用私钥加密,公钥解密。

签名和公钥一样公开。

CA验证机构

引入第三方机构,确保安全性

5.如何理解UDP和TCP, 区别,应用场景

TCP

传输控制协议。

UDP

用户数据包协议,简单的面向数据包的通信协议,即对应用层交下来的报问,不合并,不拆分,只是在上面加了首部之后就交给了下面的网络层。

区别

  • 可靠性: TCP可靠(面向连接、不丢失)、UDP不可靠(面向无连接、存在丢失的可能)
  • 连接性: TCP面向连接、UDP无连接
  • 报文: TCP面向字节流、UDP面向报文
  • 双共性: TCP全双工、UDP一对一/一对多/多对多
  • 流量控制:TCP滑动窗口、UDP无
  • 拥塞控制: TCP慢开始/拥塞避免/快重传、UDP无
  • 传输效率: TCP慢、UDP快

应用场景

TCP:邮件、QQ文件传输、浏览器 UDP:QQ语音、QQ视频、直播

6.OSI七层模型

从下往上:物理层、数据链路层、网络层、传输层、会话层、表示层、应用层

TCP/UDP位于传输层

IP位于网络层

7.DNS协议是什么?DNS查询完整过程

DNS

域名系统,是互联网的一项服务, 是进行域名和与之对应的ip地址进行转换的服务器。

域名

域名是具有层次的结构,从上到下分为根域名、顶级域名(net、com、org、edu、cn)、二级域名、三级域名、、、、

www.xxx.com: www为三级域名、xxx为二级域名、com为顶级域名

在域名的每一层都有一个域名服务器,除此之外,还有电脑默认的本地域名服务器

image.png

DNS查询方式

  • 递归查询

  • 迭代查询

域名缓存

两种缓存方式

  • 浏览器缓存
  • 操作系统缓存(用户自己配置的host文件)

域名解析过程

  • 搜索DNS缓存,先浏览器缓存,再操作系统缓存
  • 请求本地域名服务器,本地域名符预期递归查询自己的DNS缓存,查找成功则返回结果
  • 向上迭代查询,本地域名服务器向根域名服务器发起请求,根服务器返回顶级域名服务器的地址给本地服务器
  • 本地服务器向顶级域名服务器发送请求,获取权限服务器的地址
  • 本地服务器向权限服务器发送请求,获得最终的IP地址
  • 本地服务器拿到IP地址,返回给操作系统,同时将自己的IP地址缓存
  • 操作系统将IP地址返回给浏览器,同时缓存
  • 浏览器获得IP地址,缓存

image.png

8.CDN

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

关键技术

  • 负载均衡
  • 缓存技术

原理分析

没有应用CDN之前,DNS查询返回的是目标服务器的IP地址

应用CDN之后,DNS查询返回的是一个CNAME(Cannonical Name)别名记录,指向CDN的全局负载均衡

CNAME在域名解析中承担了中间人的角色,是实现CDN的关键

负载均衡系统

由于没有返回IP地址,于是本地DNS会向负载均衡系统发送请求,全局负载均衡系统进行智能调度

  • 根据用户的IP地址,查表得知地理位置,找到最近的边缘节点
  • 看用户所在的运营商网络,找到相同网络的边缘节点
  • 检查边缘节点的负载情况,找负载较轻的节点

综合找到最合适的边缘节点,把这个节点返回给用户,用户就能就近访问CDN的缓存

缓存代理

缓存系统可以划分层次,分为一级缓存节点、二级缓存节点。一级缓存节点配置高一些,直连源站;二级缓存节点配置低一些,直连用户。

回源的时候二级缓存只找一级缓存,一级缓存没有才回源站,可以有效的减少真正的回源。

CDN服务质量指标

  • 回源率
  • 命中率

9. HTTP1.0/1.1/2.0的区别

HTTP1.0

  • 无连接、无状态(每次请求与服务器建立一个TCP连接,请求结束后关闭)
  • 只支持GET、POST请求

HTTP1.1

  • 默认支持长连接(Connection: Keep-Alive)(一个TCP连接上可以传送多个HTTP请求和响应)
  • 允许客户端一个请求未完成就发送下一个请求,但是服务端必须按照客户端请求的顺序先后返回结果
  • 增加了更多的请求头和响应头(Last-Modified、If-Modified-Since、Etag、If-None-Match等缓存头来控制缓存策略)
  • 引入range,允许请求资源的某一部分
  • 引入host,虚拟主机
  • 增加了put、delete、option请求

HTTP2.0

  • 多路复用

HTTP1.1,一个TCP链接上发送多个请求,有先后顺序规定。但是HTTP2.0,在一个TCP连接里,客户端和服务器都可以发送请求,而且不要求按照顺序,避免了“对头堵塞”

  • 二进制分帧

帧是HTTP2.0中最小的通信单位。HTTP2.0才用二进制格式传输数据,非1.x的文本格式,解析起来更高校

  • 首部压缩

减少冗余数据,传输体积减少,降低开销

  • 服务器推送

允许服务器向客户端推送消息

10.HTTP状态码

  • 100: 用于POST大数据传输,在传输之前先征询服务器情况,是否处理POST数据
  • 200: 成功
  • 206: 断点续传,视频大文件的加载
  • 301: 永久重定向 (常用于新旧域名替换)
  • 302: 临时重定向 (常用于未登陆页面重新定向到登陆页面)
  • 304:协商缓存 (告诉客户端直接使用缓存中的数据,只返回头部信息,没有内容)
  • 400: 参数错误,服务端无法识别
  • 401: 未登录
  • 403: 禁止访问 (比如只有内网能访问的一些资源)
  • 404: 资源路径错误
  • 503: 服务器停机维护,使用503响应请求
  • 504: 网关超时

11.GET和POST请求

  • 请求资源的形式: GET获取资源、POST提交资源
  • 携带参数: GET在url上、POST在body中
  • 参数大小限制: GET 2kb 、 POST无限制
  • 安全性: POST比GET更安全,因为数据在地址栏不可见(但是从传输角度来说,明文传输都不安全)

12.TCP为什么需要三次握手和四次挥手

三次握手

建立一个TCP连接,需要客户端和服务器总共发送3个包

作用是确认双方的接收和发送能力是否正常,指定自己的初始化序列号为后面的可靠性传输做准备

第一次握手: 客户端发送一个SYN报文,并指明客户端的初始化序列号ISN

第二次握手: 服务端役自己的SYN报文应答,为了确认客户端的SYN报文,将客户端的ISN + 1 作为ACK的值

第三次握手:客户端发送ACK报文,值为服务器的ISN + 1

image.png

四次挥手

第一次挥手: 客户端发送一个FIN报文,报文中制定一个序列号

第二次挥手: 服务端接收到FIN报文,发送ACK报文,值为客户端序列号+1

第三次挥手:如果服务器也想断开连接,会向客户端发送一个FIN报文,指定一个序列号

第四次挥手: 客户端发送ACK报文应答,值为服务端序列号+1

image.png

13. WebSocket的理解

是一种网络协议,应用层协议。可在单个TCP连接上进行全双工通信,能够更好的节省服务器资源和带宽并达到实时通讯

客户端和服务端只需要完成一次握手,就可以建立持久性的通信,并进行双向数据传输

websocket之前实现实时通讯的方式为轮询

引入ws和wss分别代表明文和密文的websocket协议,且默认端口使用80或443,几乎与http一致

优点

相较于HTTP: 更强的实时性、保持连接的状态(不用每次带身份信息)、较小的开销(数据包头部协议较小)

应用场景

  • 弹幕
  • 媒体聊天
  • 体育实况更新
  • 股票基金报价的实时更新