第105集 HTTP协议基础
学习目标
- 理解HTTP协议的基本概念和特点
- 掌握HTTP请求和响应的结构
- 熟悉常见的HTTP方法和状态码
- 了解HTTP头信息的作用
- 认识HTTP版本的演进
一、HTTP协议概述
1. 什么是HTTP协议
HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于在客户端和服务器之间传输超文本数据的应用层协议。它是互联网上最广泛使用的协议之一,用于浏览器与Web服务器之间的通信。
2. HTTP协议的特点
- 无状态协议:服务器不会保存客户端的状态信息,每个请求都是独立的
- 基于请求-响应模型:客户端发送请求,服务器返回响应
- 可扩展:通过头信息可以扩展协议功能
- 支持多种数据格式:不仅支持HTML,还支持JSON、XML、图片、视频等
3. HTTP与HTTPS的区别
| 特性 | HTTP | HTTPS |
|---|---|---|
| 端口 | 80 | 443 |
| 安全性 | 明文传输,不安全 | 加密传输,安全 |
| 协议层 | 直接在TCP上 | 在TCP和HTTP之间加入SSL/TLS加密层 |
| 证书 | 不需要 | 需要CA颁发的证书 |
二、HTTP请求结构
HTTP请求由三部分组成:请求行、请求头、请求体(可选)
1. 请求行
请求行包含三个部分:请求方法、URL和HTTP版本
GET /index.html HTTP/1.1- 请求方法:表示客户端希望对资源执行的操作(如GET、POST、PUT、DELETE等)
- URL:请求的资源路径
- HTTP版本:使用的HTTP协议版本
2. 请求头
请求头包含客户端的信息和请求的附加信息,格式为"键: 值"
常见的请求头:
- Host: 请求的服务器主机名
- User-Agent: 客户端的浏览器信息
- Accept: 客户端可接受的内容类型
- Content-Type: 请求体的数据类型
- Content-Length: 请求体的长度
- Cookie: 客户端保存的Cookie信息
3. 请求体
请求体包含要发送给服务器的数据,通常在POST、PUT等方法中使用
username=admin&password=123456三、HTTP响应结构
HTTP响应也由三部分组成:状态行、响应头、响应体
1. 状态行
状态行包含三个部分:HTTP版本、状态码和状态短语
HTTP/1.1 200 OK2. 响应头
响应头包含服务器的信息和响应的附加信息
常见的响应头:
- Content-Type: 响应体的内容类型
- Content-Length: 响应体的长度
- Server: 服务器软件信息
- Date: 响应生成的时间
- Set-Cookie: 服务器设置的Cookie信息
- Cache-Control: 缓存控制指令
3. 响应体
响应体包含服务器返回给客户端的实际数据,通常是HTML、JSON、图片等
<html>
<head><title>首页</title></head>
<body><h1>Hello World</h1></body>
</html>四、HTTP方法
HTTP方法表示客户端希望对资源执行的操作,常用的方法有:
| 方法 | 描述 | 是否包含请求体 | 幂等性 |
|---|---|---|---|
| GET | 请求获取资源 | 否 | 是 |
| POST | 提交数据,创建资源 | 是 | 否 |
| PUT | 更新资源 | 是 | 是 |
| DELETE | 删除资源 | 否 | 是 |
| HEAD | 仅请求头信息 | 否 | 是 |
| OPTIONS | 请求服务器支持的方法 | 否 | 是 |
| PATCH | 部分更新资源 | 是 | 否 |
幂等性说明
- 幂等:多次请求产生相同的效果,不会改变资源状态
- 非幂等:多次请求可能产生不同的效果,可能改变资源状态
五、HTTP状态码
HTTP状态码用于表示服务器对请求的处理结果,分为五大类:
1. 1xx(信息性状态码)
- 100 Continue:服务器已接收请求头,客户端应继续发送请求体
- 101 Switching Protocols:服务器同意切换协议
2. 2xx(成功状态码)
- 200 OK:请求成功
- 201 Created:资源创建成功
- 204 No Content:请求成功但无响应体
3. 3xx(重定向状态码)
- 301 Moved Permanently:永久重定向
- 302 Found:临时重定向
- 304 Not Modified:资源未修改,使用缓存
4xx(客户端错误状态码)
- 400 Bad Request:请求参数错误
- 401 Unauthorized:未授权,需要身份验证
- 403 Forbidden:禁止访问
- 404 Not Found:资源不存在
5xx(服务器错误状态码)
- 500 Internal Server Error:服务器内部错误
- 502 Bad Gateway:网关错误
- 503 Service Unavailable:服务器暂时不可用
- 504 Gateway Timeout:网关超时
六、HTTP版本演进
1. HTTP/1.0
- 1996年发布
- 每次请求都需要建立新的TCP连接
- 不支持持久连接
2. HTTP/1.1
- 1997年发布
- 支持持久连接(Keep-Alive)
- 支持管道化请求
- 支持分块传输编码
- 支持虚拟主机
3. HTTP/2
- 2015年发布
- 二进制分帧
- 多路复用(一个TCP连接处理多个请求)
- 头部压缩
- 服务器推送
4. HTTP/3
- 2022年发布
- 基于QUIC协议(UDP的改进版)
- 更快的连接建立
- 更好的拥塞控制
- 内置加密
七、HTTP协议的工作流程
- 建立连接:客户端通过TCP协议与服务器建立连接(默认端口80)
- 发送请求:客户端发送HTTP请求报文
- 处理请求:服务器解析请求并处理
- 返回响应:服务器发送HTTP响应报文
- 关闭连接:根据Connection头决定是否关闭连接
八、常见面试题
HTTP和HTTPS的区别是什么?
- HTTPS是HTTP的安全版本,通过SSL/TLS加密传输数据
- HTTPS使用端口443,HTTP使用端口80
- HTTPS需要CA证书,HTTP不需要
GET和POST的区别是什么?
- GET请求参数在URL中,POST在请求体中
- GET请求有长度限制,POST没有
- GET请求可缓存,POST不可
- GET请求是幂等的,POST不是
什么是HTTP的无状态性?如何解决?
- HTTP无状态是指服务器不保存客户端的状态信息
- 解决方法:使用Cookie、Session、Token等机制
HTTP状态码301和302有什么区别?
- 301是永久重定向,搜索引擎会更新索引
- 302是临时重定向,搜索引擎不会更新索引
九、总结
本集我们学习了HTTP协议的基础知识,包括:
- HTTP协议的概念和特点
- HTTP请求和响应的结构
- 常见的HTTP方法和状态码
- HTTP头信息的作用
- HTTP版本的演进
HTTP协议是Web开发的基础,理解HTTP协议对于学习网络编程和Web开发至关重要。在后续的课程中,我们将学习如何使用Python的requests库来发送HTTP请求,以及如何构建自己的HTTP服务器。
练习题
- 简述HTTP请求的结构组成。
- 列举5个常见的HTTP状态码及其含义。
- 解释什么是HTTP的幂等性。
- 比较HTTP/1.1和HTTP/2的主要区别。
- 说明Cookie和Session的作用以及它们的区别。