PHP中的POST和原始POST有什么区别?

use*_*729 6 html php forms post

我在阅读了这里的答案后有这个问题,有什么区别?

是否可以使用html提交原始POST?

Art*_*cto 24

我们可以在三种情况下分割表格提交:

  1. 内容类型的提交 application/x-www-form-urlencoded
  2. 内容类型的提交 multipart/form-data
  3. 其他提交.

在情况1和3中,$HTTP_RAW_POST_DATA包含原始发布数据(除非选项always_populate_raw_post_data设置为false,在这种情况下$HTTP_RAW_POST_DATA,在情况1中为空),即数据与客户端(通常是浏览器)发送的完全相同.在1的情况下,数据具有诸如的形式

key1=value1&key2=value2&key3[]=value3.1&key3[]=value3.2
Run Code Online (Sandbox Code Playgroud)

PHP自动解析这个,所以$_POST变成:

$_POST = array(
    "key1" => "value1",
    "key2" => "value2",
    "key3" => array("value3.1", "value3.2");
)
Run Code Online (Sandbox Code Playgroud)

php://input即使在always_populate_raw_post_data设置为1的情况下,原始数据的内容也可以通过访问false.特别是,file_get_contents("php://input")给出相同的数据$HTTP_RAW_POST_DATA已经或将要有.

在POST 3数据是任意的情况3中,$_POST将是一个空数组并且$HTTP_RAW_POST_DATA将始终填充.

案例2是一个特殊的案例.在这种情况下,PHP将解析数据,并$_POST会得到未上传的文件中的字段的内容,但php://input$HTTP_RAW_POST_DATA将不可用.


tom*_*mit 5

$HTTP_RAW_POST_DATA 将包含以下内容:

beans=cheese&spam=eggs&one=two
Run Code Online (Sandbox Code Playgroud)

PHP会为你拆分它,然后把它推到$_POST数组中.天真地,它做了这样的事情:

$parts = explode('&', $HTTP_RAW_POST_DATA);
foreach ( $parts as $part ) {
    list($key, $value) = explode('=', $part, 2);
    $_POST[$key] = $value;
}
Run Code Online (Sandbox Code Playgroud)

使用可嵌入HTML的JavaScript,您可以使用AJAX发布任何您喜欢的内容.像这样的东西:

var req = new XMLHttpRequest();
req.open('POST', 'http://www.example.com/my_url' true);
req.send('any data you want');
Run Code Online (Sandbox Code Playgroud)

将允许您将任意内容POST到Web服务器.