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

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

0 голосов
/ 10 октября 2011
  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, я предположил. Для чего используется постоянно перемещенный?

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

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

Ответы [ 5 ]

2 голосов
/ 10 октября 2011

SSL требует порт 443

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

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

}

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

С w3 :

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

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

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

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

1 голос
/ 10 октября 2011

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

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

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

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

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

header("Location: .");

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

1 голос
/ 10 октября 2011

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

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

1 голос
/ 10 октября 2011

HTTPS проходит через порт 443 по умолчанию. Этот код перенаправляет пользователя с помощью заголовка Location на 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 не будет выполнено, и перенаправление не произойдет.

1 голос
/ 10 октября 2011

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

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

...