我正在尝试理解原始帖子数据的含义。 $HTTP_RAW_POST_DATA
的PHP手册页只是说明此变量包含Raw POST data
。
何时设置此变量以及原始发布数据的含义是什么?
我理解$_POST
,但与$HTTP_RAW_POST_DATA
答案 0 :(得分:12)
HTTP请求由两部分组成。一组标题和正文。
标题包括所请求的URL和缓存控制助手之类的内容(例如“我昨天有这个版本,如果有更改,只给我一个新版本,好吗?”)。
根据请求的类型,可能会出现或不出现正文。 POST请求有正文。
身体可以是客户喜欢的任何格式。其中一个标题将告诉服务器格式是什么。
HTML表单使用了几种格式,PHP知道如何解析这些格式并将数据放入$_POST
。
如果数据是另一种格式,例如JSON,或者数据不符合PHP的怪癖(例如在同名的键末尾有[]
的规则),那么你可能想直接访问数据,以便您自己解析。
这是原始的POST数据。
答案 1 :(得分:4)
$_POST
之后, $HTTP_RAW_POST_DATA
可以说是和结果,php以我们在$_POST
中看到的方式分割原始帖子数据和格式例如:
$HTTP_RAW_POST_DATA
看起来像这样
key1=value1&key2=value2
然后
$_POST
看起来像这样:
$_POST = array(
"key1" => "value1",
"key2" => "value2",);
答案 2 :(得分:1)
HTTP是基于文本的协议,因此所有数据都作为字符串传递。当您使用$_POST
时 - 您已经处理了传递的数据,以使您处于数组形式。这是在控件传递给您的脚本之前自动完成的。
因此,在原始发布数据中,有一个数据通过网络传递。
您可能会看到a=1&b=2
数据,就像您在网址中看到的那样
答案 3 :(得分:1)
使用http协议可以做的一件事就是执行POST请求,将一些文本发送回服务器。
$HTTP_RAW_POST_DATA
将包含该文字,无论它说什么。
大多数情况下,当我们发出POST请求时,我们会在发送的文本中添加“内容类型”。这告诉服务器它是什么类型的内容。我们大多数时间都在网络上发送内容类型为'application / x-www-form-urlencoded'。
当服务器收到带有此内容类型标记的POST请求时,服务器将知道尝试将数据转换为$_POST
数组,以便“test = hello”变为:
$_POST['test']='hello'
答案 4 :(得分:0)
$HTTP_RAW_POST_DATA
包含原始POST数据,如下所示:
通常,应使用php://input
代替$HTTP_RAW_POST_DATA.
,因为此功能自PHP 5.6.0起已被弃用。非常不鼓励依赖此功能。