10

I'm trying to understand the meaning of raw POST data. The PHP manual page for $HTTP_RAW_POST_DATA just state that this variable contains Raw POST data.

When will this variable be set and what's the meaning of raw POST data?

I understand the $_POST, but I am totally confused with $HTTP_RAW_POST_DATA.

4

5 回答 5

14

HTTP 请求由两部分组成。一组标题和一个正文。

标头包括请求的 URL 和缓存控制助手等内容(例如“我有一个昨天的版本,只有在有变化时才给我一个新版本,好吗?”)。

正文可能会出现也可能不会出现,具体取决于请求的类型。POST 请求有正文。

正文可以是客户喜欢的任何格式。其中一个标头将告诉服务器格式是什么。

HTML 表单使用了几种格式,PHP 知道如何解析这些格式并将数据放入$_POST.

如果数据是另一种格式,例如 JSON,或者如果数据不符合 PHP 的怪癖(例如在具有[]相同名称的键的末尾的规则),那么您可能希望直接访问数据所以你可以自己解析。

那是原始的 POST 数据。

于 2012-08-30T10:44:21.107 回答
4

$_POST可以说是拆分$HTTP_RAW_POST_DATA变量后的结果。PHP 会拆分原始帖子数据并按照我们在$_POST数组中看到的方式对其进行格式化。例如:

$HTTP_RAW_POST_DATA看起来像这样

key1=value1&key2=value2

然后$_POST看起来像这样:

$_POST = array(
    "key1" => "value1",
    "key2" => "value2",);
于 2012-08-30T10:39:03.467 回答
2

HTTP 是基于文本的协议,因此所有数据都作为字符串传递。当您使用时$_POST- 您已经处理了传递的数据,以便您采用数组形式。这是在将控件传递给您的脚本之前由 PHP 自动完成的。

因此,在原始 POST 数据中存在通过网络传递的数据。

您可能会看到a=1&b=2数据,就像您在 URL 中看到的那样。

于 2012-08-30T10:27:40.530 回答
1

您可以使用 HTTP 协议做的一件事是执行 POST 请求,将一些文本发送回服务器。

$HTTP_RAW_POST_DATA将包含该文本,无论它说什么。

大多数情况下,当我们发出 POST 请求时,我们会在发送的文本中添加“内容类型”。这告诉服务器它是什么类型的内容。大多数时候,我们在网络上发送内容类型为“application/x-www-form-urlencoded”。

当服务器接收到带有此内容类型标记的 POST 请求时,服务器将知道尝试将数据转换为$_POST数组,以便 "test=hello" 变为:

$_POST['test']='hello'
于 2012-08-30T10:29:22.077 回答
1

$HTTP_RAW_POST_DATA包含以下格式的原始 POST 数据:

  • 文本
  • JSON
  • XML
  • HTML

通常,php://input应该使用 代替,$HTTP_RAW_POST_DATA.因为从 PHP 5.6.0 开始,此功能已被弃用。强烈建议不要依赖此功能。

来源:php.net - $HTTP_RAW_POST_DATA

于 2015-01-18T08:32:39.180 回答