Как перенаправить запрос сообщения HTTP

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

Предположите, что у Вас есть машина, которая принадлежит компании с несколькими подразделениями, которые отражаются в доменной структуре. Ваша машина имеет имя machine.businessunit1.company.com, т.е. принадлежит businessunit1.company.com, который является Вашим основным суффиксом DNS.

Подразделение является очень крупным и управляет несколькими серверами DNS (dns1.businessunit1.company.com, dns2.businessunit1.company.com) и также например, веб-сервер под названием www.businessunit1.company.com.

Если Ваша машина теперь захочет разрешить www.businessunit1.company.com, то она будет первый поиск локальный кэш DNS. Т.е. Ваша машина сама помнит записи DNS, которые Вы недавно запросили, потому что вероятно, что Вам будут нужны результаты снова, например, когда Вы нажмете на ссылку на веб-сайте. Я не знаю, видите ли Вы то, что кэшировала Ваша машина, но существует команда для удаления всего, что Ваша машина помнила (в Windows): ipconfig /flushdns

Если Ваша машина не будет помнить ответ, то она спросит - как я ранее прокомментировал - сервер (серверы) DNS, которые настроены для Вашего сетевого адаптера. Скорее всего, Ваши администраторы настроят dns1.businessunit1.company.com и dns2.businessunit.company.com. Причина этого состоит в том, что Вы хотите свой запрос DNS, которому отвечают быстро без большого трафика. Если dns1.businessunit1.company.com получит Ваш запрос для www, то он ответит на это, потому что это авторитетно для зоны *.businessunit1.company.com. Авторитетный означает, что этот сервер знает единственный корректный ответ для всех имен DNS, заканчивающих "businessunit1.company.com".

Теперь предположите, что Вы имеете, запрашивает www.businessunit2.company.com. Ваша машина, если это не делает rememember сам ответ, снова спросит dns1.businessunit1.company.com. Теперь, существует много возможностей: во-первых, Ваши администраторы могли бы быть умными, и они предвидели, что вероятно, что люди от businessunit1 также захотят получить доступ к машинам в businessunit2 часто. Поэтому они настроили dns1.businessunit1.company.com для содержания копии данных из dns1.businessunit2.company.com. dns1.businessunit1.company.com может использовать эту копию для ответа на вопрос. Во-вторых, Ваши администраторы, конечно, скажут dns1.businessunit1.company.com, что сделать, когда это не знает ответ на Ваш вопрос: это спрашивает другой сервер DNS. Вероятно, это - dns1.company.com, но это мог также быть любой другой сервер DNS, включая корневые серверы.

Как лежится сказано, dns1.businessunit1.company.com является бесплатным помнить любой ответ, который это получило от других серверов DNS. Т.е. если Вы просите www.google.com, этому, возможно, придется спросить некоторый другой сервер, но если Вы спрашиваете во второй раз, когда это помнит ответ и говорит Вам непосредственно.

Можно в основном видеть, где ответ DNS от того, когда Вы вводите, например. nslookup www.google.com. Вывод скажет Вам сервер и является ли это авторитетным ответом или нет. Скорее всего, это будет неавторитетно, потому что этому не отвечают серверы DNS Google, которые ответственны за все имена DNS, заканчивающие "google.com".

1
задан 5 June 2013 в 17:58
2 ответа

Looks like Apache config? It's a good idea to specify things like that. The tags confirm it though.

That config only runs when they connect on port 443, so it can't redirect from HTTP.

You can't do a 30[12] redirect in response to a POST request and keep the arguments unless you convert the request to a GET and write the arguments into the URL. Not really recommended.

You can proxy the request, but I'm not sure that solves your problem.

If the user has already submitted data via POST over an unencrypted connection, and you care about the encryption, you're probably best to let that request break anyway, so it gets noticed and fixed. You should be fixing your form target, and also making sure that the form itself (or the page with AJAX in it or whatever) is sent to the user over HTTPS.

UPDATE

Given that shawsy has said that the problem is that The browser cannot make HTTPS connections to the server, a redirect is definitely not what's wanted. Rather you want to proxy the request:

<VirtualHost 10.1.2.91:80>
  # http://httpd.apache.org/docs/2.2/mod/mod_proxy.html#proxypass
  ProxyPass /GladQE/link https://glad-test.com/GladQE/link.do
  ProxyPass /GladQE/retrieve https://glad-test.com/GladQE/retrieve.do
</VirtualHost>

You could alternatively do it with mod_rewrite and RewriteRule.

There are some extra issues to work out if you're changing the domain name, but I think that's not the case here.


Just as an aside, I personally don't like putting host names or IP addresses anywhere except in the server's /etc/hosts file. If you use names in the hosts file like 'web' and 'mysql', which locate services rather than machines, and you refer to those in your apache and other files, then you can move configuration between machines much more easily, knowing that you only have to go over what's in the hosts file.

2
ответ дан 3 December 2019 в 18:53

Для сохранения метода можно использовать 307 перенаправление. Из Википедии:

В этом случае запрос должен быть повторен с другим URI; однако, будущие запросы все равно должны использовать оригинальный URI. В отличие от исторически реализованного метода 302, метод запроса не может быть изменен при перевыпуске оригинального запроса. Например, POST-запрос должен быть повторен с помощью другого POST-запроса.

1
ответ дан 3 December 2019 в 18:53

Теги

Похожие вопросы