目录
正文:
1.概述
2.主要特点
3.请求协议格式
4.响应协议格式
5.响应状态码
总结:
正文:
1.概述
HTTP 协议是用于传输超文本数据(如 HTML)的应用层协议,它建立在传输层协议 TCP/IP 之上。当我们在浏览器中输入一个 "网址" (URL) 时,浏览器就会给相应的服务器发送一个 HTTP请求,该服务器也返回一个 HTTP 响应。这个响应结果被浏览器解析之后,就展示成我们看到的页面内容. (这个过程中浏览器可能会给服务器发送多个 HTTP 请求,服务器会对应返回多个响应,这些响应里就包含了页面 HTML,CSS,JavaScript,图片,字体等信息)。
2.主要特点
-
无连接性:HTTP 是一种无连接的协议,即每个请求-响应对之间是相互独立的,服务器不会保留任何关于前一次请求的信息。这意味着每个请求都需要建立一个新的连接,处理完毕后就会关闭连接,这样有助于节省服务器资源。
-
无状态性:HTTP 是一种无状态的协议,服务器不会维护客户端的状态信息。即使多次请求来自同一个客户端,服务器也视为多个独立的请求。为了实现状态保持,通常使用 Cookie ,Session或者jwt令牌 技术来维护客户端的状态信息。
-
支持多种请求方法:HTTP 协议定义了多种请求方法,如 GET、POST、PUT、DELETE 等,每种请求方法有不同的语义和用途。GET 用于从服务器获取资源,POST 用于向服务器提交数据,PUT 用于更新资源等。
-
基于文本:HTTP 协议的请求和响应报文是基于文本的,使用可读性强的ASCII字符编码。这种简单的文本格式使得开发人员和系统能够轻松理解和调试,同时也降低了实现成本。
3.请求协议格式
HTTP请求协议格式是客户端向服务器发送请求时遵循的规则。一个标准的HTTP请求由以下几个部分组成:
-
请求行(Request Line):
- 方法:指定要执行的操作,如GET、POST、PUT、DELETE等。
- 资源路径:请求的资源的URI(统一资源标识符),通常是URL。
- HTTP版本:使用的HTTP协议版本,如HTTP/1.1或HTTP/2。
格式示例:
GET /index.html HTTP/1.1
-
请求头(Request Headers):
- 包含一系列键值对,提供关于请求的附加信息,如:
Host
:请求的服务器的域名。User-Agent
:发起请求的客户端软件信息。Accept
:客户端能够处理的媒体类型。Content-Type
:请求体的媒体类型。Content-Length
:请求体的长度。- 其他自定义头或特定用途的头。
- 包含一系列键值对,提供关于请求的附加信息,如:
-
空行(Empty Line):
请求头部结束后,需要一个空行来分隔头部信息和消息主体(如果有)。 -
请求体(Request Body,可选):
消息主体包含客户端向服务器发送的数据内容,例如 POST 请求中包含的表单数据或请求体内容。对于 GET 请求通常为空。
我们可以打开网页的开发者工具或者使用抓包工具看到一个http完整的请求:
下面是一个https的但是基本和http差不多:
需要注意的是,HTTP 请求协议格式中的请求行和请求头部是必须的,而消息主体在某些情况下是可选的。请求头的顺序并不影响其含义,但是出于可读性,它们通常会按照一定的逻辑顺序排列。请求体的大小必须在请求头中通过Content-Length头指定,除非使用分块传输编码(chunked transfer encoding)。 请求体的内容类型应该通过Content-Type头指定,以便服务器知道如何处理接收到的数据。
4.响应协议格式
HTTP响应协议格式是服务器在接收到客户端的请求后,向客户端发送的响应。一个标准的HTTP响应同样由几个关键部分组成:
-
状态行(Status Line):
- HTTP版本:响应使用的HTTP协议版本,如HTTP/1.1或HTTP/2。
- 状态码:一个三位数字,表示请求的结果,如200表示成功,404表示未找到等。
- 状态信息:状态码的简短描述。
格式示例:
HTTP/1.1 200 OK
-
响应头(Response Headers):
- 包含一系列键值对,提供关于响应的附加信息,如:
Content-Type
:响应体的媒体类型。Content-Length
:响应体的长度。Server
:服务器软件的名称和版本。Set-Cookie
:用于设置客户端的cookie。Cache-Control
:控制响应的缓存行为。Connection
:管理连接的选项,如是否关闭连接。
- 包含一系列键值对,提供关于响应的附加信息,如:
-
空行(Empty Line):
响应头和响应体之间的分隔符,通常是一个空行,即连续的两个换行符(CRLF)。 -
响应体(Response Body,可选):
服务器返回的数据,可能是HTML文档、图片、视频、JSON数据等,取决于请求的资源类型和Content-Type
头的指定。
一个完整的HTTP响应示例:
同样抓的包是https的但差别不大:
如果服务器返回了一个html页面, 那么html页面内容就是在body中。
5.响应状态码
在响应信息中的状态码有很多:
1.1xx:信息响应:
这类状态码表示请求已经被服务器接收,但还需要进一步处理。通常,这类响应是临时性的,用于与客户端进行双向通信。常见的状态码包括:
- 100 Continue:服务器要求客户端继续发送请求,或忽略这个响应继续完成请求。
- 101 Switching Protocols:服务器将遵照请求切换到另外一种协议。
- 103 Early Hints:(HTML5新增)服务器推送资源的早期提示,用于预加载资源。
2.2xx:成功响应:
这类状态码表示请求已经被成功处理。最常见的状态码是:
- 200 OK:请求成功,响应中包含了所请求的信息。
- 201 Created:请求成功并且一个新的资源被创建,如POST请求。
- 202 Accepted:请求已经被接受,但尚未被处理。
- 204 No Content:服务器已经成功处理了请求,但没有返回任何内容。
3.3xx:重定向响应
这类状态码表示请求的资源已经被永久或暂时地移至别处。常见的状态码有:
- 300 Multiple Choices:请求的资源有多个位置,服务器无法确定哪一个是最合适的,一般情况下很少使用。
- 301 Moved Permanently:请求的资源已经被永久移动到新的URI,浏览器会自动跳转到新的URL。
- 302 Found:(早期版本为“Moved Temporarily”,现在通常表示“Found”)请求的资源被临时移动到新的URI,浏览器会自动跳转到新的URL。
- 304 Not Modified:如果使用缓存,则表示请求的资源自从缓存以来没有被修改过,因此可以继续使用缓存的版本。
4.4xx:客户端错误响应
这类状态码表示客户端的请求包含错误,或者请求无法被服务器理解。常见的状态码包括:
- 400 Bad Request:服务器无法理解请求的格式。
- 401 Unauthorized:请求要求用户的身份认证。
- 403 Forbidden:服务器理解请求客户端的请求,但是拒绝执行此请求。
- 404 Not Found:请求的资源在服务器上没有找到。
- 405 Method Not Allowed:请求的方法不被允许。
5.5xx:服务器错误响应
这类状态码表示服务器在处理请求的过程中遇到了错误。常见的状态码有:
- 500 Internal Server Error:服务器遇到未知错误。
- 501 Not Implemented:服务器不支持请求的功能。
- 502 Bad Gateway:服务器作为网关或代理,从上游服务器收到了一个无效的响应。
- 503 Service Unavailable:服务器目前无法使用(可能是服务器过载或进行维护)。
- 504 Gateway Timeout:作为代理或网关的服务器没有及时从上游服务器收到请求。
这些状态码帮助客户端和开发者理解请求的结果,对于调试和维护Web应用非常重要。在开发Web应用时,正确处理和返回恰当的状态码是确保应用程序正常运行的关键。
总结:
请求格式:
响应格式: