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 去告诉服务器端,浏览器支持什么压缩格式
服务器按格式 压缩之后 再告诉浏览器,我已经给你压缩成什么样子了
标签:协议,Http,请求,报文,http,Content,服务器,HTTP
From: https://www.cnblogs.com/caix-1987/p/17265548.html