Theo dõi chuyển hướng tương đối qua proxy
Phân giải một Location tương đối theo URL đích hiện tại, giữ địa chỉ proxy ngoài quá trình phân giải URL.
Phản hồi nhận được qua proxy có thể trả về một Location tương đối:
Location: ../new/
HTTP hiện đại cho phép một tham chiếu URI ở đây. Hãy phân giải nó theo URL đã tạo ra phản hồi. Nếu URL đó là https://docs.example/catalog/old/, tham chiếu ở trên xác định https://docs.example/catalog/new/. Tên máy chủ của proxy không phải là cơ sở.
Với các yêu cầu Python urllib thông thường, hãy dùng trình xử lý chuyển hướng của nó thay vì nối chuỗi quanh điểm cuối proxy:
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()
Với yêu cầu tài liệu công khai không có xác thực proxy này, một ứng viên HTTP từ danh sách proxy HTTP có thể thay thế điểm cuối ví dụ khi tuyến đường được phép. Các lớp đến từ urllib.request. Trình xử lý thông thường của nó theo các chuyển hướng được hỗ trợ trong giới hạn của nó. final_url mô tả URL cuối cùng của tài nguyên, không phải trung gian được dùng để đến đó.
Phân giải trước, rồi chọn tuyến tiếp theo
Chuyển hướng có thể thay đổi máy chủ hoặc lược đồ đích. Vì vậy chính sách proxy dựa trên đích cũng phải đánh giá URL mới đó. Một tuyến đã hiệu quả với máy chủ đầu tiên có thể không phải tuyến cho máy chủ tiếp theo.
Khi tự triển khai xử lý chuyển hướng, hãy dùng phân giải tham chiếu URI có xử lý đoạn điểm. Giữ các quy tắc phương thức của mã trạng thái thực tế và đặt giới hạn chuyển hướng. Việc nối Location vào tên máy chủ không thay thế thuật toán phân giải đó.
Nếu chuyển hướng thất bại, hãy giữ URL đã yêu cầu, trạng thái phản hồi, giá trị Location và URL tiếp theo đã phân giải. Bốn giá trị đó thường cho thấy lỗi thuộc về việc dựng URL hay kết nối được thử sau đó.