Отговор, получен през прокси, може да върне относителен Location:

Location: ../new/

Съвременният HTTP позволява URI референция тук. Разрешете я спрямо URL, който е създал отговора. Ако този URL е бил https://docs.example/catalog/old/, референцията по-горе сочи към https://docs.example/catalog/new/. Името на хоста на проксито не е основата.

За обикновени заявки с Python urllib използвайте неговия манипулатор за пренасочване, вместо да свързвате низове около крайната точка на проксито:

opener = build_opener(ProxyHandler({
    "https": "http://proxy.example:8080",
}))
with opener.open("https://docs.example/catalog/old/",
                 timeout=15) as response:
    final_url = response.geturl()

За тази заявка за публичен документ без удостоверяване на проксито HTTP кандидат от списъка с HTTP проксита може да замени примерната крайна точка, когато маршрутът е разрешен. Класовете идват от urllib.request. Нормалният му манипулатор следва поддържаните пренасочвания в своите граници. final_url описва крайния URL на ресурса, а не посредника, използван за достигането му.

Първо разрешете, после изберете следващия маршрут

Пренасочването може да промени хоста или схемата на дестинацията. Затова политика на проксито, базирана на дестинацията, трябва да оценява и този нов URL. Маршрут, който е работил за първия хост, може да не е маршрутът за следващия.

Когато реализирате сами обработката на пренасочвания, използвайте разрешаване на URI референция с обработка на точкови сегменти. Запазете правилата за метода на действителния код на състоянието и наложете ограничение за пренасочвания. Добавянето на Location към име на хост не е заместител на този алгоритъм за разрешаване.

Ако пренасочването се провали, запазете заявения URL, статуса на отговора, стойността на Location и разрешения следващ URL. Тези четири стойности обикновено показват дали проблемът е в изграждането на URL, или във връзката, опитана след това.

Подобни статии