第十章 网络请求相关

HTTP协议

超文本传输协议

请求/响应报文

请求报文:

  • 请求行
    方法 URL 协议版本(1.1版本) CRLF(回车)

  • 首部字段区域
    首部字段名(key) :值(value )CRLF
    首部字段名(key) :值(value )CRLF

  • 实体主体
    get 请求没有
    post 有实体主体

响应报文:

  • 响应行
    版本 状态码 状态码描述(短语) CRLF

  • 首部字段区

  • 响应实体主体

连接建立流程

三次握手和四次挥手

三次握手

  • 客户端 发送 syn 同步报文到Server,
  • server 端收到syn报文后会,链接建立,server 端会返回一个 syn,ack 报文给客户端,
  • 客户端收到 server 端的ask 报文后,会再次回应一个确认ack 的报文

数据请求

  • 接下来在已经建立的tcp 通道上进行http 的请求报文
  • server 端回复给客户端一个http响应报文

四次挥手

  • 客户端发送 fin 终止报文到server 端
  • server 端收到报文后会回回复一个ack 报文到客户端
  • 客户端到server 端的tcp的链接已经断开,但是 server 端到客户端的链接还会传输数据
  • server 端向客户端发送一个fin ack 报文 ,然后客户端回应给server 一个ack 报文,释放链接

HTTP 的特点

  • 无连接
    非持久链接 需要多次断开/建立链接,就会经历 三次握手,四次挥手

    HTTP 的持久链接: 多个http请求在同一个tcp 通道上, 一定时间内不会断开tcp通道,提高了网络请求的效率

    头部字段:

    coonection : keep-alive 客户端是否采用持久链接
    time :20 多长时间有效
    max:10 最多发生多少个http请求和响应对
    
  • 无状态
    同一个用户多次发送http请求,server 端是不知道是同一个用户的,server 端通过 Cookie/Session 规避这个问题

    • cookie
      cookie 主要是用来记录用户状态,区分用户,cookie由server端返回给客户端,cookie 状态保存在客户端

      保证cookie 的安全

      • cookie 加密处理
      • 只在https 上携带Cookie
      • 设置Cookie为 httpOnly,防止跨站脚本攻击
    • session 用来记录用户的状态,区分用户,状态存放在服务端

HTTPS 与网络安全

HTTPS 都使用了那些加密手段,为什么?

  • 建立链接过程使用非对称加密,因为耗时
  • 后续通信数据传输过程中使用对称性加密

对称性加密

TCP: 传输控制协议

  • 面向链接
    TCP 是全双工的所以数据传输之前需要三次握手,传输完毕需要四次挥手,
  • 可靠传输

    • 无差错
    • 按序到达
  • 面向字节流

    发送方发送数据时不管一次性提交给TCP的缓冲是多大的数据,TCP本身会根据实际情况来划分数据包再发送给接受数据方

  • 流量控制

    滑动窗口协议

UDP : 用户数据协议

  • 无连接
    发送数据时不需要建立链接,传输完毕也不需要释放链接

  • 尽最大努力交付
    是不保证可靠传输的,

  • 面向报文
    既不合并,也不拆分

问题

GET 和post 请求的区别

  • GET 获取资源的

    • 安全的: 不因该引起Server 端的任何状态变化的
    • 幂等的:同一个请求方法执行多次和执行一次的效果完全相同
    • 可缓存的:请求是可以缓存的,代理服务器可以缓存
    • 请求参数以? 分割拼接到URL 后面
  • post 请求处理资源

    • 不安全的:
    • 非幂等的
    • 不可缓存的

GET 请求参数有长度限制,是2048 个字符,post 一般没有限制

HTTPS 链接建立流程

客户端会发送服务端一个支持的加密算法列表
包括 TLS 的版本号 + 随机数C,
服务端再回给客户端一个证书
包括 商定的加密算法 后续首先通过非对称加密进行对称性加密的密钥传输,http的网络就通过被非对称密钥保护的对称密钥访问和传输数据

TCP 和 UDP的区别

tcp是面向链接的,并且支持可靠的传输,支持面向字节流, tcp 提供了流浪上的控制和拥塞的控制
UDP 提供了简单的复用/分用及差错检测的传输层的功能,

状态吗有哪些

  • 1XX
  • 2XX:成功
  • 3XX:重定向
  • 4XX:客户端请求错误
  • 5XX: 服务器端请求错误

为什么需要三次握手,两次行不行?

解决同步请求链接建立时超时的情况,如果只有两次握手,

持久链接怎么判断一个请求是否结束

  • 请求/响应报文的头部字段

响应报文 content-length: 1024 头部字段是由server 端返回数据大小,客户端根据所接收的数据的字节数是否达到了头部字段 cotent-length 的大小判断

  • 通过post请求时server 端返回数据有可能需要多次响应才能返回,此时需要根据chunked 字段名 是否为空来判断

Charels 抓包原理是什么?

中间人攻击

正常步骤是 客户端 —- server

抓包:发送请求和响应请求都可以通过中间人修改再返回给某一端

客户端 —中间人—- server

DNS 解析

域名到IP地址的映射,DNS解析请求采用UDP数据报,且明文

NDS 解析存在的常见问题

  • DNS 劫持问题
    钓鱼网站
  • DNS 解析转发问题

DNS 劫持和HTTP 的关系时怎么样的

没有关系,

  • DNS 解析发在HTTP 建立连接之前
  • DNS 解析请求使用UDP数据报, 端口是53,跟HTTP没有任何关系

解决DNS 劫持问题

  • httpDNS
  • 长连接