文章目录
- HTTP
- 发展历程
- HTTP请求
- URL和URI
- HTTP协议版本
- HTTP请求方法
- GET 和 POST 区别
- HTTP状态码
- HTTP 请求与响应报文
- HTTP 请求流程
HTTP
超文本传输协议(Hypertext Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。超文本传输协议是一种用于分布式、协作式和超媒体信息系统的应用层协议,是万维网WWW(World Wide Web)的数据通信的基础。
发展历程
各版本区别:
HTTP请求
URL和URI
URI(Uniform Resource Identifier,统一资源标识符):是一种用于标识互联网资源的通用格式,可以是具体的资源地址(URL)或名称(URN)。URI是一个较广泛的概念,它可以表示任何可识别的资源。
URL(Uniform Resource Locator,统一资源定位符):是URI的一个子集,用于指定资源的具体位置(如网页、文件等)。URL不仅标识资源,还提供访问它的方法(通常是通过HTTP、HTTPS、FTP等协议)。
HTTP协议版本
-
HTTP/0.9
最早期的 HTTP 版本,只支持 GET 请求,且不支持 HTTP 头信息,也无法在请求中携带其他元数据。
-
HTTP/1.0
第一个正式标准化的 HTTP 版本,引入了更多的请求方法,并允许客户端与服务器之间传递更多信息(如请求头、响应头等)。HTTP/1.0 仍然被广泛使用,尤其是在代理服务器中。
-
HTTP/1.1
增强了连接管理,引入了持久连接(Persistent Connection),使得同一 TCP 连接可以被多个请求复用。它还支持管道方式(Pipelining),允许多个请求同时发送,减少了服务器响应的延迟。
-
HTTP/2.0
引入了完全的多路复用技术,允许客户端和服务器在同一连接中同时发送多个请求和响应。它还通过压缩 HTTP 头信息来减少数据传输量,并引入了服务端推送功能,允许服务器主动向客户端发送资源。
特点:
- HTTP/1.0:仅支持短连接,一个TCP连接中只能完成一次HTTP请求与响应。
- HTTP/1.1:支持长连接和管道机制,多个请求与响应可以在一个TCP连接中完成。
- HTTP/2.0:支持长连接、多路复用、网页头部压缩、服务器推送,使用二进制格式。
- HTTP/3.0:基于UDP协议,传输效率更高。
HTTP请求方法
HTTP 支持几种不同的请求命令,这些命令被称为 HTTP 方法(HTTP method)。每条 HTTP 请求报文都包含一个方法, 告诉服务器要执行什么动作,包括:获取一个页面,运行一个网关程序,删除一个文件等。最常用的获取资源的方法是 GET、POST、PUT。
常用的 HTTP 方法:
方法 | 描述 |
---|---|
GET | 从服务器请求资源(例如获取网页内容或文件)。 |
POST | 向服务器提交数据,通常用于表单提交或文件上传。 |
PUT | 向服务器发送数据,通常用于修改现有资源。 |
DELETE | 请求服务器删除某个资源。 |
HEAD | 类似于 GET,但不返回资源的主体部分,只获取响应头信息。 |
CONNECT | 建立一个隧道连接,通常用于 HTTPS 代理。 |
OPTIONS | 请求查看服务器支持的请求方法。 |
TRACE | 用于调试,返回服务器收到的请求内容,用来追踪请求路径。 |
说明:
1、GET请求会向数据库发索取数据的请求,从而来获取信息,该请求就像数据库的select操作一样,只是用来查询一下数据,不会修改、增加数据,不会影响资源的内容,即该请求不会产生副作用。无论进行多少次操作,结果都是一样的。
2、PUT请求是向服务器端发送数据的,从而改变信息,该请求就像数据库的update操作一样,用来修改数据的内容,但是不会增加数据的种类等,也就是说无论进行多少次PUT操作,其结果并没有不同。
3、POST请求同PUT请求类似,都是向服务器端发送数据的,但是该请求会将数据携带在body当中,通常表示的是“create”的含义,就像数据库的insert操作一样,会创建新的内容。几乎目前所有的提交操作都是用POST请求的。
4、DELETE请求顾名思义,就是用来删除某一个资源的,该请求就像数据库的delete操作
GET 和 POST 区别
-
GET 请求
GET 请求用于从服务器获取数据。请求的参数会附加在 URL 中,因此数据在请求中是公开的。GET 请求可以被缓存,也会保存到浏览器历史中,且长度有限。
-
POST 请求
POST 请求用于向服务器提交数据。与 GET 不同,POST 请求的数据包含在请求体中,而不是 URL,因此数据更加安全。POST 请求不会被缓存,也不会记录在浏览器历史中,且没有数据长度的限制。
HTTP状态码
HTTP 状态码(HTTP Status Code)是用以表示网页服务器 HTTP 响应状态的 3 位数字代码,当浏览器请求某一 URL 时, 服务器根据处理情况返回相应的处理状态。
通常正常的状态码为2xx,3xx(如200),如果出现异常会返回4xx,5xx(如404)。
- 1xx (信息):表示请求已收到,需要进一步操作。
- 2xx (成功):表示请求已成功处理。
- 3xx (重定向):需要客户端采取进一步行动来完成请求。
- 4xx (客户端错误):请求包含语法错误或无法完成。
- 5xx (服务器错误):服务器在处理请求时发生了错误。
常见的 HTTP 状态码
状态码 | 描述 |
---|---|
200 | 请求成功,服务器返回了请求的资源。 |
301 | 请求的资源已永久移动到新的 URL,客户端应更新请求地址。 |
302 | 请求的资源临时移动到新的 URL,客户端应使用新的 URL 进行后续请求。 |
401 | 认证失败,客户端需要提供有效的认证信息。 |
403 | 禁止访问,客户端没有权限访问请求的资源。 |
404 | 资源未找到,服务器无法找到请求的页面或文件。 |
414 | 请求URI头部过长。 |
500 | 服务器内部错误,服务器在处理请求时发生了问题。 |
502 | 网关错误,服务器作为网关或代理时从上游服务器接收到无效响应。 |
503 | 服务不可用,服务器当前无法处理请求,通常是由于过载或维护。 |
504 | 网关超时,服务器作为网关或代理时未能及时从上游服务器接收到响应。 |
HTTP 请求与响应报文
HTTP 请求报文和响应报文都有固定的结构,包含请求或响应的状态行、头部信息和主体内容。
1. 请求报文
-
请求行:由请求方法、请求的 URL 和协议版本组成。
例如:
GET /index.html HTTP/1.1
-
请求头:包含客户端附加的请求信息,以名/值对的形式表示。常见的请求头包括:
- Host:指定请求目标的服务器域名或 IP 地址,可以附带端口号(如
Host: example.com:8080
)。 - User-Agent:客户端发送请求的软件或浏览器的信息,通常包含浏览器、操作系统等标识。
- Accept:客户端支持的内容类型,告知服务器可以返回的 MIME 类型(如
text/html
、application/json
)。 - Connection:定义连接的管理方式,常用值为
Keep-Alive
,表示保持连接不断开,支持多个请求复用。 - Accept-Charset:告知服务端客户端支持的字符编码格式(如
UTF-8
、ISO-8859-1
)。 - Accept-Encoding:指定客户端支持的内容压缩方式(如
gzip
、deflate
)。 - Accept-Language:通知服务端客户端的首选语言(如
en
表示英语,zh-CN
表示简体中文)。
- Host:指定请求目标的服务器域名或 IP 地址,可以附带端口号(如
-
空行:请求头和请求体之间必须有一个空行,用来分隔头部信息和主体内容。
-
请求体:携带客户端提交的数据,通常用于 POST、PUT 等请求。GET 方法已经在 URL 中指明了参数,所以提交时没有数据。POST 方法提交的参数在请求体中。
2. 响应报文
-
状态行:由协议版本、状态码和状态描述组成。
例如:
HTTP/1.1 200 OK
-
响应头:与请求头类似,服务器返回的附加信息,常见的响应头包括:
- Server:显示服务器使用的软件及其版本信息。
- Content-Type:指定响应内容的类型,如 HTML、JSON、图片等。
- Content-Length:指定响应体的字节长度,表示内容的大小。
- Content-Charset:指定响应体的字符编码格式,如 UTF-8、ISO-8859-1。
- Content-Encoding:标明响应体采用的压缩方式,如 gzip、deflate。
- Content-Language:指明响应体使用的语言,如 en(英语)、zh-CN(简体中文)。
-
空行:响应头和响应体之间也有一个空行,表示头部信息结束。
-
响应体:服务器返回给客户端的数据,通常是 HTML 页面或其他文件。
HTTP 请求流程
当用户在浏览器中输入 URL 并按下回车时,浏览器会向服务器发送一个 HTTP 请求,服务器处理请求后返回响应,浏览器解析响应体并显示页面。该过程包括以下步骤:
- 用户输入 URL,浏览器发送 HTTP 请求。
- 请求报文中包含请求行、请求头和可能的请求体。
- 服务器接收到请求,处理后返回响应报文。
- 响应报文包含状态行、响应头和响应体。
- 浏览器根据响应体中的内容显示网页。
注:图片来源于网络,侵删。