Как я могу сделать перенаправление HTTP в C ++ - PullRequest
0 голосов
/ 29 ноября 2009

Я делаю HTTP-сервер на C ++, и я замечаю, что Apache работает так, что если вы запрашиваете каталог без добавления косой черты в конце, Firefox все еще почему-то знает, что это каталог, который вы запрашиваете (что кажется невозможным для Firefox, поэтому я предполагаю, что apache выполняет редирект).

Это предположение верно? Проверяет ли apache, что вы запрашиваете каталог, а затем перенаправляет http на запрос с косой чертой? Если это так, как работает Apache, как я могу реализовать это в C ++? Спасибо всем, кто отвечает.

Ответы [ 5 ]

3 голосов
/ 29 ноября 2009

Определите, представляет ли ресурс каталог, если это так, ответьте:

HTTP/1.X 301 Moved Permanently
Location: URI-including-trailing-slash

Использование 301 позволяет агентам пользователя кэшировать перенаправление.

1 голос
/ 29 ноября 2009

Предположение верное и убедитесь, что ваш ответ включает заголовок Location на URL, который разрешает распечатку каталога, и допустимую первую строку 301/302. Это не вопрос C ++, это скорее вопрос протокола HTTP, так как вы пытаетесь написать HTTP-сервер, как предлагает один из других постов, прочитать RFC.

1 голос
/ 29 ноября 2009

Серьезно, это не должно быть проблемой. Предложения о том, как поступить:

  • Получите исходный код для Apache и посмотрите, что он делает
  • Создайте отладочную сборку Apache и в этом случае пошагово выполняйте код в отладчике; проверьте, какие части кода запускаются.
  • Установите Wireshark (инструмент сетевого анализа), Live HTTP Headers (расширение Firefox) и т. Д. И посмотрите, что происходит в сети
  • Прочитайте соответствующие RFC для HTTP - которые, по-видимому, в любом случае следует держать под подушкой, если вы пишете сервер.

Как только вы это сделаете, должно быть очевидно, как это сделать. Если вы не можете делать такие вещи, вам не следует пытаться разработать веб-сервер на C ++.

1 голос
/ 29 ноября 2009

Если бы вы хотели это сделать, вы бы:

  1. статистика вызовов по пути
  2. определите, что это каталог
  3. отправить необходимый HTTP-ответ для перенаправления

Я совсем не уверен, что тебе нужно это сделать. Установите дополнение Firefox для веб-разработчиков, чтобы точно узнать, что идет вперед и назад.

0 голосов
/ 29 ноября 2009

Вы должны установить Fiddler и наблюдать HTTP-заголовки, отправленные другими веб-серверами.

На ваш вопрос невозможно ответить точно без более подробной информации, но вы хотите отправить код состояния HTTP 3xx с заголовком Location.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...