GET 与 POST:何时使用哪一个
了解 PHP 中 HTTP GET 与 POST 的区别。
GET 与 POST:何时使用哪一个 是 CoddyKit 上的免费 PHP Academy 课时。 这是第 1 节课,共 4 节。 你可以在下方免费阅读本课时的完整内容 — 然后在浏览器中使用内置代码编辑器和全天候 AI 导师进行实践。 这是 PHP Academy 学习路径的一部分,你的进度在网页和 CoddyKit 应用中同步。 PHP Academy 课程共包含 4 节课。
Web PHP 中的 HTTP 方法
浏览器提交 HTML 表单时,会使用 GET 或 POST HTTP 方法之一。PHP 通过超全局变量捕获提交的数据:
$_GET— 附加在 URL 中的数据$_POST— 请求体中的数据
GET 方法
GET 会将表单数据作为查询字符串参数附加到 URL:
<!-- HTML form -->
<form method="GET" action="search.php">
<input name="query" type="text">
<button type="submit">Search</button>
</form>
<!-- URL becomes: search.php?query=php+tutorial -->
<?php
$q = $_GET['query'] ?? '';
echo 'You searched for: ' . htmlspecialchars($q);POST 方法
POST 会将数据发送到 HTTP 请求体中,不会显示在 URL 中:
<!-- HTML form -->
<form method="POST" action="login.php">
<input name="email" type="email">
<input name="password" type="password">
<button type="submit">Log In</button>
</form>
<?php
$email = $_POST['email'] ?? '';
$password = $_POST['password'] ?? '';何时使用 GET
在以下情况下使用 GET:
- 请求具有幂等性(没有副作用)
- 数据可以出现在 URL 中,例如搜索查询、筛选条件和分页信息
- 您希望 URL 可以添加书签或分享
- 数据不敏感
何时使用 POST
在以下情况下使用 POST:
- 请求会改变服务器状态(创建、更新或删除)
- 数据敏感(密码、个人信息)
- 需要发送大量数据(文件、长文本)
- 您不希望浏览器或代理缓存数据
GET 长度限制
GET 请求受到 URL 长度限制(实际应用中通常约为 2000 个字符)。POST 除服务器配置外没有实际限制:
<?php
// php.ini settings for POST limits:
// post_max_size = 8M (total POST body size)
// upload_max_filesize = 2M
// Check current limits at runtime:
echo ini_get('post_max_size'); // 8M
echo ini_get('upload_max_filesize'); // 2M$_REQUEST 超全局变量
$_REQUEST 会合并 $_GET、$_POST 和 $_COOKIE。这种方式很方便,但数据来源不够明确:
<?php
// Works for both GET and POST but is ambiguous
$name = $_REQUEST['name'] ?? '';
// Better: be explicit about the expected method
$name = match($_SERVER['REQUEST_METHOD']) {
'GET' => $_GET['name'] ?? '',
'POST' => $_POST['name'] ?? '',
default => '',
};检查请求方法
处理表单数据前,务必先检查请求方法:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
$name = trim($_POST['name'] ?? '');
if (!empty($name)) {
echo 'Hello, ' . htmlspecialchars($name);
}
} else {
// Show empty form
}HTTPS 与数据安全
即使使用 POST,如果不使用 HTTPS,数据仍会以明文形式显示。关键安全规则:
- 在生产环境中始终使用 HTTPS
- 绝不要通过 GET 发送密码
- 通过 HTTP 发送 POST 仍然不安全——HTTPS 也会加密请求体
POST 后重定向(PRG 模式)
POST 成功后,将请求重定向到 GET,以防止刷新页面时重复提交:
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// Process the form...
$id = saveToDatabase($_POST);
// Post-Redirect-Get (PRG) pattern
header('Location: /success.php?id=' . $id);
exit;
}用于文件上传的多部分表单
要上传文件,表单必须配合 POST 使用 enctype="multipart/form-data":
<!-- Required for file uploads -->
<form method="POST" action="upload.php"
enctype="multipart/form-data">
<input type="file" name="avatar">
<button type="submit">Upload</button>
</form>
<?php
$file = $_FILES['avatar'];
echo $file['name']; // original filename快速检查
提交包含用户名和密码的登录表单时,应使用哪个 HTTP 方法?
回顾:GET 与 POST
主要区别:
- GET — 位于 URL 中、可添加书签、没有副作用、大小受限
- POST — 位于请求体中、适合敏感数据、不受 URL 长度限制
- 始终使用 HTTPS 保护 GET 和 POST 数据
- 处理请求前检查
$_SERVER['REQUEST_METHOD'] - 应用 PRG 模式,防止重复提交 POST
常见问题解答
「GET 与 POST:何时使用哪一个」课时是免费的吗?
是的 — 「GET 与 POST:何时使用哪一个」的完整文本可在网页上免费阅读。要进行交互式练习(内置代码编辑器和全天候 AI 导师)并解锁 PHP Academy 课程的其余内容,请升级到 CoddyKit PRO。 PHP Academy 课程共包含 4 节课。
「GET 与 POST:何时使用哪一个」这节课中我会学到什么?
了解 PHP 中 HTTP GET 与 POST 的区别。 你通过在浏览器中直接运行的动手代码来练习 PHP Academy,全天候 AI 导师会在你学习这节课的过程中回答你的问题。
学习 PHP Academy 需要有经验吗?
无需任何先前经验。CoddyKit 上的 PHP Academy 课程适合初学者到高级学习者,你可以从这里开始或从头开始,按照自己的节奏学习。 这是第 1 节课,共 4 节。
「GET 与 POST:何时使用哪一个」课时需要多长时间?
大多数 CoddyKit 课程大约需要 5–10 分钟。每节课都很精短且互动,所以你能稳步进步,并在网页和应用中从离开的地方继续。
我能在这节 PHP Academy 课中编写并运行代码吗?
能。每节 PHP Academy 课都包含内置代码编辑器,你可以在浏览器中直接编写并运行真实代码,并获得即时 AI 反馈 — 无需本地设置。
此课程中的所有课时
- GET 与 POST:何时使用哪一个
- 使用超全局变量读取表单数据
- 输入验证技术
- 清理用户输入