Вход на сайт
генерировать html на стороне клиента
17.04.15 20:38
Последний раз изменено 17.04.15 20:39 (natuerlich blond)
Можно ли внести изменения в html-файл до того, как DOMContentLoaded?
Процесс такой: при загрузке страницы на сервере генерируется html-код (могут быть разные элементы). Клиент через ajax-Request получает этот код и вставляет в страницу.
Очень нужно, чтобы этот html-snippet добавлялся до загрузки контента, т.к. должен читаться при просмотре html-кода в браузере или распознаваться при автоматизированном доступе к странице.
Процесс такой: при загрузке страницы на сервере генерируется html-код (могут быть разные элементы). Клиент через ajax-Request получает этот код и вставляет в страницу.
Очень нужно, чтобы этот html-snippet добавлялся до загрузки контента, т.к. должен читаться при просмотре html-кода в браузере или распознаваться при автоматизированном доступе к странице.
NEW 17.04.15 21:57
в ответ natuerlich blond 17.04.15 20:38
Так понимаю нужно Вам это для СЕО. Вы не в ту сторону копаете, а решений всего два:
1) Изменить backend так, что-бы он отдавал при запросе релевантную для СЕО информацию статически. Не всегда можно сделать.
2) Идентифицировать робота и отдавать им слепки страниц. Слепки делать или самому, но нужно быть очень акуратным, или вас могут наказать(подробности лень описывать). Есть коробочные решения, например http://prerender.io
Кстати сегодня и гугл и яндекс в состоянии получать информацию, которая получается аяксом. Конечно не всю. Посмотрите логи Вашего сервера и будете приятно удивлены
1) Изменить backend так, что-бы он отдавал при запросе релевантную для СЕО информацию статически. Не всегда можно сделать.
2) Идентифицировать робота и отдавать им слепки страниц. Слепки делать или самому, но нужно быть очень акуратным, или вас могут наказать(подробности лень описывать). Есть коробочные решения, например http://prerender.io
Кстати сегодня и гугл и яндекс в состоянии получать информацию, которая получается аяксом. Конечно не всю. Посмотрите логи Вашего сервера и будете приятно удивлены
NEW 17.04.15 22:26
в ответ Posmotrim 17.04.15 21:57
Вообще-то, не для СЕО, а для защиты от ботов.
Цель создать независимый компонент, который можно было бы вставить в любую html-страницу, в том числе и на старых системах.
Этот компонент может отдавать разные компоненты защиты, в зависимости от своей конфигурации и текущей обстановки в сети. Проблема, например, генерировать таким образом honeypot. Если бот не читает JS, то он просто не заметит его в случае, если он был добавлен после загрузки контента.
Цель создать независимый компонент, который можно было бы вставить в любую html-страницу, в том числе и на старых системах.
Этот компонент может отдавать разные компоненты защиты, в зависимости от своей конфигурации и текущей обстановки в сети. Проблема, например, генерировать таким образом honeypot. Если бот не читает JS, то он просто не заметит его в случае, если он был добавлен после загрузки контента.
NEW 18.04.15 07:12
в ответ natuerlich blond 17.04.15 22:26
Бот читает по протоколу HTTP(S) страницу, отдваваемую фронтендом. О каких клиентских компонентах может идти речь?
Вам подойдёт только серверное решение: определять бота и отдавать шлак.
Ну а вообще сегодня написать бот с обработкой JS не составляет труда. Плюс бота даже и не определишь порой в backend-e, если он примитивно подделает тот-же HTTP_USER_AGENT. Или то, почему Вы собрались его определять.
Удачи.

Ну а вообще сегодня написать бот с обработкой JS не составляет труда. Плюс бота даже и не определишь порой в backend-e, если он примитивно подделает тот-же HTTP_USER_AGENT. Или то, почему Вы собрались его определять.
Удачи.
NEW 18.04.15 12:04
Видимо, я не понимаю, что вы имеете ввиду. Или вы меня. Конечно, валидация будет производиться на стороне сервера, и на сервере будет решаться, что отдавать.
Вопрос был в том, чтобы динамически создавать компоненты защиты, которые были бы добавлены до загрузки контента, чтобы бот вообще имел возможность прочитать их в html. Какие компоненты? Та же классическая CAPTCHA, уже приведенный мной в пример медовый горшок, и еще много-много всяких возможностей.
да, знаю, можно и через эмулятор браузера. для них тоже предусматриваются мероприятия. но простые боты все-таки работают без JS, и их большинство.
для этого и используются другие компоненты защиты, как та же кэпча энд Ко.
Вопрос был именно о том, можно ли как-то манипулировать html еще до загрузки страницы. Видимо придется использовать что-то типа JSF, а так не хотелось.
в ответ Posmotrim 18.04.15 07:12
В ответ на:
О каких клиентских компонентах может идти речь? Вам подойдёт только серверное решение: определять бота и отдавать шлак.
О каких клиентских компонентах может идти речь? Вам подойдёт только серверное решение: определять бота и отдавать шлак.
Видимо, я не понимаю, что вы имеете ввиду. Или вы меня. Конечно, валидация будет производиться на стороне сервера, и на сервере будет решаться, что отдавать.
Вопрос был в том, чтобы динамически создавать компоненты защиты, которые были бы добавлены до загрузки контента, чтобы бот вообще имел возможность прочитать их в html. Какие компоненты? Та же классическая CAPTCHA, уже приведенный мной в пример медовый горшок, и еще много-много всяких возможностей.
В ответ на:
Ну а вообще сегодня написать бот с обработкой JS не составляет труда.
Ну а вообще сегодня написать бот с обработкой JS не составляет труда.
да, знаю, можно и через эмулятор браузера. для них тоже предусматриваются мероприятия. но простые боты все-таки работают без JS, и их большинство.
В ответ на:
Плюс бота даже и не определишь порой в backend-e, если он примитивно подделает тот-же HTTP_USER_AGENT.
Плюс бота даже и не определишь порой в backend-e, если он примитивно подделает тот-же HTTP_USER_AGENT.
для этого и используются другие компоненты защиты, как та же кэпча энд Ко.
Вопрос был именно о том, можно ли как-то манипулировать html еще до загрузки страницы. Видимо придется использовать что-то типа JSF, а так не хотелось.
NEW 18.04.15 13:47
в ответ natuerlich blond 18.04.15 12:04
Где у Вас рендерится html в бэкенде на веб сервере, который отдаётся по http? Именно там вам нужно определить что юзер - бот и отдать ему нужный контент.
Можно переложить это на сам веб сервер. В интернете есть примеры как для апача так и для nginx.
Можно переложить это на сам веб сервер. В интернете есть примеры как для апача так и для nginx.
NEW 18.04.15 14:16
html-файлы на сервере никаких изменений не претерпевают. это простые html5-документы.
Задача другая: уже по первому запросу, ДО определения бота, выдать динамический контент, с помощью которого бот и определяется. и вставить его в html.
и только потом по заполненным полям или другим признакам определять на сервере, бот это или нормальный пользователь.
я поняла, изменения в html нужно вносить еще на сервере до того, как документ отправлен клиенту. на клиенте не пойдет.
к сожалению, нужно смотреть в сторону других технологий.
в ответ Posmotrim 18.04.15 13:47
В ответ на:
Где у Вас рендерится html в бэкенде на веб сервере, который отдаётся по http?
Где у Вас рендерится html в бэкенде на веб сервере, который отдаётся по http?
html-файлы на сервере никаких изменений не претерпевают. это простые html5-документы.
В ответ на:
Именно там вам нужно определить что юзер - бот и отдать ему нужный контент.
Именно там вам нужно определить что юзер - бот и отдать ему нужный контент.
Задача другая: уже по первому запросу, ДО определения бота, выдать динамический контент, с помощью которого бот и определяется. и вставить его в html.
и только потом по заполненным полям или другим признакам определять на сервере, бот это или нормальный пользователь.
я поняла, изменения в html нужно вносить еще на сервере до того, как документ отправлен клиенту. на клиенте не пойдет.
к сожалению, нужно смотреть в сторону других технологий.
NEW 19.04.15 16:44
в ответ Posmotrim 19.04.15 00:51
Я вроде разобралась, где мы друг друга недопоняли.
Меня пока совсем не интересует, что должно происходить после проверки на бота. Меня интересует только добавка в html элементов для этой проверки.
Вот в этом и проблема. В большинстве случаев такой способ меня устраивает.
Но в случае с honeypot это работать не будет. Горшочек меда - это обычное input-поле, которое скрывается с помощью CSS, или явойскрипт, или другими способами. Получается, пользователь его не должен видеть и соответственно не заполняет, а бот должен увидеть и заполнить. Но если поле добавляется на стороне клиента через JS после того, как DOMContentLoaded, то оно не включено в html, и бот его не видит.
Получается, надо рендерить на сервере еще до обработки запроса.
Меня пока совсем не интересует, что должно происходить после проверки на бота. Меня интересует только добавка в html элементов для этой проверки.
В ответ на:
Грузите пустой html с разметкой и скриптом проверкой на бота
Грузите пустой html с разметкой и скриптом проверкой на бота
Вот в этом и проблема. В большинстве случаев такой способ меня устраивает.
Но в случае с honeypot это работать не будет. Горшочек меда - это обычное input-поле, которое скрывается с помощью CSS, или явойскрипт, или другими способами. Получается, пользователь его не должен видеть и соответственно не заполняет, а бот должен увидеть и заполнить. Но если поле добавляется на стороне клиента через JS после того, как DOMContentLoaded, то оно не включено в html, и бот его не видит.
Получается, надо рендерить на сервере еще до обработки запроса.
NEW 20.04.15 19:55
Работает все, что бот не понимает. Если бот понимает явускрипт или специально вычитывает CSS, чтобы определить визуально скрытые поля, или работает через эмулятор браузера, то такая примитивная проверка не работает.
в ответ Программист 20.04.15 19:40
В ответ на:
Неужели такая примитивная проверка работает?
Неужели такая примитивная проверка работает?
Работает все, что бот не понимает. Если бот понимает явускрипт или специально вычитывает CSS, чтобы определить визуально скрытые поля, или работает через эмулятор браузера, то такая примитивная проверка не работает.
NEW 20.04.15 20:07
Зачем работать через какой-то эмулятор, когда есть самый настоящий браузер, через который очень удобно работать. Ничего эмулировать не надо + полный контроль над ссылками и всеми обращениями к серверу.
Неужели есть боты, которые сами парсят веб страницы?
в ответ natuerlich blond 20.04.15 19:55
В ответ на:
или работает через эмулятор браузера
или работает через эмулятор браузера
Зачем работать через какой-то эмулятор, когда есть самый настоящий браузер, через который очень удобно работать. Ничего эмулировать не надо + полный контроль над ссылками и всеми обращениями к серверу.
Неужели есть боты, которые сами парсят веб страницы?