第三篇 计算机网络基础 - Http协议【 http报文 + http状态码 + http压缩协议 】

发布时间 2023-03-28 15:58:29作者: caix-1987

http 报文

HTTP 报文:用于 HTTP 协议 交互的信息 被称为 HTTP 报文

  1、请求 【 Request 】 端的报文叫 请求报文
  
  2、响应 【 response 】 端的报文叫 响应报文
http 请求报文
1、请求报文 示例

POST /index.html HTTP/1.1
HOST: www.XXX.com
User-Agent: Mozilla/5.0(Windows NT 6.1;rv:15.0) Firefox/15.0

Username=admin&password=admin

2、一个请求报文有以下 四个 部分组成
   
  1、请求行(request line)
     
  2、请求头(header) 
     
  3、空行 
     
  4、请求正文 
  
3、请求报文详解  
          
  1、请求行(request line)
  
    GET /index.html HTTP/1.1
     
    由 请求方法、URL 和 HTTP协议版本 3 个字段组成,它们用空格分隔
     
  2、请求头(header)
    
    请求头部由关键字/值对组成,每行一对,关键字和值用英文冒号 “:” 分隔
      
    请求头部通知服务器有关于客户端请求的信息
      
    典型的请求头有
      
      User-Agent:产生请求的浏览器类型
        
      Accept:客户端可识别的内容类型列表
        
      Host:请求的主机名,允许多个域名同处一个IP地址,即 虚拟主机
        
  3、空行
    
    最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头
     
  4、请求数据  
    
    请求数据不在 GET 方法中使用,而是在 POST 方法中使用
      
    POST 方法适用于需要客户填写表单的场合
      
    与请求数据相关的最常使用的请求头是 Content-Type 和 Content-Length
HTTP 响应报文
1、响应报文 示例

HTTP/1.1 200 OK
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8" />
    <title>Document</title>
</head>
<body>
    <p>this is http response</p>
</body>
</html>

2、HTTP 响应也由 四个 部分组成

  1、响应行
  
  2、响应头
  
  3、空行
  
  4、响应体
  
3、在响应中唯一真正的区别在于第一行中用 状态信息 代替了请求信息 也叫 状态行  

  状态行 : HTTP-Version Status-Code Reason-Phrase CRLF
  
    1、HTTP-Version 服务器 HTTP 协议的版本
    
    2、Status-Code 服务器发回的响应 状态代码
    
    3、Reason-Phrase 状态代码的 文本描述

http 状态码

1、HTTP状态码: 是客户端向服务端发送请求,描述请求的状态

2、HTTP状态码 以 3 位数字 【 第一位数字代表类别 】 和 原因短语 组成 

    200 OK 
    
    206 Partial Content
    
    ...
    
3、状态码就是前后端通信时对于状态的一种约定,原则上只要遵循状态码类别的定义,即使改变 RFC2616 定义的状态码,或自行创建都是没问题的    
http 常见的状态码
- 200 OK :请求被正常处理返回 200 OK,这也是我们最常见的啦
- 204 No Content :请求处理成功但是没有资源返回,就是报文中没有报文主体
- 206 Partial Content :客户端进行范围请求,就是请求资源一部分,服务器返回请求这部分(Content-Range)

- 301 Moved Permanently:永久重定向(资源的URL已经更新)
- 302 Found :临时重定向(资源的URI已经临时定位到其他位置了)
- 303 See Other: 对应的资源存在另一URL,资源的URL已经更新,是否按新的去访问
- 304 Not Modified:客户端发附带条件的请求,服务端允许请求访问资源,但没有满足条件
- 307 Temporary Redirect: 也是临时重定向

- 400 Bad Request : 请求报文中存在语法错误
- 401 Unauthorized : 需要有HTTP认证
- 403 Forbidden : 请求访问的资源被服务器拒绝了
- 404 Not Found : 服务器上没有找到资源
- 500 Internal Server Error: 服务器执行请求时出错
- 503 Service Unavailable : 服务器处于超负载,正在进行停机维护

http 压缩协议

1、在 HTTP/1.x 时代,支持 Body 压缩,Header 不支持压缩。而现在一个网页可能有几十到上百个请求,一个请求 Header 至少 600Byte 以上。那么这些页面的请求 Header 会消耗不必要的带宽,增加延迟

2、http2.0 引入了 Header Compression 头部压缩技术使用了 HPACK 实现了 请求头的压缩
1、http 请求头带:Accept-Encoding: gzip, deflate, br

  这是浏览器告诉服务器我支持什么样的压缩格式,优先级是什么样的
  
2、http 响应头带:Content-Encoding: gzip

  这是服务器告诉浏览器我已经按什么样子的格式压缩了,解压工作你拜托你了
  
所以在浏览器上需要根据请求头中的 Accept-Encoding 去告诉服务器端,浏览器支持什么压缩格式

服务器按格式 压缩之后 再告诉浏览器,我已经给你压缩成什么样子了