我试图理解原始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