На сайте госзакупок появился заказ на «оказание услуг по осуществлению воздушных перевозок самолетами в 2012 году». В нем говорится, что ямальские власти хотят арендовать самолеты на 945 часов. Всего планируется использовать семь видов судов: Challenger-600 (с VIP-интерьером на 14 мест), CRJ-200 (50 мест), Ту-134 (с VIP-интерьером на 41 место), Boeing
Планируется, что эти суда должны будут доставлять чиновников в местные аэропорты (Надым, Новый Уренгой), другие регионы (Москва, Екатеринбург) и за границу. При этом самолеты должны базироваться в Салехарде, Тюмени и Москве (часть из них должны быть в полной готовности в двух аэропортах одновременно).
Пожалуй, самая пикантная деталь заказа — требования к меню, которое должно быть на борту. Для пассажиров VIP-класса в перечне горячих блюд 56 наименований: мясо «по-сицилийски», лосятина «по-старорусски», оленина тушеная с черносливом, семга «по-губернаторски» (с полным перечнем можно ознакомиться по ссылке). Пассажирам бизнес-класса предлагается пища попроще: курица в сливочном соусе с макаронами, жаркое по-домашнему, семга, запеченная с рисом.
Начальная стоимость контракта 448,5 млн руб. Конкурс состоится 17 февраля. Отметим, что консолидированный бюджет ЯНАО на 2012 год составляет 139 млрд рублей.
А я то все думаю, почему эти говнюки все такие толстые?!
Посмотрим, как лучше сделать, спасибо.
GET /go_links.php?%D1%80%D0%BE%D1%81%D1%81%D0%B8%D1%8F%D0%B1%D0%B5%D0%B7%D0%B4%D1%83%D1%80%D0%B0%D0%BA%D0%BE%D0%B2.%D1%80%D1%84 HTTP/1.1
Ваш веб-сервер отвечает "HTTP/1.1 302 Found" с заголовком:
Location: http://%D1%80%D0%BE%D1%81%D1%81%D0%B8%D1%8F%D0%B1%D0%B5%D0%B7%D0%B4%D1%83%D1%80%D0%B0%D0%BA%D0%BE%D0%B2.%D1%80%D1%84
Что по стандарту должен делать браузер с таким урлом? Правильно -- послать нахер, что он и делает. Поскольку по стандарту доменное имя не может содержать проценты. Хром и Опера, видимо, делают кое-что, не предписанное стандартом -- они автоматически распознают кодировку и делают urldecode(), а затем автоматом преобразуют в punycode. Эта их догадливость, конечно, похвальна, но по стандарту браузер не обязан так делать. Вот, Firefox и не делает.
Как лучше сделать -- я могу сказать как. В скрипте go_links.php делать декодирование GET-параметра в исходную строку-URL. Парсить URL на составные части и смотреть: если в хост части полученного URL есть символы, недопустимые в доменных именах, то преобразовывать хост в punycode, собирать обратно URL, и подставлять в таком виде в заголовок "Location".
Можно, конечно, просто завязаться на кириллицу в домене, но IDNA не ограничена кириллическими доменами. Есть уже арабские домены (с написанием в виде арабской вязи), есть китайские домены с иероглифами. Для 66 это вряд ли актуально, но если можно сделать универсально -- лучше сделать один раз и на века.
Редиректор отдает редирект РОВНО туда куда его попросили.
Твой запрос (заурлэнкоженый, с процентами) — генерирует именно браузер, например — фаерфокс. А Хром в гет передает ровно то, что в ссылке.
Т.е. изначальное твое утверждение "Вместо преобразования в punycode, доменное имя urlencode'ится." — не верно. На 66.ру в данный момент просто ничего не делается — ни пуникод, ни урлэнкод.
Я понятно объясняю? Про то что наличие проблемы я не отрицаю и обещаю, что её поправят — я уже написал.
GET /go/%D1%80%D0%BE%D1%81%D1%81%D0%B8%D1%8F%D0%B1%D0%B5%D0%B7%D0%B4%D1%83%D1%80%D0%B0%D0%BA%D0%BE%D0%B2.%D1%80%D1%84 HTTP/1.1
На что сервер выдает редирект:
Location: http://www.66.ru/go_links.php?ÑоÑÑиÑбездÑÑаков.ÑÑ
(не знаю правильно ли отобразится сейчас эта строка, там после вопросика идёт текст, судя по всему UTF-8 в CP-1251 кодировке)
Мой браузер ещё раз урлэнкодит строку после вопросика, и получается:
GET /go_links.php?%D1%80%D0%BE%D1%81%D1%81%D0%B8%D1%8F%D0%B1%D0%B5%D0%B7%D0%B4%D1%83%D1%80%D0%B0%D0%BA%D0%BE%D0%B2.%D1%80%D1%84 HTTP/1.1
То, что происходит с этого места, я написал выше. Да, мой Firefox урлэнкодит кириллическую часть пути и GET-параметра в URL. В общем-то справедливо. Если бы он этого не сделал, ваш веб-сервер имел бы полное право ответить ему 400 Bad Request, а так есть хоть какой-то шанс на успех.
Опера и Хром скорее всего поступают точно так же (тоже урлэнкодят кириллицу), просто на последнем шаге, когда идёт редирект уже на http://%D1%80%D0%BE%D1%81%D1%81%D0%B8%D1%8F%D0%B1%D0%B5%D0%B7%D0%B4%D1%83%D1%80%D0%B0%D0%BA%D0%BE%D0%B2.%D1%80%D1%84 они сначала делают rawurldecode.
Спасибо, буду ждать исправления ошибки. Правда, о ней я уже сообщал Алексею Степанову несколько месяцев назад. Видимо забыли.
А в твоем? :)