В наши дни я пытаюсь понять token-based authentication
, который утверждает, что это метод stateless authentication
. И я встретил концепцию stateless web application
.
Ниже приведены несколько тем, о которых я читал:
- Используйте Spring MVC для разработки веб-приложений без сохранения состояния (пока нет ответа )
- Spring MVC без сохранения состояния
- Как сделать веб-приложение Java полностью без гражданства
- Как сделать мой Интернет Приложение без сохранения состояния, но все же делает что-то полезное?
Сначала я был в восторге от этой идеи. Но все больше и больше я думаю, что stateless
- это pseudo-proposition
.
Например, предположим, что мы используем токен, хранящийся на клиенте, для аутентификации, как мы можем сделать статистику онлайн-пользователей (предположим, что нет журнала)? Будем хранить токен в БД? Разве это не значит, что мы храним информацию о состоянии на сервере? И даже более того, является ли обычная информация о пользователе, такая как имя, возраст и т. Д. В БД, также своего рода информацией о состоянии?
Я думаю, что реальный вопрос здесь не в том, чтобы сделать веб-приложение без сохранения состояния, а в том, чтобы заставить веб-приложение должным образом обрабатывать информацию о состоянии, чтобы это не поставило под угрозу масштабируемость.
Это зависит от того, как интерпретировать слово stateless
:
- У веб-приложения нет состояния.
- Или веб-приложение не хранит состояние само.
Я предпочитаю 2, потому что всегда может быть inevitable global state
(цитата из комментария @deceze к его ответу). И независимо от того, храним ли мы информацию о состоянии в виде веб-хранилища HTML 5, заголовка HTTP, скрытых полей формы или файла cookie, состояние все равно существует. Только то, что он хранится не на сервере.
Я что-то упустил? Может ли кто-нибудь пролить свет на это, чтобы избавить меня от этой душевной борьбы?
ДОБАВИТЬ 1
Просто прочтите о книге RESTful Web Services автора Leonard Richardson
. В главе 4, в конце раздела Statelessness
, он классифицирует состояние на Application State
и Resource State
. Таким образом, обычная информация о пользователе и данные, которые я упоминал ранее, такие как изображения и т. Д., Могут быть классифицированы как Resource State
. И то, что stateless
относится к Application State
. Таким образом, он не нарушает код состояния без сохранения состояния для хранения resource state
на сервере.
Но в книге также упоминается сценарий, в котором an application key is used to restrict how many times a user can invoke a web service.
признается, что такая информация не может храниться на стороне клиента. И необходимость хранить его на стороне сервера нарушает код состояния без сохранения состояния и вызывает проблему сродства сеанса. В нем утверждается, что без сохранения состояния можно избежать проблемы сродства сеанса, но не объясняется, как это сделать. Я действительно не понимаю, как без состояния можно справиться с этим сценарием. Кто-нибудь мог пролить здесь свет?