$_GET 与 $_POST 数组相关知识

在PHP中,$_GET$_POST 是两种独立的超全局数组,它们的参数来源和处理逻辑有本质区别:

$_GET 的底层逻辑

  • 参数来源URL查询字符串(如 ?key1=value1&key2=value2)。
  • 无关请求方法:无论请求是 GETPOST 还是其他方法,只要URL中存在查询字符串,PHP都会自动解析到 $_GET 数组中。

$_POST 的底层逻辑

  • 参数来源请求体(Body),且仅当请求头的 Content-Typeapplication/x-www-form-urlencodedmultipart/form-data 时(如表单提交)。
  • 依赖请求方法:只有使用 POST 方法时,PHP才会自动解析请求体到 $_POST 数组。
  • 注意:如果要在 Burp Suite 中将 GET 请求修改为 POST 请求并修改请求体,请在修改完请求行的 GET 后在右侧 Inspector 内修改请求体,否则 Burp Suite 不会自动向请求头中添加 Content-Type 字段,导致参数无法传给 $_POST 数组。

由此可得:只要 URL 中存在查询字符串,都会被解析到 $_GET 数组;但 $_POST 数组依赖 POST 方法与请求头,条件不满足时会有参数无法传到 $_POST 数组中的情况。

关于 php://input 伪协议

php://input 伪协议可用于读取请求体的原始数据,不管请求方法是 GET 还是 POST 还是其他方法。类似 URL 传参时的 $_GET 数组。