Меня действительно смущает, сколько раз мне следует кодировать URL-адрес, когда он задается как значение в строке запроса, поскольку мы знаем, что браузер имеет собственный процесс кодирования. Вот сценарий:
- Я хочу перенаправить в другое место, куда я хочу передать предыдущий URL:
Примечание: текущий URL-адрес
http://localhost:8081/CostMonitoring/MainMenu.aspx?Option=AllCE
Метод A (без encodeURIComponent()
):
window.location = 'CostEstimateApproval.aspx?CEMID=40' +
'&ToStatus=1CE'+
'&PrevURL=' + window.location;
Я получаю это в адресной строке
http://localhost:8081/CostMonitoring/CostEstimateApproval.aspx?CEMID=40&ToStatus=1CE&PrevURL=http://localhost:8081/CostMonitoring/MainMenu.aspx?Option=AllCE
без encodeURIComponent()
, все работает нормально, и значение Request.Querystring("PrevURL")
на принимающей странице равно
http://localhost:8081/CostMonitoring/MainMenu.aspx?Option=AllCE
что правильно.
Метод B (с encodeURIComponent()
):
window.location = 'CostEstimateApproval.aspx?CEMID=40' +
'&ToStatus=1CE'+
'&PrevURL=' + encodeURIComponent(window.location);
с помощью этого метода я получаю это в адресной строке:
http://localhost:8081/CostMonitoring/CostEstimateApproval.aspx?CEMID=40&ToStatus=1CE&PrevURL=http%3A%2F%2Flocalhost%3A8081%2FCostMonitoring%2FMainMenu.aspx%3FOption%3DAllCE
и значение Request.Querystring("PrevURL")
на принимающей странице равно
http://localhost:8081/CostMonitoring/MainMenu.aspx?Option=AllCE
, который также правильно декодируется.
Мои вопросы:
Должен ли я кодировать URL-адрес как значение? Будет ли это избыточно, если я закодирую его, а браузер закодирует снова?
или я должен позволить браузеру закодировать его для меня? Если я разрешу браузеру, будет ли путающая страница перепутана со значением URL-адреса как значения с реальным значением URL-адреса? Пожалуйста, рассмотрите этот пример:
http://www.domain.com/newpage.aspx?SameName=DifferentValue&PrevURL=http://www.domain.com/oldpage.aspx?SameName=DifferentValue&PrevURL=http://www.domain.com/anypage.aspx
Как вы можете видеть, оба URL-адреса (реальный URL-адрес и URL-адрес как значение), если они не закодированы, имеют одно и то же имя данных, равное SameName
. Как принимающая сторона справляется с этим? или HTTP-сервер?
Заранее спасибо!