Հարաբերական վերահասցեավորման հետևում վստահված սերվերի միջով
Լուծեք հարաբերական Location-ը ընթացիկ նպատակային URL-ի նկատմամբ՝ վստահված սերվերի հասցեն դուրս թողնելով URL-ի լուծումից։
Վստահված սերվերի միջով ստացված պատասխանը կարող է վերադարձնել հարաբերական 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-ի կառուցմանը, թե դրանից հետո փորձված կապին։