Путь к http/2

4xx: Ошибка клиента

Сообщение: Описание:
400 Bad Request Запрос не может быть выполнен из-за плохого синтаксиса
401 Unauthorized Запрос был юридическим запросом, но сервер отказывается отвечать на него. Для использования, когда Аутентификация возможна, но не удалась или еще не была предоставлена
402 Payment Required Зарезервировано для использования в будущем
403 Forbidden Запрос был юридическим запросом, но сервер отказывается отвечать на него
404 Not Found Запрошенная страница не найдена, но может быть снова доступна в будущем
405 Method Not Allowed Запрос был сделан из страницы с помощью метода запроса, не поддерживаемого этой страницей
406 Not Acceptable Сервер может генерировать только ответ, который не принимается клиентом
407 Proxy Authentication Required Клиент должен сначала проверить себя с помощью прокси-сервера
408 Request Timeout Время ожидания сервера в ожидании запроса
409 Conflict Запрос не может быть завершен из-за конфликта в запросе
410 Gone Запрашиваемая страница больше не доступна
411 Length Required «Content-Length» не определен. Сервер не будет принимать запрос без него
412 Precondition Failed Предварительное условие, заданное в запросе, оценено как false по сервер
413 Request Entity Too Large Сервер не примет запрос, так как сущность Request является слишком большой
414 Request-URI Too Long Сервер не примет запрос, так как URL-адрес слишком долго. Происходит при преобразовании запроса POST в запрос GET с длинная информация о запросе 
415 Unsupported Media Type Сервер не примет запрос, так как носитель тип не поддерживается 
416 Requested Range Not Satisfiable Клиент запросил часть файла, но сервер не может предоставить эту часть
417 Expectation Failed Сервер не может выполнить требования поля заголовка Expect-запроса

POST с urlencoded

В методе POST параметры передаются не в URL, а в теле запроса. Оно указывается в вызове .


В стандартных HTTP-формах для метода POST доступны , задаваемые через атрибут :

В зависимости от браузер кодирует данные соответствующим способом перед отправкой на сервер.

В случае с мы, вообще говоря, не обязаны использовать ни один из этих способов. Главное, чтобы сервер наш запрос понял. Но обычно проще всего выбрать какой-то из стандартных.

В частности, при POST обязателен заголовок , содержащий кодировку. Это указание для сервера – как обрабатывать (раскодировать) пришедший запрос.

Для примера отправим запрос в кодировке :

Только UTF-8

Всегда используется только кодировка UTF-8, независимо от языка и кодировки страницы.

Если сервер вдруг ожидает данные в другой кодировке, к примеру windows-1251, то их нужно будет перекодировать.

GET vs. POST

Both GET and POST create an array (e.g. array( key1 => value1, key2 => value2, key3 => value3, …)). This array holds key/value pairs, where keys are the names of the form controls and values are the input data from the user.

Both GET and POST are treated as $_GET and $_POST. These are superglobals, which means that they are always accessible, regardless of scope — and you can access them from any function, class or file without having to do anything special.

$_GET is an array of variables passed to the current script via the URL parameters.

$_POST is an array of variables passed to the current script via the HTTP POST method.

POST-запросы. Метод post

Последнее обновление: 1.11.2015

В отличие от GET-запросов данные POST-запросов передаются не в строке запроса, а в его теле. Распространенным примеров подобных запросов является отправка данных формы на сервер.

Для отправки POST-запросов предназначен метод . Его объявление и использование в целом аналогично методу get. Он принимает следующие параметры:

  • : обязательный параметр, содержащий адрес ресурса, к которому будет обращаться запрос

  • : необязательный параметр, содержащий простой объект javascript или строку, которые будут отправлены на сервер вместе с запросом

  • : необязательный параметр — функция обратного вызова, которая будет выполняться при успешном выполнении запроса. Она может принимать три параметра: — данные, полученные с сервера, — — статус запроса и — специальный объект jQuery, который представляет расширенный вариант объекта XMLHttpRequest.

  • : необязательный параметр, содержащий тип данных в виде строки, например, «xml» или «json»

На выходе метод post возвращает объект .

Пример использования:

$.post('ajax.php', {'login':'1111', 'password' : '2222'},
		function(data) {
		$('#news').html(data);
		});

В данном случае мы передаем в качестве данных пароль и логин. На сервере мы можем получить данные и отправить ответ пользователю:

<?php
	$login=$_POST;
	$pass=$_POST;
	if($login=="1111" && $pass=="2222"){
		echo "Авторизация прошла успешно";
	}
	else{
		echo "Неверно введен логин или пароль";
	}
?>

Поскольку наиболее часто запрос post используется при отправке данных формы, используем на стороне клиента форму:

<html>
	<head>
		<meta charset='utf-8'>
		<script src="jquery-1.10.1.min.js"></script>
	</head>
	<body>
		 <form action="ajax.php" id="loginForm">
			<input type="text" id="login" placeholder="Логин" /><br><br>
			<input type="text" id="password" placeholder="Пароль" /><br><br>
			<input type="submit" value="Войти" />
		</form>
		<div id="result"></div>
		<script type="text/javascript">
		$("#loginForm").submit(function(event) {
			// Предотвращаем обычную отправку формы
			event.preventDefault();
			$.post('ajax.php', {'login':$('#login').val(), 'password' : $('#password').val()},
					function(data) {
							$('#result').html(data);
					});
			});
		</script>
	</body>
</html>

Итак, серверная часть, к которой будет обращаться форма — файл ajax.php — у нас остается той же. Только в данном случае теперь для параметра в методе post мы данные берем из полей на этой форме.

Обратите внимание, что мы блокируем обычную отправку формы (), иначе у нас бы шла переадресация

Сериализация формы

Посколкьу нередко формы не ограничиваются двумя полями, то проще применять сериализацию формы. Сериализация производится посредством метода и в качестве результата создает объект javascript, где свойствам соответствуют поля формы. И значения хранят эти свойства те же, что имеют соответственные поля формы.

Итак, применим сеиализацию формы:

		 <form action="ajax.php" id="loginForm">
			<input type="text" name="login" placeholder="Логин" /><br><br>
			<input type="text" name="password" placeholder="Пароль" /><br><br>
			<input type="submit" value="Войти" />
		</form>
		<div id="result"></div>
		<script type="text/javascript">
		$("#loginForm").submit(function(event) {
			// Предотвращаем обычную отправку формы
			event.preventDefault();
			$.post('ajax.php', $("#loginForm").serialize(),
					function(data) {
							$('#result').html(data);
					});
			});
		</script>

В отличие от предыдущего примера у нас здесь два отличия

Во-первых, обратите внимание, что поля для ввода имеют атрибут. При указании параметра мы производим сериализацию данных формы через метод :

В данном методе в тело запроса передаются параметры. Причем имена параметров — это значения атрибутов name полей ввода. А значения параметров — соответственно введенные значения в текстовые поля.

И поэтому с помощью php мы можем извлечь эти значения: .

НазадВперед

Формат заголовка IP-пакета

Для того чтобы понять, как протокол IP реализует эту задачу, рассмотрим формат заголовка IP пакета.

Номер версии

Первое поле номер версии. Сейчас используется две версии протокола IP 4 и 6. Большая часть компьютеров использует IPv4. Длина  адреса в этой версии 4 байта. Формат адреса IP версии 4 мы рассматривали подробно. Проблема в том, что адресов IPv4, четыре с небольшим миллиарда, что уже сейчас не хватает для всех устройств в сети, а в будущем точно не хватит. Поэтому была предложена новая версия IPv6 в которой длина IP адреса составляет 16 байт. Сейчас эта версия вводится в эксплуатацию, но процесс занимает очень долгое время.

Длина заголовка

Следующее поле длина заголовка. В отличии от Ethernet заголовок IP включает обязательные поля, а также может включать дополнительные поля, которые называются опции. В поле длина заголовка записывается полная длина, как обязательной части, так и опции.

Тип сервиса

Следующее поле тип сервиса. Это поле нужно для обеспечения необходимого качества обслуживания, но сейчас на практике используется очень редко.

Общая длина

Следующее поле общая длина. Общая длина содержит длину всего IP пакета, включая заголовок и данные. Максимальная длина пакета 65 535 байт, но на практике такие большие пакеты не используются, а максимальный размер ограничен размером кадра канального уровня, а для Ethernet это 1 500 байт. В противном случае для передачи одного IP пакета необходимо было бы несколько кадров канального уровня что неудобно.

Время жизни

Дальше идет поле время жизни. Время жизни Time To Live или TTL — это максимальное время в течение которого пакет может перемещаться по сети. Оно введено для того чтобы пакеты не гуляли по сети бесконечно, если в конфигурации сети возникла какая-то ошибка. Например, в результате неправильной настройке маршрутизаторов в сети, может образоваться петля. Раньше, время жизни измерялось в секундах, но сейчас маршрутизаторы обрабатывают пакет значительно быстрее чем за секунду, поэтому время жизни уменьшается на единицу на каждом маршрутизаторе, и оно измеряется в количествах прохождения через маршрутизаторы по-английски (hop) от слова прыжок. Таким образом название время жизни сейчас стало уже некорректным.

Тип протокола

После времени жизни, указывается тип протокола следующего уровня. Это поле необходимо для реализации функции мультиплексирования и демультиплексирования, то есть передачи с помощью протокола IP данных от разных протоколов следующего уровня. В этом поле указывается код протокола следующего уровня, некоторые примеры кодов для TCP код 6, UDP — 17 и ICMP — 1.

Контрольная сумма

Затем идет контрольная сумма, которая используется для проверки правильности доставки пакета, если при проверке контрольные суммы обнаруженные ошибки, то пакет отбрасывается, никакой информации отправителю пакета не отправляется. Контрольная сумма рассчитывается только по заголовку IP пакета и она пересчитывается на каждом маршрутизаторе из-за того что данные в заголовке меняются. Как минимум изменяется время жизни пакета, а также могут измениться некоторые опции.

IP адрес получателя и отправителя

После контрольной суммы идут IP адрес  отправителя, и IP адрес получателя. В IPv4 длина IP адреса четыре байта, 32 бита на этом обязательная часть IP заголовка заканчивается, после этого идут не обязательные поля которые в IP называются опции.

Опции


Некоторые примеры опций. Для диагностики работы сети используется опция — записать маршрут, при которой в IP пакет записывается адрес каждого маршрутизатора через которую он проходит.

И опция — временные метки, при установке которой, каждый маршрутизатор записывает время прохождения пакеты.

Также опции позволяют отказаться от автоматической маршрутизации, и задать маршрут отправитель:

  • Это может быть жесткая маршрутизация, где в пакете явно указывается перечень маршрутизаторов через которые необходимо пройти.
  • И свободные маршрутизации в этом случае указываются только некоторые маршрутизаторы, через которые пакет должен пройти обязательно, также при необходимости он может пройти через другие маршрутизаторы.

Опции в заголовке IP может быть несколько и они могут иметь разный размер. В то же время длина IP заголовка должна быть кратна 32, поэтому при необходимости, в конце IP заголовок заполняются нулями до выравнивание по границе 32 бита. Следует отметить, что сейчас опции в заголовке IP почти не используются.

В статье был рассмотрен протокол IP (Internet Protocol) — протокол межсетевого взаимодействия. Протокол IP является основой интернета. В OSI находится на сетевом уровне.

PHP $_POST

PHP $_POST is a PHP super global variable which is used to collect form data after submitting an HTML form with method=»post». $_POST is also widely used to pass variables.

The example below shows a form with an input field and a submit button. When a user submits the data by clicking on «Submit», the form data is sent to the file specified in the action attribute of the <form> tag. In this example, we point to the file itself for processing form data. If you wish to use another PHP file to process form data, replace that with the filename of your choice. Then, we can use the super global variable $_POST to collect the value of the input field:

Example

<html> <body> <form method=»post» action=»<?php echo $_SERVER;?>»>  Name: <input type=»text» name=»fname»>  <input type=»submit»> </form><?phpif ($_SERVER == «POST») {  // collect value of input field   $name = $_POST;  if (empty($name)) {    echo «Name is empty»;  } else {    echo $name;   }}?> </body> </html>

Tip: You will learn more about $_POST in the PHP Forms chapter.

5xx: Ошибка сервера

Сообщение: Описание:
500 Internal Server Error Общее сообщение об ошибке, если не подходит более конкретное сообщение
501 Not Implemented Сервер либо не распознает метод запроса, либо ему не хватает возможности выполнить запрос
502 Bad Gateway Сервер действовал в качестве шлюза или прокси и получил неверный ответ от вышестоящего сервера
503 Service Unavailable Сервер в настоящее время недоступен (перегружен или выключен)
504 Gateway Timeout Сервер действовал в качестве шлюза или прокси и не получал своевременного ответа от вышестоящего сервера
505 HTTP Version Not Supported Сервер не поддерживает версию протокола HTTP, используемую в запросе
511 Network Authentication Required Клиент должен пройти проверку подлинности для получения доступа к сети

❮ Назад Дальше ❯

The $_REQUEST variable

The PHP $_REQUEST variable contains the contents of both $_GET, $_POST, and $_COOKIE. We will discuss $_COOKIE variable when we will explain about cookies.

The PHP $_REQUEST variable can be used to get the result from form data sent with both the GET and POST methods.

Try out following example by putting the source code in test.php script.

<?php
   if( $_REQUEST || $_REQUEST ) {
      echo "Welcome ". $_REQUEST. "<br />";
      echo "You are ". $_REQUEST. " years old.";
      exit();
   }
?>
<html>
   <body>
      
      <form action = "<?php $_PHP_SELF ?>" method = "POST">
         Name: <input type = "text" name = "name" />
         Age: <input type = "text" name = "age" />
         <input type = "submit" />
      </form>
      
   </body>
</html>

Here $_PHP_SELF variable contains the name of self script in which it is being called.

It will produce the following result −

Previous Page Print Page

Next Page  

HTML Теги

<!—…—><!DOCTYPE><a><abbr><acronym><address><applet><area><article><aside><audio><b><base><basefont><bdi><bdo><big><blockquote><body><br><button><canvas><caption><center><cite><code><col><colgroup><data><datalist><dd><del><details><dfn><dialog><dir><div><dl><dt><em><embed><fieldset><figcaption><figure><font><footer><form><frame><frameset><h1> — <h6><head><header><hr><html><i><iframe><img><input><ins><kbd><label><legend><li><link><main><map><mark><menu><menuitem><meta><meter><nav><noframes><noscript><object><ol><optgroup><option><output><p><param><picture><pre><progress><q><rp><rt><ruby><s><samp><script><section><select><small><source><span><strike><strong><style><sub><summary><sup><svg><table><tbody><td><template><textarea><tfoot><th><thead><time><title><tr><track><tt><u><ul><var><video>

Библиотеки для работы с HTTP — jQuery AJAX

Поскольку jQuery очень популярен, в нём также есть инструментарий для обработки HTTP ответов при AJAX запросах. Информацию о jQuery.ajax(settings) можете найти на официальном сайте.

Передав объект настроек (settings), а также воспользовавшись функцией обратного вызова beforeSend, мы можем задать заголовки запроса, с помощью метода setRequestHeader().

$.ajax({
    url: 'http://www.articles.com/latest',
    type: 'GET',
    beforeSend: function (jqXHR) {
      jqXHR.setRequestHeader('Accepts-Language', 'en-US,en');
    }
  });

Прочитать объект jqXHR можно с помощью метода jqXHR.getResponseHeader().

Если хотите обработать статус запроса, то это можно сделать так:

$.ajax({
  statusCode: {
    404: function() {
      alert("page not found");
    }
  }
});

Therefore, the general steps might be …


Part I: HTTP Request Related

  1. Determine if the correct HTTP method has been indicated (GET, POST, PUT, PATCH, DELETE, …)
  2. Determine if the HTTP Content-Type header has been transmitted.
  3. Determine if the value for the Content-Type is the desired media type.

Part II: Stream Data Related

  1. Determine the size of the input stream (optional, but recommended).
  2. Determine the encoding of the input stream.
  3. If necessary, convert the input stream to the desired character encoding (UTF-8).
  4. If necessary, reverse any application level compression or encryption, and then repeat steps 4, 5, and 6.

Part III: Data Type Related

  1. Determine if the data sent is well formed XML / JSON / YMAL / etc.

(Remember, the data can still be a URL encoded string which you must then parse and URL decode).

  1. If necessary, convert the data to a PHP datatype: array or object.

Part IV: Data Value Related

  1. Filter input data.

  2. Validate input data.

5 последних уроков рубрики «Разное»

  • Выбрать хороший хостинг для своего сайта достаточно сложная задача. Особенно сейчас, когда на рынке услуг хостинга действует несколько сотен игроков с очень привлекательными предложениями. Хорошим вариантом является лидер рейтинга Хостинг Ниндзя — Макхост.

  • Как разместить свой сайт на хостинге? Правильно выбранный хороший хостинг — это будущее Ваших сайтов

    Проект готов, Все проверено на локальном сервере OpenServer и можно переносить сайт на хостинг. Вот только какую компанию выбрать? Предлагаю рассмотреть хостинг fornex.com. Отличное место для твоего проекта с перспективами бурного роста.

  • Создание вебсайта — процесс трудоёмкий, требующий слаженного взаимодействия между заказчиком и исполнителем, а также между всеми членами коллектива, вовлечёнными в проект. И в этом очень хорошее подспорье окажет онлайн платформа Wrike.

  • Подборка из нескольких десятков ресурсов для создания мокапов и прототипов.

HTML Ссылки

HTML по АлфавитуHTML по КатегориямHTML Атрибуты ТеговHTML Атрибуты ГлобалHTML Атрибуты СобытийHTML ЦветаHTML ХолстыHTML Аудио / ВидеоHTML Наборы символовHTML DOCTYPEsHTML Кодирование URLHTML Языковые кодыHTML Коды странHTTP Ответы сервераHTTP МетодыPX в EM конвертерГорячие клавиши

HTML Теги

<!—> <!DOCTYPE> <a> <abbr> <acronym> <address> <applet> <area> <article> <aside> <audio> <b> <base> <basefont> <bdi> <bdo> <big> <blockquote> <body> <br> <button> <canvas> <caption> <center> <cite> <code> <col> <colgroup> <data> <datalist> <dd> <del> <details> <dfn> <dialog> <dir> <div> <dl> <dt> <em> <embed> <fieldset> <figcaption> <figure> <font> <footer> <form> <frame> <frameset> <h1> — <h6> <head> <header> <hr> <html> <i> <iframe> <img> <input> <ins> <kbd> <label> <legend> <li> <link> <main> <map> <mark> <menu> <menuitem> <meta> <meter> <nav> <noframes> <noscript> <object> <ol> <optgroup> <option> <output> <p> <param> <picture> <pre> <progress> <q> <rp> <rt> <ruby> <s> <samp> <script> <section> <select> <small> <source> <span> <strike> <strong> <style> <sub> <summary> <sup> <svg> <table> <tbody> <td> <template> <textarea> <tfoot> <th> <thead> <time> <title> <tr> <track> <tt> <u> <ul> <var> <video> <wbr>

HTML Ссылки

HTML по АлфавитуHTML по КатегориямHTML Атрибуты ТеговHTML Атрибуты ГлобалHTML Атрибуты СобытийHTML ЦветаHTML ХолстыHTML Аудио / ВидеоHTML Наборы символовHTML DOCTYPEsHTML Кодирование URLHTML Языковые кодыHTML Коды странHTTP Ответы сервераHTTP МетодыPX в EM конвертерГорячие клавиши

HTML Теги

<!—> <!DOCTYPE> <a> <abbr> <acronym> <address> <applet> <area> <article> <aside> <audio> <b> <base> <basefont> <bdi> <bdo> <big> <blockquote> <body> <br> <button> <canvas> <caption> <center> <cite> <code> <col> <colgroup> <data> <datalist> <dd> <del> <details> <dfn> <dialog> <dir> <div> <dl> <dt> <em> <embed> <fieldset> <figcaption> <figure> <font> <footer> <form> <frame> <frameset> <h1> — <h6> <head> <header> <hr> <html> <i> <iframe> <img> <input> <ins> <kbd> <label> <legend> <li> <link> <main> <map> <mark> <menu> <menuitem> <meta> <meter> <nav> <noframes> <noscript> <object> <ol> <optgroup> <option> <output> <p> <param> <picture> <pre> <progress> <q> <rp> <rt> <ruby> <s> <samp> <script> <section> <select> <small> <source> <span> <strike> <strong> <style> <sub> <summary> <sup> <svg> <table> <tbody> <td> <template> <textarea> <tfoot> <th> <thead> <time> <title> <tr> <track> <tt> <u> <ul> <var> <video> <wbr>

HTML Теги

<!—><!DOCTYPE><a><abbr><acronym><address><applet><area><article><aside><audio><b><base><basefont><bdi><bdo><big><blockquote><body><br><button><canvas><caption><center><cite><code><col><colgroup><data><datalist><dd><del><details><dfn><dialog><dir><div><dl><dt><em><embed><fieldset><figcaption><figure><font><footer><form><frame><frameset><h1> — <h6><head><header><hr><html><i><iframe><img><input><ins><kbd><label><legend><li><link><main><map><mark><menu><menuitem><meta><meter><nav><noframes><noscript><object><ol><optgroup><option><output><p><param><picture><pre><progress><q><rp><rt><ruby><s><samp><script><section><select><small><source><span><strike><strong><style><sub><summary><sup><svg><table><tbody><td><template><textarea><tfoot><th><thead><time><title><tr><track><tt><u><ul><var><video>

Формат запроса

Запрос выглядит примерно так:

Request-Line = Method SP URI SP HTTP-Version CRLF
Method = "OPTIONS"
       | "HEAD"
       | "GET"
       | "POST"
       | "PUT"
       | "DELETE"
       | "TRACE"

SP — это разделитель между токенами. Версия HTTP указывается в HTTP-Version. Реальный запрос выглядит так:

GET /articles/http-basics HTTP/1.1
Host: www.articles.com
Connection: keep-alive
Cache-Control: no-cache
Pragma: no-cache
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8

Список возможных заголовков запроса:

request-header = Accept
               | Accept-Charset
               | Accept-Encoding
               | Accept-Language
               | Authorization
               | Expect
               | From
               | Host
               | If-Match
               | If-Modified-Since
               | If-None-Match
               | If-Range
               | If-Unmodified-Since
               | Max-Forwards
               | Proxy-Authorization
               | Range
               | Referer
               | TE
               | User-Agent

В заголовке Accept определяется поддерживаемые mime типы, язык, кодировку символов. Заголовки From, Host, Referer и User-Agent содержат информацию о клиенте. Префиксы If- предназначены для создания условий. Если условие не прошло, то возникнет ошибка 304 Not Modified.


С этим читают