目录
HTTP协议是客户端与服务器通信的“语言”,规定了请求和响应的格式与规则。服务器是HTTP协议的执行者,接收客户端的HTTP请求,处理后返回HTTP响应。两者的关系是:HTTP协议定义了交互方式,服务器是实现和响应协议的主体。
一、HTTP 协议概念
HTTP,即超文本传输协议。所有浏览器都可以发出http协议。
协议:就是规定的文本格式!例如写本书也要有格式,写总结也有格式。当然客户端发 送请求也要有格式,这个格式是已经约定的格式,所以服务器端按请求格式来获取请求信息, 然后服务器端再按照响应格式来响应,当然客户端还要按响应的格式来解析。
二、无状态协议
HTTP 是无状态协议,必须必须理解这一点!!!
所谓无状态,就是客户端发送一个请求,服务器返回一个响应,然后就断开连接了。
无状态协议的好处,当然是效率高了,用户连接一下就断开,当用户再次发送请求时, 再连接,然后在响应之后再次断开。如果用户在服务器上找到了自己想看的小说,那么服务器只是把小说的内容(html)发送给用户的浏览器,然后用户的浏览器显示已经发送到本地的html,其实这时已经与服务器断开连接了。用户可能会看很久,但这不会占用服务器 的任何资源!
即实现了随用随断开。
三、HTTP1.0 & HTTP1.1
特性 | HTTP/1.0 | HTTP/1.1 |
---|---|---|
连接方式 | 默认非持久连接,每次请求后关闭连接 | 默认持久连接(Keep-Alive),支持多个请求/响应 |
Host 头 | 不支持 Host 头,无法区分同一 IP 上的多个域名 | 支持 Host 头,支持虚拟主机 |
响应头 | 响应头较简单,功能有限 | 增加了更多响应头字段(如 Content-Length 、Transfer-Encoding ),支持分块传输 |
缓存机制 | 缓存依赖于 Expires 头,机制简单 |
引入 Cache-Control ,支持强缓存和协商缓存 |
错误处理 | 状态码较少,错误处理简单 | 增加更多状态码,提供更详细的错误信息 |
性能优化 | 性能较差,每次请求都需要建立和关闭连接 | 性能提升,持久连接减少连接开销 |
应用场景 | 已基本被 HTTP/1.1 替代,现代服务器很少使用 | 广泛应用于现代 Web 服务器,是主流协议之一 |
四、请求协议和响应协议
无论是请求协议还是响应协议,都是由如下部分构成的:
请求(或响应)首行;
请求(或响应)头信息;
空行;
请求(或响应)正文。
五、请求协议
1.浏览器监视请求和响应
功能:通过浏览器的开发者工具可以监视HTTP请求和响应,获取完整的请求和响应信息。
浏览器支持:
Firefox:支持监视功能。
Google Chrome:内置此功能,无需安装。
2. HTTP请求
2.1 请求的结构
请求首行:包含请求方法(如GET或POST)、请求路径和HTTP协议版本。
示例:
GET /hello/index.jsp HTTP/1.1
请求头:包含客户端向服务器发送的附加信息。
请求正文:GET请求没有正文,POST请求有正文。
2.2 GET请求
特点:
请求参数通过URL传递,容量有限(通常不超过1024KB)。
没有请求正文,只有请求头。
请求头字段:
Host
:请求的主机名。User-Agent
:客户端的浏览器和操作系统信息。Accept
:客户端可接受的文档类型。Accept-Language
:客户端支持的语言。Accept-Encoding
:支持的压缩格式。Connection
:连接方式(如keep-alive)。Cookie
:客户端存储的Cookie信息。
2.3 POST请求
特点:
请求正文包含表单数据。
常用于提交表单数据。
请求头字段:
Referer
:请求来源页面。Content-Type
:表单数据的编码类型(如application/x-www-form-urlencoded
)。Content-Length
:请求正文的长度。
请求正文:
示例:
username=hello
,表示表单中输入的数据。
3. HTTP响应
3.1 响应的结构
响应首行:包含HTTP协议版本、状态码和状态码的解释。
示例:
HTTP/1.1 200 OK
响应头:包含服务器向客户端发送的附加信息。
响应正文:通常是HTML代码。
3.2 常见响应头字段
Server
:服务器的版本信息。Content-Type
:响应正文的编码格式。Content-Length
:响应正文的长度。Set-Cookie
:服务器发送给客户端的Cookie。Date
:响应的时间。
3.3 常见状态码
200 OK
:请求成功。404 Not Found
:未找到请求的资源。500 Internal Server Error
:服务器内部错误。其他情况:通常是格式不匹配等问题。
4. 请求和响应的总结
请求方法:
GET:用于获取资源,无正文,参数在URL中。
POST:用于提交数据,有正文,数据在请求正文中。
请求首行:
请求方法 URL HTTP/1.1
响应首行:
HTTP/1.1 状态码 状态码的解释
响应正文:通常是HTML代码。