HTTP HTTPS URI URL URN

HTTP HTTPS URI URL URN

Протоколы HTTP, HTTPS и URI, URL, URN  адреса реруса.

По протоколу HTTP или HTTPS идет запрос, а по адресу URI или URL получаем местонахождение и если есть тело, ресурс сайта.

В чем разница между HTTP и HTTPS?

HTTP -  Hyper Text Transfer Protocol. Протокол Передачи Гипертекста. Предлагает набор правил и стандартов, которые регулируют способ передачи любой информации во Всемирной паутине. HTTP предоставляет стандартные правила для взаимодействия веб-браузеров и серверов.

HTTPS — Hyper Text Transfer Protocol Secure. Тоже что и http только Secure-Безопасный, защищенный протокол передачи гипертекста. Для коммуникации данных используется 443-ий порт. Данный протокол позволяет обеспечить безопасность транзакций путем шифрования всего трафика с помощью SSL. Это комбинация протокола SSL/TLS и HTTP. Обеспечивает зашифрованную и безопасную идентификацию сетевого сервера. Он обеспечивает двунаправленную безопасность данных. Это помогает защитить потенциально конфиденциальную информацию от кражи. 

Разница между двумя протоколами HTTP и HTTPS, по сути только в стандартном и защищенном способе передачи данных.   

При запросе адреса сайта социального портала, браузер отправляет запрос. Пример

GET / HTTP/1.1  // по какому методу и протоколу идет запрос
Host: socport.ru   // определяет адрес домена, который запрашивает браузер  

И получает ответ

  1. URL-адрес запроса:  https://socport.ru/ // адрес сайта
  2. Метод запроса:  GET  //  Метод, которым запрошен контент; 
  3. Код состояния:  200  // сервер работает, документ найден 
  4. Удаленный адрес:  84.64.231.418:443  // ip и порт HTTPS

В этом примере код ответа — 200, что означает: сервер работает, документ найден и будет передан клиенту. Но не всегда всё идет гладко.
Например, запрошенный документ может отсутствовать или сервер будет перегружен, в таком случае клиент не получит контент, а код ответа будет отличным от 200.

  • 404 — если сервер доступен, но запрошённый документ не найден;
  • 503 — если сервер не может обрабатывать запросы по техническим причинам.

Спецификация HTTP 1.1 определяет 40 различных кодов HTTP.

К примеру дадим ответ 503. Запишем функцию header, дальше протокол, версия протокола 1.1 и код Сервер Недоступен. Вы можете найти все коды состояния HTTP в поисковике. 

header('HTTP/1.1 503');  //  Код состояния:  503 Service Unavailable
 
header('HTTP/1.1 304'); // объект не изменялся. Команда браузеру взять из кеша 
 

Работа с заголовками в PHP

В PHP есть все возможности для взаимодействия с протоколом HTTP:

  • Получение тела запроса;
  • Получение заголовков запроса;
  • Добавление/изменение заголовков ответа;
  • Управление телом ответа.

Напомним ещё раз, что заголовки запроса — это мета-информация, отправленная браузером при запросе сценария.
PHP автоматически извлекает такие заголовки и помещает их в специальный массив- $_SERVER

Стоит отметить, что в этом массиве, помимо заголовков, есть и другая информация. Значения заголовков запроса находятся под ключами, которые начинаются с  HTTP_

Подробно всё содержимое этого массива описано в официальной документации

Выведем при помощи массива  $_SERVER и индекса HTTP_USER_AGENT, данные пользователя запросившего адрес сайта.

echo $_SERVER['HTTP_USER_AGENT']; 

И мы увидим такой же заголовок запроса, как и в  меню браузера (Другие инструменты, Средства разработчика, Сеть, Все, Заголовки запроса, User-Agent:)

   Узнать айпи пользователя который просматривает страницу или порт, так же можно через глобальный массив $_SERVER. Пример

echo '<p>' . $_SERVER['REMOTE_ADDR']; // айпи пользователя
<p>   echo '<p>' . $_SERVER['REMOTE_PORT']; // порт</p>

Для примера создадим два файла:  test1.php и test2.php

  Запишем в test2.php  ссылку 

echo "<a href='test1.php'>Ссылка на тест 1  </a>"; 

а в test1.php запишем для примера массив  'HTTP_REFERER', из которого узнаем с какой страницы перешел пользователь.

print 'пользователь перешел с ' . ($_SERVER['HTTP_REFERER']); 
echo '<p> Это страница тест1, на которую должен перейти пользователь с тест2 ';

При нажатии на ссылку в файле тест2, мы перешли на тест1 с записью адреса страницы в массиве.

Работа с заголовками.

Управлять всеми заголовками ответа, которые попадут к пользователю вместе с контентом страницы можно средствами PHP.
Вот примеры сценариев, когда пригодится управление заголовками ответа:

  • Кэширование;
  • Переадресация пользователя;
  • Установка cookies;
  • Отправка файлов;
  • Передача дополнительной информации браузеру.

Заголовки ответа нужны для выполнения множества важных задач.

В PHP есть функция для отправки или смены заголовков:  header()

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

В заголовках откликов мы получаем тип страницы и кодировку.

content-type: text/html; charset=UTF-8  // тип html кодировка UTF-8 

если необходимо отобразить страницу, как видит ее браузер то вместо html запишите plain

header("Content-type: text/plain");  // в этом случае отобразиться страница со всеми тегами.

Таким же образом можно дать команду сохранить ее в формате txt или pdf.

header("Content-type: application/txt");    // сохранить в txt

Задать название файла сохраняемой страницы. Пример

header('Content-Disposition: attachment; filename="socport_file.txt"'); 

Задать кодировку можно в заголовке php. Пример

header("Content-Type: text/html; charset=utf-8"); 
header("Content-type: text/html; Charset=windows-1251"); 

Переадресация страницы

Запишем в  test1.php функцию header c заголовком Refresh, задержкой 5 секунд перед переадресацией и адресом страницы тест2 куда, перенаправить нас обратно на тест2 через 5 секунд.

header("Refresh: 5; url=/test2.php"); // перейти через 5сек. по адресу 

Проверим. Если нам не нужна пауза то можно сразу записать заголовком Location 

header("Location: /test2.php"); //все равно что вы уже на странице тест2

За переадресацию отвечает заголовок с именем Location, а через двоеточие задаётся значение — адрес страницы для перехода, если ресурс вшений то пишем весь путь URL, http://socport.ru/test2.php.

Таким же образом можно использовать для редиректа переменную вместо адреса. Естественно объявленная переменная должна быть перед вызовом. Пример

$per = '/test2.php'; // в переменную записали адрес
header("Refresh: 5; $per");  // редирект через 5 секунд, вместо адреса переменная

Важное замечание по использованию заголовков в версиях до php-8.
Заголовки нельзя отправлять, если пользователю к этому моменту уже отправили любой контент. То есть, если показать что-то на экране или даже поставить пробел перед открывающимся тегом php, то после этого заголовки поменять уже не получится.

После редиректа принято ставить выход из функции, 

exit;  // или 
 
die; 

если будет присутствовать какой либо код ниже, он не продолжил выполнятся после перехода.

Управление телом ответа

Всё, что PHP выводит на экран, является содержимым ответа. Иными словами, вызовы функции

print
,
echo

или показ текста через теги являются телом ответа, которое попадает в браузер пользователю.

Кешировать страницу, функция header.

Управлять кешированием можно на стороне сервера и через заголовок в php используя функцию header. Управление идет через поля заголовка Cache-Control и Pragma. 

Если мы хотим чтобы одна страница на сайте была кеширована определенное время, то добавляем функцию с полями.

header('Cache-Control: max-age=259200')
header("Pragma: max-age=259200"); 

И в этих же полях прописываем запрет на кеширование, не кешировать  

header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // дата, после которой содержимое ресурса устареет 
header('Last-Modified: ' . gmdate('D, d M Y H:i:s') . ' GMT'); // дата последнего обновления ресурса, всегда модифицируется 
header('Cache-Control: post-check=0,pre-check=0', false);
 
header('Cache-Control: max-age=0', false); 
 
header('Cache-Control: no-store, no-cache, must-revalidate'); // запретить кэширование, и каждый раз запрашивать ресурс с сервера.
 
header('Pragma: no-cache'); //  </p>

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

кешировать

Параметры запроса

Мы привыкли, что на нашем сайте каждый PHP-сценарий отвечает за одну страницу. Посетитель сайта вводит в адресную строку путь, который состоит из имени домена и имени PHP-сценария.

URI URL URN 

URI URL URN

Что обозначают эти аббревиатуры? Примеры 

  • URI — Uniform Resource Identifier (унифицированный идентификатор ресурса)
  • URI – имя и адрес ресурса в сети, включает в себя URL и URN
  • http://socport.ru/ya_i/web-it/programmirovanie/jaz...
    Мы видим адрес сайта URL.  пользователи, идентификатор пользователя и страница его активности, и все это и есть URI + может быть URN

URL — Uniform Resource Locator (унифицированный определитель местонахождения ресурса) URL – адрес ресурса в сети, определяет местонахождение и способ обращения к нему
http://socport.ru/ya_i/web-it/programmirovanie/jaz...

  • URN — Unifrorm Resource Name (унифицированное имя ресурса)
  • URN – имя ресурса в сети, определяет только название ресурса, но не говорит как к нему подключиться 
  • urn:
    Например:
    urn:isbn:50523    для идентификации книги по номеру ISBN. 

URI содержит в себе следующие части:

  • Схема (scheme) — показывает на то, как обращаться к ресурсу, чаще всего это сетевой протокол (http, ftp, ldap)
  • Иерархическая часть (hier-part) — данные, необходимые для идентификации ресурса (например, адрес сайта)
  • Запрос (query) — необязательные дополнительные данные ресурса (например, поисковой запрос)
  • Фрагмент (fragment) – необязательный компонент для идентификации вторичного ресурса ресурса (например, место на странице) 

Передать в редиректе заголовок методом GET и принять его.

В тест1 создадим переменную mir и с значением Privet Mir. В нашу ссылку редиректа добавим GET параметр с именем get, имя можно выбрать любое и в него добавим переменную мир.

$mir = 'Privet Mir'; // создали переменную 
header("Refresh: 5; $per?get=$mir");  // дописали в URL за переменной с адресом, гет параметр ?имя=переменная.
 
header("Refresh: 4; /test2.php?get=Privet Mir"); // или просто передать все URL
 

Принимаем его на странице тест2 

echo $_GET['get']; 

 Или к примеру условие, если нет передан гет то, Нажмите на ссылку.

if (!isset($_GET['get'])) { // если нет параметра гет
$_GET['get'] = 'Нажмите на ссылку'; // выводим текст
}   echo $_GET['get'];  // в случае перехода выводим параметр переданный гет
 

Остальные команды для ответа вы сможеет найти в яндексе.

18:25
575
Lit
RSS
Нет комментариев. Ваш будет первым!

Похожий контент

Наши смартфоны предусматривают целый ряд полезных и интересных функций, которыми мы п...
Ioncube Loader это PHP модуль, для загрузки файлов, защищенных ПО Ioncube Encoder. Io...
Apache и Nginx– популярные веб-серверы с открытым исходным кодом, которые часто использу...
Стек LEMP – это группа программ, предназначенная для обслуживания динамических веб-стран...