0
<< предыдущая заметкаследующая заметка >>
14 февраля 2014
POST у разных провайдеров

На разных хостингах свои заморочки.

Например, на некоторых не работает авторизационный виджет loginza.ru
Почему же? А потому что старый формат виджета подразумевал, что он в какой-то момент бросает ваш браузер на некий заранее указанный файл ulogin_xd.html, передавая ему токен в хэше:
ulogin_xd.html#token:308ec1c45fa69f9285563e75b853b1ff75ac2005

Естественно серверная сторона хэша не видит — это чисто данные пользовательского браузера. Поэтому файлик ulogin_xd.html был чисто скриптовой и занимался единственно тем, что выстригал этот злосчастный хэш, переводил в более адекватную форму (GET-параметр) и передавал другому скрипту, который уже с ним разбирался:

<html><body><script>
var o=(''+window.location.hash).replace(/\#/g,'');
if(o!='' && o.split(':')[0]=='token') {
window.parent.location.href=(''+window.location).split('/ajax/ulogin_xd.html')[0]+'/login?loginza='+o.split(':')[1];
}
</script></body></html>

И это не я придумал, это Логинза, я лишь чуть усовершенствовал под свои нужды. Но с какого-то времени Логинза осознала, что эти хэши — полная и корявая хуйня. И решила передавать токен заодно и по протоколу POST. И хэшиком конечно тоже. И еще POST.

А теперь следите за руками. Лежит файлик ulogin_xd.html, и к нему приходит запрос по протоколу POST. Что дальше? По-разному. Серверу lleo.me в Канаде похуй, он просто выдает файлик. А, скажем, апач на моем домашнем сервере или на хультуре сходит с ума, ошибка 405. Мол, как это? Файлику .html пришел POST-запрос! Тревога!


Method Not Allowed
The requested method POST is not allowed for the URL /ajax/ulogin_xd.html.

Apache/1.3.37 Server at home.lleo.me Port 80


Теперь рассмотрим другой случай. На некоторых хостингах движок не ставился. Ну, то есть сначала минимальный комплект ставился как надо через minstall.php, а вот когда уже пришла пора залезть в /install и запустить полную установку, тут движок просто вис.

Проблема была сложна и потребовала трех ленивых попыток в течение месяца. Наконец сегодня победил. Итак, движки меж собой обменивались POST-запросами, и пример запроса выглядел (сильно упрощая) так:

POST /site_module/INSTALL.php HTTP/1.0
Host: hultura.ru
Referer: hultura.ru
Content-type: multipart/form-data, boundary
150e1ce5c7
Content-length: 363

[...]

На такой запрос большинство хостингов возвращало ответ, но некоторые не возвращали ничего (а еще кое-где у хостеров логи так устроены, что их пользователю не посмотриеть в реальном времени). Короче, выяснилось, что дело в строчке «Referer: hultura.ru», если ее убрать — все работает. Не спрашивайте меня, зачем она была нужна — не помню. Но главное не спрашивайте, почему хост hultura.ru, приняв по методу POST запрос и увидев в реферере себя же, сходил с ума и запрос сбрасывал.

Я так понимаю, что оба эти случая — вещи одного порядка, какая-то вселенская POST-паранойя.

<< предыдущая заметка следующая заметка >>
пожаловаться на эту публикацию администрации портала
архив понравившихся мне ссылок
Оставить комментарий


Include not found: `/home/www/lleo.me/blog/template/_reklamnaya_lirica.htm`