跳到主要内容

PHP GET 和 POST 请求

在 Web 开发中,HTTP 协议中的 GETPOST 是最常用的两种请求方式。你通过 HTML 表单提交的数据,或是用户在浏览器地址栏中输入的查询参数,都会以这两种方式被发送给服务器。

PHP 提供了两个超级全局数组 $_GET$_POST 来接收这些数据。

GET 请求

PHP 中 GET 请求的特点:

  • 数据附加在 URL 后(通过 ? 分隔参数)。
  • 请求参数可直接在浏览器地址栏中看到。
  • 适用于获取资源、查询操作。
  • 有长度限制(受浏览器和服务器限制,一般为 2048 字符以内)。

示例:HTML 表单使用 GET 方法

<form action="welcome.php" method="get">
姓名: <input type="text" name="name">
年龄: <input type="text" name="age">
<input type="submit" value="提交">
</form>

welcome.php 实现接收数据的功能:

welcome.php
<?php
$name = $_GET["name"];
$age = $_GET["age"];

echo "你好,$name,你今年 $age 岁。";
?>

提交后的 URL 示例:

http://example.com/welcome.php?name=小明&age=18

POST 请求

PHP 中 POST 请求的特点:

  • 数据不会显示在 URL 中,而是封装在请求体(body)中。
  • 更安全(相比 GET),适合提交表单、发送敏感信息(如密码)。
  • 没有长度限制(受服务器设置约束,一般很大)。
  • 不会被缓存,也不会保留在浏览器历史记录中。

示例:HTML 表单使用 POST 方法

<form action="welcome.php" method="post">
用户名: <input type="text" name="username">
密码: <input type="password" name="password">
<input type="submit" value="登录">
</form>

welcome.php 实现接收数据的功能:

welcome.php
<?php
$username = $_POST["username"];
$password = $_POST["password"];

echo "欢迎,$username!";
?>

超级全局数组 $_REQUEST

PHP 还提供了一个 $_REQUEST 数组,它可以同时接收 GET 和 POST 参数(以及 COOKIE)。

<?php
echo $_REQUEST["username"];
?>

不建议使用该方式,因为来源不确定,可能带来安全隐患。

GET 和 POST 的区别对比

项目GETPOST
数据位置URL 地址栏中HTTP 请求体中
可见性可见,容易被复制和分享不可见,适合敏感数据
数据长度限制有(如 2048 字符)无明显限制(取决于服务器配置)
安全性较差,容易被篡改相对更安全(仍需防护 XSS/CSRF)
使用场景查询、搜索、分页、导航等登录、提交表单、修改数据等
浏览器缓存支持支持不支持
历史记录会记录参数不记录请求体数据

判断 GET 和 POST 请求

如果你想区分当前请求是 GET 还是 POST,可以通过 $_SERVER['REQUEST_METHOD'] 来判断。例如:

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
echo "你提交了一个 POST 请求";
} elseif ($_SERVER["REQUEST_METHOD"] == "GET") {
echo "你发起了一个 GET 请求";
}
?>

获取完整请求数据

如果你通过 AJAX 或 Fetch API 发送 JSON 数据,可以使用以下方式获取:

<?php
$data = json_decode(file_get_contents("php://input"), true);
echo $data["message"];
?>

小结

PHP 中的 $_GET$_POST 是你与前端数据交互的桥梁。GET 适合查询类操作,POST 更适合提交和修改类操作。理解它们的区别、应用场景与安全风险,是开发稳定 Web 应用的关键。学会判断请求类型、转义用户输入,将使你的 PHP 项目更加健壮安全。