Solr vs. ElasticSearch [закрыто]

Как говорили другие, вы должны сделать то и другое. Вот почему:

Сторона клиента

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

Если вы только проверяете на сервере, они должны отправить форму, получить сообщение об ошибке и попытаться выследить проблему.

(Эта боль может быть ослаблена, если сервер повторно отобразит форму с исходным входом пользователя, но проверка на стороне клиента еще быстрее.)

Сторона сервера

Вы хотите проверить на стороне сервера, потому что можете защитить от злонамеренного пользователя, который может легко обойти ваш JavaScript и отправить опасный ввод на сервер.

Очень опасно доверять вашему пользовательскому интерфейсу. Мало того, что они могут злоупотреблять вашим пользовательским интерфейсом, но они могут вообще не использовать ваш пользовательский интерфейс или даже браузер. Что делать, если пользователь вручную редактирует URL-адрес или запускает собственный Javascript или настраивает свои HTTP-запросы другим инструментом? Что делать, если они отправляют пользовательские HTTP-запросы из curl или из сценария, например?

( Это не теоретически, например, я работал в поисковой системе путешествия, которая повторно отправила пользовательскую искать во многих авиакомпаниях, автобусных компаниях и т. д., отправив POST запросы, как если бы пользователь заполнил форму поиска каждой компании, а затем собрал и отсортировал все результаты. Форма этих компаний JS никогда не исполнялась, и для нас это было важно что они предоставляют сообщения об ошибках в возвращенном HTML. Конечно, API был бы приятным, но это было то, что мы должны были сделать. )

Не позволяя это не только наивно от точки зрения безопасности, но также и нестандартного: клиенту должно быть разрешено отправлять HTTP любым способом, который они пожелают, и вы должны ответить правильно. Это включает проверку.

Валидация на стороне сервера также важна для совместимости. Не все пользователи, даже если они используют браузер, будут иметь JavaScript.

Addendum - December 2016

Существуют некоторые проверки, которые даже не могут быть правильно выполнены в коде приложения на стороне сервера и совершенно невозможны в клиентском коде, поскольку они зависят от текущего состояния базы данных. Например, «никто еще не зарегистрировал это имя пользователя» или «сообщение в блоге, которое вы комментируете по-прежнему существует», или «отсутствие существующего резервирования не совпадает с запрошенными вами датами» или «баланс вашего аккаунта по-прежнему достаточно для покрытия этой покупки «. Только база данных может достоверно проверять данные, которые зависят от связанных данных. Разработчики регулярно закручивают это , но PostgreSQL предоставляет некоторые хорошие решения .

709
задан Salman Abbas 7 December 2013 в 20:42
поделиться