Сколько раз должна быть закодирована строка URL-адреса как значение-в-запросе? - PullRequest
0 голосов
/ 30 июля 2011

Меня действительно смущает, сколько раз мне следует кодировать 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 

, который также правильно декодируется.

Мои вопросы:

  1. Должен ли я кодировать URL-адрес как значение? Будет ли это избыточно, если я закодирую его, а браузер закодирует снова?

  2. или я должен позволить браузеру закодировать его для меня? Если я разрешу браузеру, будет ли путающая страница перепутана со значением 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-сервер?

Заранее спасибо!

1 Ответ

2 голосов
/ 30 июля 2011

Вы должны использовать encodeURIComponent (один раз), так как вы кодируете параметр url.

Как вы отметили в конце вашего вопроса, невозможность кодировать URL с помощью encodeURIComponent будет проблематичнойесли ваш URL-адрес включал, например, &.

Обратите внимание, что ваш метод A работал только потому, что ваш пример prevUrl несколько просто сформирован, например, он не включает второй параметр URL-адреса.

...