|
|
Wednesday, May 28th, 2008
| |
1:08 am - Birthday
|
|
| |
|
|
| Thursday, May 15th, 2008
| |
12:09 pm - Музыкальная пауза
|
|
| Tuesday, May 13th, 2008
| |
8:15 pm - Redirect after POST
|
Немного о тонкостях протокола HTTP.
Q: Нужно ли делать редирект после обработки данных, полученных при отправке формы методом POST? Q: Какой статус выдавать в редиректе — 302, 303 или 307?
A: По логике редирект надо выдавать всегда, когда мы хотим избежать двойной отправки данных при нажатии в браузере на reload. Иногда двойная отправка бывает полезной (при реализации визардов), но в большинстве случаев — потенциально опасна (например, при случайном нажатии F5 в банковской системе после транзакции произойдет повторное списание денег со счета).
Большинство существующих веб-приложений выдает статус 302 (Found), и большинство юзер-агентов именно этот статус воспринимают как автоматическое перенаправление на другой урл.
Если вы внимательно прочитаете RFC 2616, то обнаружите, что юзер-агенту категорически запрещается автоматически редиректить пользователя на этот урл:
If the 302 status code is received in response to a request other than GET or HEAD, the user agent MUST NOT automatically redirect the request unless it can be confirmed by the user[…]
К сожалению, большинство приложений исторически забили на стандарт, и обрабатывают этот статус так же, как 303 (почему к сожалению — объясню ниже).
Для автоматического перенаправления пользователя на новый урл как раз и предназначен статус 303 (See Other):
This method exists primarily to allow the output of a POST-activated script to redirect the user agent to a selected resource.
Статус 307 (Temporary Redirect) отличается от 303 по смыслу: если 303 указывает на новый урл, то 307 — на альтернативный, тот урл, по которому рекомендуется обращаться в дальнейшем вместо первоначального:
The requested resource resides temporarily under a different URI.
Этот статус используется редко, и опять же, стандарт запрещает автоматический переход в ответ на запрос методом POST, поэтому забудем о нем.
Теперь, о самом главном. Все бы было хорошо, если бы не особенности реализации некоторых браузеров. Вот тут мы сталкиваемся с такими проблемами:
- некоторые старые юзер-агенты так и не научились понимать HTTP/1.1, в котором отсутствует статус 303 (предыдущая версия стандарта HTTP/1.0 описана в RFC 1945, принятом на год раньше RFC 2068, где этот статус уже был, но пока не было 307),
- некоторые юзер-агенты все-таки свято соблюдают стандарты, и поэтому выдают предупреждение в ответ на редирект 302 после отправки формы методом POST,
- некоторые юзер-агенты еще и интерпретируют стандарты по-своему, например, после выдачи редиректа они повторяют отправку данных через POST (!) на новый урл, вызывая непредсказуемое поведение.
Хорошая новость в том, что таких браузеров абсолютное меньшинство, и в основном замечены они были на просторах вапа, среди производителей мобильных девайсов.
Но все-таки, мы ведь хотим предоставить качественный сервис всем пользователям без исключения?
Одной из особенностей статуса 303 является то, что по стандарту урл, на который осуществляется переход, должен запрашиваться по протоколу GET:
The response to the request can be found under a different URI and SHOULD be retrieved using a GET method on that resource.
Можно воспользоваться этой особенностью, а можно придумать более универсальное решение (тем более глагол SHOULD в rfc вносит не строго обязательный характер):
- проанализировать версию HTTP протокола, которую запросил пользователь,
- отказаться от статуса 302 для клиентов с версией 1.1 в пользу статуса 303,
- всегда добавлять в урл для редиректа параметры, позволяющие предотвратить непредсказуемую повторную отправку при редиректе (например, в чате, при редиректе «на самого себя»).
Кроме того, стандартом настоятельно рекомендуется сопровождать тело редиректов документом со ссылкой на перенаправляемую страницу, а для метода POST желательно добавить пояснение: какие действия нужно выполнить, чтобы, перейдя по ссылке, повторить запрос. Это нужно для совместимости между старыми, ошибочными, или неполными реализациями протокола.
Пару слов про другие статусы.
301 (Moved Permanently) — подразумевается, что для одного и того же запроса выдается сервером постоянно, всегда, вне зависимости от каких-либо других факторов, в отличие от 307 — который может быть выдан в зависимости от некоторых внешних условий. Этот статус в большинстве юзер-агентов полностью не поддерживается, браузеры не подменяют после редиректа ссылки так, как это следовало бы делать по стандарту, и скорее всего, обрабатывают его так же, как и 302.
304 (Not Modified) связан с кешированием, об этих особенностях постараюсь рассказать в следующий раз.
300 (Multiple Choices) предназначен для выбора одного урла из нескольких альтернативных, в жизни реального применения я не встречал.
305 (Use Proxy) предназначен для принудительного направления запроса через прокси, на практике не встречал.
306 (Unused) — уже не используется.
Продолжение следует.
|
|
(3 comments | comment on this)
|
| Tuesday, May 6th, 2008
| |
12:42 am - Открытия
|
Узнал, что пшено — это вовсе не крупа из пшеницы.
Из пшеницы делают манку. А пшено делают из просо.
Могли бы вы такое подумать? Паранормальное.
|
|
(2 comments | comment on this)
|
| Sunday, May 4th, 2008
| |
7:59 am - Ководство
|
|
| Saturday, February 23rd, 2008
| |
11:11 pm - ncurses: illegal option passed to gnu-ar
|
Вот уже больше полугода не получалось собрать ncurses-5.6-r2 с поддержкой unicode из-за ошибки:
x86_64-pc-linux-gnu-ar: illegal option -- .
Проблема оказалась в кешировании пераметров ar, непонятно, почему ее до сих пор так и не пофиксили. Вот мое решение:
# AR_OPTS="rv" emerge ncurses
На форуме же предлагают просто отключить confcache.
|
|
(1 comment | comment on this)
|
| Monday, February 11th, 2008
| |
5:31 pm - Прием платежей =)
|
|
| Sunday, February 10th, 2008
| |
3:18 am - Oxygen Bar
|
О, оказывается в Москве есть кислородные бары! )
Найти их практически невозможно, но теперь я знаю хотя бы один — в аэропорту Домодедово. Списочек пополню со временем, если где-то еще их обнаружу.
Если вдруг полетите куда-нибудь или будете кого-то встречать — обязательно найдите бар O2, и попробуйте вкусняшный и полезный кислородный коктейль.
Вкус помню с дествтва, коктейль в санатории нам давали. Постоянно хотелось добавки, но ее никогда не наливали =)
А если вы при этом будете немного подшофе — то приготовьтесь к сильному опьянению, кислород усиливает действие алкоголя )
PS: говорят, еще есть такие бары в рамсторе на речнике, и в формуле кино на можайке.
|
|
(2 comments | comment on this)
|
| Tuesday, February 5th, 2008
| |
11:43 am - Редкая музыка
|
Один из редких хитов восьмидесятых, вот, достал и делюсь:
Аракс — Мемуары (3155 KB)
Послушайте, вам обязательно понравится =) Если надо — выложу весь альбом.
А кто без помощи гугла угадает, из какого совеццкого фильма этот саундтрек — получит приз )
|
|
(5 comments | comment on this)
|
| Thursday, January 24th, 2008
| |
1:14 am - Задачка
|
|
В каких случаях сумма, соответствующая ста рублям без учета десятипроцентной комиссии, равняется сумме в сто рублей без учета десятипроцентного налога? =)
|
|
(5 comments | comment on this)
|
| Sunday, December 2nd, 2007
| |
6:38 pm - Мой любимый файловый менеджер
|
О боже, неужели это случилось? =) Far Manager to Become Opensource!
Жаль, что я этого так и не дождался, поэтому и новость-то заметил с большим опозданием.
Когда я только подсаживался на наркотики линукс, фар -- это единственное, чего мне очень и очень не хватало. И я до сих пор не представляю себе жизни под виндой без него.
Но идет время, и сейчас уже стало понятно, что мне уже не нужен этот навороченный, функциональный, продвинутый, и бесспорно, самый лучший файловый менеджер.
Просто я познал дао другие, более правильные и мощные инструменты.
|
|
(3 comments | comment on this)
|
| |
4:02 am
|
Завет (2007)

В прокат в России он вышел в прошлом месяце (премьера, кажется, была эти летом, на Московском Кинофестивале). А я посмотрел сегодня на DVD.
В кратце, сюжет таков: деревенский мальчик по имени Цане (Урош Милованович) по наставлению деда отправляется в город, чтобы найти себе невесту. Но там он встречает не только свою любовь -- сексуальную девушку Ясну (Мария Петрониевич), но и бандитов, с которыми предстоит нелегкая борьба (босса играет Мики Манойлович, как же без него)
Я, как поклонник придурковатых фильмов Эмира Кустурицы, считаю, что это фильм -- один из самых удачных (читай: охренительных =)
Если вы любите настоящее кино -- посмотрите "Завет" обязательно.
|
|
(3 comments | comment on this)
|
| Saturday, November 24th, 2007
| |
12:12 pm - Mist, The (2007)
|

До сих пор много эмоций, поэтому развернутой рецензии не будет (not emo).
Мгла. Фильм Фрэнка Дарабонта. По роману Стивена Кинга "Туман". Премьера этого четверга. Впечатляющий фильм. Всякие сайлент хиллы отдыхают. Концовка фильма -- не такая как в книге. Но очень даже по-кинговски (не ждите хэппи-энда, ага). Будьте готовы к тому, чтобы пережить конец вместе с героем. Всех не убили. И не сожрали монстры. Все закончилось намного хуже. Полная жесть.
Моя оценка фильма -- пять баллов. Сходите обязательно, кто еще не сходил. Не пожалеете.
|
|
(comment on this)
|
| Thursday, October 4th, 2007
| |
4:51 pm - Растровые технологии
|
|
| Thursday, August 30th, 2007
| |
7:18 pm - Ищем талантливых программистов!
|
|
| Friday, August 24th, 2007
| |
6:51 pm - Google
|
|
| Wednesday, July 4th, 2007
| |
8:20 pm - Windows -- какой он?
|
Какой Windows Вы используете?
Странный какой-то вопрос (особенно режет слух "какой" и "используете"), проголосовал за "Вообще не пользуюсь Windows" ("не использую", один раз использовал, и выкинул). Как оказалось, этот вариант самый популярный.
|
|
(1 comment | comment on this)
|
| Thursday, June 7th, 2007
| |
12:23 pm - Linkin Park
|
Друзья мне подкинули вчера пригласительный билет на Linkin Park. Насколько мне стало известно, всего их было продано 16 тысяч. Поскольку кроме мобилы у меня ничего с собой больше не было, пришлось снимать на нее. Если хотите, общий план фанатов и зрителей:
 hall.3gp (245K)
Вот столько народу пришло в Олимпийский. Говорят, что билеты продавали и по 10, и по 20 штук! На входах тянулись длинные очереди. Нам же повезло — пригласительные достались нахаляву, и вовнутрь мы свободно попали через VIP-подъезд.
На разогреве играли Jane Air, но все кричали «ЛИНКИН ПАРК». Кто-то вроде даже кинул в Бурзу яйцом, но тот мастерски увернулся вместе с микрофонной стойкой :)
После саундчека линкины всетаки появились на сцене и взорвали зал. А вот так зал выглядел во время песенки From The Inside:
 from_teh_inside.3gp (838K)
Это тысячи зажигалок и мобильников. Красиво.
Мы устроились в фанзоне танцпартера, возле сцены.
 numb.3gp (2.4M), numb_full.3gp (3.8M)
По правде говоря, Честер выкладывался по полной. Но почему-то аццкого драйва я не ощутил. Да и слэма практически не было.
 crawling.3gp (1.3M), crawling_full.3gp (3.2M)
Я надеялся что звук будет получше. На мой взгляд, не хватало басов, пробирающих насквозь, и высоких. Последние разве что компенсировались криками малолетней девочки, которая орала ЛИИН-КИИН-ПААРК! и визжала так, что уши закладывало.
Но все равно, они отожгли.
 close.3gp (2.5M)
Есть еще видео, но его сейчас некогда разгребать. Думаю, на днях на фансайтах появится контент в более хорошем качестве. По телику, к сожалению, концерт показывать не будут, хотя это собирался сделать организатор — телеканал A1.
|
|
(2 comments | comment on this)
|
| Monday, May 28th, 2007
| |
3:04 pm - Мастерхост
|
А в Москве жара аццкая. Если gismeteo не врет, то 32 градуса в тени. Но по-моему врет, потому что по мне — так все сорок. И завтра еще больше обещает.
А мастерхост перегрелся и начал рандомно отключать сервера. Сказали, что пока температура не нормализуется — не включат. Каким нехорошим словом их правильно обозвать?
|
|
(1 comment | comment on this)
|
| |
2:32 pm - Днюха!
|
Да, кстати! У меня же сегодня Днюха! При помощи калькулятора я подсчитал, что мне уже 23, а в hex'e — еще 17! Поздравляйте тут, в предыдущем посте про речку-вонючку — не надо! :)
Обещаю расти большой, слушаться маму, и писать побольше в ЖЖ, ну совсем нету на это времени сейчас :(
|
|
(18 comments | comment on this)
|
|
|
|
|