Appearance
9.1 GET 与 POST 区别
GET 和 POST 是 HTTP 协议中两种最常用的请求方法,用于客户端与服务器之间的数据传输。
基本区别
| 特性 | GET | POST |
|---|---|---|
| 数据传输方式 | 通过 URL 传递 | 通过请求体传递 |
| 数据可见性 | 可见(URL 中) | 不可见(请求体中) |
| 数据大小限制 | 约 2KB | 理论上无限制 |
| 缓存 | 可被缓存 | 不可被缓存 |
| 历史记录 | 保留在浏览器历史中 | 不保留在浏览器历史中 |
| 安全性 | 较低 | 较高 |
| 书签 | 可添加为书签 | 不可添加为书签 |
| 刷新影响 | 刷新无影响 | 刷新会重新提交数据 |
使用场景
GET 方法适用场景
- 数据查询(如搜索、筛选)
- 页面导航
- 传递非敏感数据
- 资源获取
POST 方法适用场景
- 提交表单数据
- 上传文件
- 处理敏感信息(如登录、注册)
- 执行修改操作(如添加、更新、删除数据)
示例代码
GET 方法示例
php
<?php
// get_example.php
if (isset($_GET['name']) && isset($_GET['age'])) {
$name = $_GET['name'];
$age = $_GET['age'];
echo "Hello, $name! You are $age years old.<br>";
echo "URL: " . $_SERVER['REQUEST_URI'] . "<br>";
}
?>
<!-- 表单使用 GET 方法 -->
<form action="get_example.php" method="get">
<label>姓名: <input type="text" name="name"></label><br>
<label>年龄: <input type="number" name="age"></label><br>
<input type="submit" value="提交">
</form>POST 方法示例
php
<?php
// post_example.php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
if (isset($_POST['name']) && isset($_POST['age'])) {
$name = $_POST['name'];
$age = $_POST['age'];
echo "Hello, $name! You are $age years old.<br>";
echo "数据通过 POST 方法提交,不在 URL 中显示<br>";
}
}
?>
<!-- 表单使用 POST 方法 -->
<form action="post_example.php" method="post">
<label>姓名: <input type="text" name="name"></label><br>
<label>年龄: <input type="number" name="age"></label><br>
<input type="submit" value="提交">
</form>注意事项
- 安全性:不要使用 GET 方法传递敏感信息,因为数据会显示在 URL 中
- 数据大小:GET 方法有数据大小限制,不适合传递大量数据
- 缓存:GET 请求会被浏览器缓存,可能导致数据过期
- 幂等性:GET 请求应该是幂等的(多次请求结果相同),POST 请求可以是非幂等的
- 编码:GET 请求中的特殊字符需要 URL 编码
练习
- 创建一个使用 GET 方法的搜索表单
- 创建一个使用 POST 方法的登录表单
- 比较两种方法的实际使用效果
