0Pricing
PHP Academy · 课时

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 反馈 — 无需本地设置。

此课程中的所有课时

  1. GET 与 POST:何时使用哪一个
  2. 使用超全局变量读取表单数据
  3. 输入验证技术
  4. 清理用户输入
← 返回 PHP Academy