Как лучше отслеживать то, откуда на страницу пришел клиент?

durka82

Чтобы перенаправлять его соответственно...
Пока интересует определение русский/английский.
Мб есть уже готовые разработки на этот счет?

maggi14

Поле Referer заголовка HTTP-запроса

tokuchu

Наверное он имеет в виду всё же source IP.

durka82

А что это такое?

Marinavo_0507

Если ты хочешь определить, на каком языке показывать контент, то браузеры посылают соответствующую инфу в Accept-Language

durka82

Именно.
На клиенте это можно будет сделать?

maggi14

Клиенты-то эту инфу и посылают

durka82

У клиента загружается страничка.
Можно в ней прописать код, который определит значение этого поля и сделает редирект в зависимости от него?
Или это только на сервере можно сделать?

maggi14

Короче, может ли клиент сам определить свои настройки?

evgen5555

HTTP_HEADERS вроде во всех языках есть, и под CGI, и под модули.

evgen5555

Гугл, кстати, с факультетских тачек на ВМК отправляет на http://www.google.de

sergey_m

Гугл определяет не по заголовкам клиента, а по IP блоку. Почему-то все новые блоки он считает в .de. Если написать им письмо, то они быстро исправляют.

durka82

Я нашел в нете это и написал на его основе следующее:

var lang = "ru";
var ul = (navigator.userLanguage?navigator.userLanguage.toLowerCase:"").indexOf(lang) >= 0;
var sl = (navigator.systemLanguage?navigator.systemLanguage.toLowerCase:"").indexOf(lang) >= 0;
var ll = (navigator.language?navigator.language.toLowerCase:"").indexOf(lang) >= 0;
var bl = (navigator.browserLanguage?navigator.browserLanguage.toLowerCase:"").indexOf(lang) >= 0;
location.replace(ul || sl || ll || bl ? "ru.htm" : "en.htm");


Под ИЕ и под Мозиллой оно вроде как работает.
А вот под Оперой не хочет - у нее используемые мною переменные либо не определены, либо стоят в "en".
Хотя в настройках у меня стоит русский

maggi14

Потому что это лажа. Есть один и только один надежный способ узнать, на каком языке клиент предпочитает общаться: это читать на серверной стороне заголовки HTTP-запроса. В данном случае - поле Accept-Language. Как уже написал Gadfather.

durka82

А если Accept-Language передается клиентом, то почему нельзя узнать его же на самом клиенте
Откуда клиент берет этот Accept-Language? По IP компа что ли?
И что делать, если использование серверного программирования невозможно?

maggi14

Если серверное программирование невозможно, тады ой. Делай скриптами.
> А если Accept-Language передается клиентом, то почему нельзя узнать его же на самом клиенте
можно. Но каждый броузер делает это по-разному, с чем ты уже столкнулся. Хочешь - пиши отдельные скрипты под четыре-пять популярнейших броузеров.

durka82

Самое прикольное, что в Опере оно тоже работает, если страница выложена в вебе
но не работает, если пробовать локально

durka82

А теперь опять не работает
Мб у меня опера глючит - я ее пару месяцев как не обновлял

durka82

Все-таки, почему все броузеры на сервер выдают правильную информацию о своей языковой принадлежности, а локально ведут себя как хотят?

artimon

На сервер они посылают стандартный http заголовок, а но локальное определение своей языковой принадлежности никаких стандартов нет.

durka82

Тогда откуда утверждение, что локально определять язык менее надежно, чем на сервере, который принял и прочитал http-заголовок, переданный этим же самым броузером?

artimon

Так у тебя ж у самого возникли проблемы с локальным определением языка.
А на сервере всё просто. Либо клиент (браузер) отправил в http запросе желаемый язык, либо нет. И никаких проблем.

durka82

То есть передача данных на сервер для броузера - стандарт, который они неуклонно выполняют?

maggi14

Post deleted by

sergey_m

Иначе они не зайдут ни на один сайт.
Не надо сгущать краски %)

artimon

Нет конечно.
Но сейчас очень трудно найти браузер, который не отдаёт желаемый язык. Другое дело, что далеко не у всех он настроен правильно, т.е. какая-нибудь Opera по умолчанию пишет желаемым языком английский, а у большинства юзеров руки не доходят поменять это умолчание.

durka82

Ты про отдачу на сервер или на клиент?
Или про оба варианта?

artimon

Про отдачу на сервер.
Ты вообще понимаешь как происходит процесс работы сервера?

durka82

То есть, если броузер настроен правильно, то на сервер всегда будет отдана правильная информация, а локально не обязательно?
Ты вообще понимаешь как происходит процесс работы сервера?

Считал, что понимаю, но сейчас уже не уверен...

maggi14

Нет, просто броузер вообще не обязан предоставлять локальным скриптам информацию о языке. Собственно, он даже не обязан эти скрипты поддерживать. Кстати, а как ты собираешься работать с теми, кто отключает скрипты?

durka82

Страница, которая делает редирект - кроме того обычная страница с предложением выбрать нужную версию сайта.
Если скрипты не сработают - у чела будет выбор
Оставить комментарий
Имя или ник:
Комментарий: