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 去告诉服务器端,浏览器支持什么压缩格式 |
| |
| 服务器按格式 压缩之后 再告诉浏览器,我已经给你压缩成什么样子了 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人