目录
1、HTTP工作流程
2、HTTP报文格式
HTTP报文格式均为“请求/状态行+消息头+消息体”的格式,分为两类报文:请求报文、响应报文。
HTTP事务=HTTP请求+HTTP响应
2.1 HTTP请求报文(request)
由客户端发往服务器,分为四部分:请求方法(Request Method)、请求的网址(Request URL)、请求头(Request Headers)、请求体(Request Body)
2.1.1 请求行
①Request Method
其中GET、POST较为常用:
GET:是最常用的 HTTP 方法,常用于获取服务器上的某个资源。GET 传递数据时,会把数据放到 URL的 query 中。例如在百度中搜索“any”,则发起一个GET请求,地址中就会出现若干键值对,其中一个就包含我们的输入的请求“any”。
常见的构造GET请求的场景:
-浏览器地址栏中输入URL
-form表单<form method="get">
-html里img标签引入图片
POST:也是一种常见的方法,常用于提交用户输入的数据给服务器,例如登陆页面等。
常见的构造POST请求的场景:
-form表单<form method="post">
②Request URL
请求网址,可以唯一确定客户端想要请求的资源,也就是URL。
③Request Version
协议版本号,如HTTP/1.1、HTTP/2.0等
2.1.3 请求头Request Header
请求头,用来说明服务器要使用的附加信息,这些信息一般不止一条,整体结构呈现“键值对”的格式,每个键值对占一行,键和值之间用分号分割。这些信息种类很多,主要有:
①Host
表示服务器主机的地址和端口,一般Host的值就是 地址 + 端口,此处地址可以是域名也可以是IP,端口可以省略。
②Content-Length
表示body中的数据长度。若报文没有body,则不带content-length字段。
③Content-Type
表示请求的body中的数据格式。body 中的数据可以放很多种格式,决定文件接收方将以什么形式、什么编码解析这个文件。
常见的形式:
application/x-www-form-urlencoded: form 表单提交的数据格式
multipart/form-data: form 表单提交的数据格式(在 form 标签中加上enctyped="multipart/form-data" ,通常用于提交图片/文件)
application/json: 数据为 json 格式
④User-Agent
简称UA,这是一个特殊的字符串头,可以是服务器识别客户端使用的操作系统即版本、浏览器即版本等信息。
⑤Referer
用于标识请求是从哪个页面发送过来的,服务器可以拿到这一信息并做相应的处理,如做来源设计、防盗链等处理。
⑥Cookie
Cookie 是浏览器提供的一种让程序员在本地存储数据的能力。
如果没有 Cookie,直接将要存储的数据保存在客户端浏览器所在的主机的硬盘上,那么就会出现很大的安全风险,比如当你不小心打开某个不安全的网站,该网站就可以在你的硬盘上写一个病毒程序,那么你的电脑就挂了!因此浏览器为了保证安全性,就禁止网页中的代码访问主机的硬盘(无法在 JS 中读写文件),因此也就失去了持久化存储的能力,故 Cookie 就很重要!
Cookie 中存储了一个字符串,是键值对结构的。这个数据可能是客户端(网页)自行通过 JS 写入的,也可能来自于服务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据。
2.1.4 请求体Request Body
请求体,一般承载的内容是 POST 请求中的表单数据,对于 GET 请求,请求体为空。
2.2 HTTP响应(Response)
由服务器返回给客户端,可以分为三个部分: 状态行、响应头、响应体。
2.2.1 状态行
状态行 = 协议版本 + 状态码 + 状态码描述。
①Response Version
协议版本与请求报文一致
②Status Code
状态码,是一个数组。描述了当前这次请求的“状态”(成功,失败,失败的原因)
状态码有很多种,主要分为五类:1xx、2xx、3xx、4xx、5xx。下面列举出各个分类常见的状态码:
1xx:信息响应 | ![]() |
2xx:成功响应 | ![]() |
3xx:重定向 | ![]() |
4xx:客户端错误 | ![]() |
5xx:服务器错误 | ![]() |
③Response Phrase
对状态码的简单描述,如:200描述为“OK”,204为“No Content”,302描述为“Found”。
2.2.2 响应头
响应头包含可选的头部信息,用于补充响应的内容和其他信息。提供了关于响应的资源、服务器、缓存验证等信息。响应头中的每个头部字段由“键值对”的格式呈现,每组属性各占一行。常见字段如下:
①Date
消息发送的日期和时间
②Server
服务器告诉浏览器,当前响应的服务类型和版本
③Location
通过该字段携带重定向的目标 URL。
④Cache-Control
指定缓存策略,如缓存的有效期、是否可以缓存等。常见的取值有private、no-cache、max-age、must-revalidate等,默认为private。其作用根据不同的重新浏览方式分为以下几种情况。
public:所有内容都可被缓存(客户端和代理服务器都可缓存)
private:内容只缓存到私有缓存中(仅客户端可以缓存,代理服务器不可缓存)
no-cache:如果存在合适的验证令牌 (ETag),no-cache 会发起往返通信来验证缓存的响应,如果资源未被更改,可以避免下载。
must-revalidation/proxy-revalidation:如果缓存的内容失效,请求必须发送到服务器/代理以进行重新验证
max-age=xxx :缓存的内容将在 xxx 秒后失效, 这个选项只在HTTP 1.1可用, 并如果和Last-Modified一起使用时, 优先级较高
⑤Connection
表示是否为持久连接
Connection:Keep-Alive 表示连接是持久化连接,HTTP1.1版本默认状态。
Connection:close 表示为非持久化连接,每次请求响应后都会断开TCP连接。
⑥Content-Length
指定响应体的长度(以字节为单位)。
⑦Content-Type
指定响应体的媒体类型,以及采用的编码格式。常用类型:
ext/plain:纯文本类型,没有指定字符集,默认使用 ASCII 编码。
text/html:HTML 文档类型,用于表示网页内容。
text/css:CSS 文件类型,用于表示样式表。
application/json:JSON 数据类型,用于表示结构化数据。
application/xml:XML 数据类型,用于表示可扩展标记语言数据。application/octet-stream:二进制流数据类型,用于表示任意二进制数据。
multipart/form-data:在 HTML 表单中上传文件时,将表单数据和文件一起提交。
image/jpeg、image/png、image/gif:表示不同格式的图像文件。
2.2.3 响应体
用于存放需要返回给客户端的数据信息