Различные вопросы по PHP

#php #http-status-code-301 #http-status-codes

#php #http-status-code-301 #http-status-codes

Вопрос:

  1. об этой функции:

     function requireSSL() {     
    
        if($_SERVER['SERVER_PORT'] != 443) {
            header("HTTP/1.1 301 Moved Permanently");
            header("Location: https://" . $_SERVER['HTTP_HOST'] .$_SERVER['REQUEST_URI']);
            exit;
        }
        return false;
    }
      

    Для SSL требуется порт 443, поэтому в этом фрагменте кода, если не 443, то принудительно использовать https? и если 443, я предполагал, что он автоматически будет использовать https. Для чего постоянно используется moved?

  2. Код header("Location: .");

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

Комментарии:

1. FWIW, вам, вероятно, следовало задать два отдельных вопроса для этого, поскольку они совершенно разные. Вы получите более конкретные лучшие ответы для каждого.

2. И ни один из этих вопросов не касается PHP. Они касаются протокола HTTP (S) и его использования

Ответ №1:

Для SSL требуется порт 443

Не всегда. Это порт по умолчанию. HTTPS можно настроить для запуска на других портах. Лучший способ проверить:

 if ( !isset($_SERVER['HTTPS']) || strtolower($_SERVER['HTTPS']) != 'on') {

}
  

Для чего постоянно используется moved?

Из w3:

Запрошенному ресурсу был присвоен новый постоянный URI, и любые будущие ссылки на этот ресурс ДОЛЖНЫ использовать один из возвращенных URI

Другими словами, браузер должен помнить, что запрошенный URI перемещается, и запрашивать новый URI в любое время, когда пользователь снова запрашивает этот старый URI.

По умолчанию он должен оставаться на той же странице, разве это не избыточно?

Это не то, что делает код. Он перенаправляет на версию https, когда пользователь запрашивает версию, отличную от https.

Ответ №2:

Этот фрагмент кода перенаправляет клиента на использование https в случае, если он не используется https . 301 сообщает клиенту всегда использовать новое местоположение.

Перенаправление выполняется через Location заголовок, и вы лишь отчасти правы, страница та же, но соединение осуществляется через https , а не http . Если клиент уже подключен через https , перенаправление не происходит.

Ответ №3:

1) HTTP / 1.1 301 предназначен для информирования браузера и поисковых систем о том, что страница переместилась на https://example.com/thepage.php

2) Этот код используется для определенных страниц или сайтов, которым требуется SSL. Пример: корзины для покупок, банки, логины

Ответ №4:

По умолчанию HTTPS проходит через порт 443. Этот код перенаправляет пользователя, используя Location-header, на HTTPS, если пользователь посещает через обычный HTTP.

301 указывает браузеру всегда перенаправлять HTTP на HTTPS при последующих запросах по этому URL.

В псевдокоде он делает это:

 if (user is NOT visiting through HTTPS)
  redirect permanently to the same URL, but then through HTTPS
  

Так что нет, это не лишнее, поскольку, если кто-либо посетит эту страницу, используя HTTPS, тело if-блока не будет выполнено, и перенаправление не произойдет.

Ответ №5:

Прежде всего, функция делает то, что вы думаете.

Давайте рассмотрим каждый из тех, о которых вы хотите узнать больше:

 header("HTTP/1.1 301 Moved Permanently");
  

Это задает код состояния HTTP-ответа. Код: 301 . Сообщение: Moved Permanently . 301 является постоянным перенаправлением, это просто указывает браузеру (HTTP-клиенту) в следующий раз использовать новый адрес напрямую вместо запрошенного.

Новый адрес указывается с Location: заголовком.

 header("Location: .");
  

Этот код — просто неправильный код. Не ждите, что это сработает. Я предполагаю, что кто-то хотел снова перенаправить на ту же страницу, но это не работает таким образом. За A Location: должен следовать абсолютный URL-адрес, это относительный URL-адрес, и он не будет работать. Абсолютные URL-адреса всегда начинаются с http:// или https:// и содержат имя хоста.