В чем разница между POST и raw POST в PHP вообще?

У меня этот вопрос после прочтения ответа здесь какая разница вообще?

можно ли отправить необработанный пост с помощью html ?

4 ответов


мы можем разделить формы представления в трех случаях:

  1. представления с типом контента application/x-www-form-urlencoded
  2. представления с типом контента multipart/form-data
  3. другие материалы.

в случаях 1 и 3 $HTTP_RAW_POST_DATA содержит необработанные данные post (за исключением, если опция always_populate_raw_post_data установлено значение false в этом случае $HTTP_RAW_POST_DATA пуст в случае 1), т. е. данные точно так же, как клиент (обычно браузер) отправил его. В случае, 1, Данные такая форма, как

key1=value1&key2=value2&key3[]=value3.1&key3[]=value3.2

PHP автоматически анализирует это, так что $_POST будет:

$_POST = array(
    "key1" => "value1",
    "key2" => "value2",
    "key3" => array("value3.1", "value3.2");
)

содержимое необработанных данных также может быть доступ через php://input, даже в случае, когда 1 always_populate_raw_post_data установлено значение false. В частности, file_get_contents("php://input") дает те же данные $HTTP_RAW_POST_DATA имеет или будет иметь.

в случае 3, в котором данные POST произвольны,$_POST будет пустой массив и $HTTP_RAW_POST_DATA всегда будет заполнен.

случай 2 особенный один. В этом случае PHP будет анализировать данные и $_POST получит содержимое полей, которые не являются загруженными файлами, но php://input и $HTTP_RAW_POST_DATA будет недоступна.


$HTTP_RAW_POST_DATA будет содержать что-то вроде:

beans=cheese&spam=eggs&one=two

PHP разбивает это для вас и запихивает его в $_POST массив. Наивно, он делает что-то вроде этого:

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

используя JavaScript, который может быть встроен в HTML, вы можете опубликовать все, что вам нравится с AJAX. Что-то вроде этого:--6-->

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

позволит вам размещать произвольные вещи на веб-сервере.


$_POST-ассоциативный массив входящих параметров POST. PHP создает это для вас из raw HTTP post. Если вы хотите иметь дело с необработанными данными POST самостоятельно (у вас могут быть некоторые двоичные данные, отправленные в POST), используйте $HTTP_RAW_POST_DATA.


_POST принимает application/x-www-form-urlencoded или multipart/form-data ценностей форма. HTTP_RAW_POST_DATA, если заполнен, - это "сырые" строки. Вы также можете получить доступ к этому с помощью psuedo-url php://input. Вы можете отправлять произвольные данные POST (например, XML, JSON, HTML) с помощью AJAX.