什么是原始开机自检数据


What is the raw POST data?

我试图理解原始POST数据的含义。$HTTP_RAW_POST_DATA的 PHP 手册页只是声明此变量包含 Raw POST data

何时设置此变量,原始 POST 数据的含义是什么?

我理解$_POST,但我完全$HTTP_RAW_POST_DATA混淆了。

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

标头包括请求的 URL 和缓存控制帮助程序等内容(例如"我有昨天的版本,只有在有更改时才给我一个新的版本,好吗?

正文可能会也可能不会显示,具体取决于请求的类型。开机自检请求有正文。

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

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

如果数据采用其他格式,例如 JSON,或者数据不符合 PHP 的怪癖(例如在同名键末尾[]的规则(,那么您可能希望直接访问数据,以便您可以自己解析它。

这是原始的开机自检数据。

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

$HTTP_RAW_POST_DATA看起来像这样

key1=value1&key2=value2

那么$_POST看起来像这样:

$_POST = array(
    "key1" => "value1",
    "key2" => "value2",);

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

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

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

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

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

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

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

$_POST['test']='hello'

$HTTP_RAW_POST_DATA包含原始 POST 数据,如下所示:

  • 发短信
  • 杰伦
  • .XML
  • .HTML

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

来源: php.net - $HTTP_RAW_POST_DATA