ETag для пользовательских ресурсов - PullRequest
0 голосов
/ 05 ноября 2019

Мы используем ETag заголовки для условных запросов в нашем REST API. Некоторые ресурсы имеют различное содержимое в зависимости от текущего аутентифицированного пользователя (некоторые пользователи видят больше, другие - меньше информации). ETag в настоящее время вычисляется на «полных» ресурсах, то есть все пользователи получают одинаковые ETag, если общий ресурс не изменяется. Это не проблема, если клиент не кэширует ETag ресурса в сеансах пользователя, что, по-видимому, происходит в браузерах. Затем второй пользователь увидит кэшированную версию ресурса от первого пользователя, поскольку сервер сообщает клиенту / браузеру, что он не изменился. Это может даже превратиться в проблему безопасности, если первому пользователю разрешено видеть больше, чем второму пользователю.

Я искал в Интернете, но не нашел никакой информации о ETag s и сеансах пользователя. Есть ли лучшие практики или рекомендации, как обращаться с такими случаями?

1 Ответ

0 голосов
/ 05 ноября 2019

Это больше, чем лучшая практика - стандарт требует отправки уникального ETag, если представление ресурса отличается:

A "сильный валидатор "[такой как ETag] - это метаданные представления, которые изменяют значение всякий раз, когда происходит изменение в данных представления, которые можно было бы наблюдать в теле полезной нагрузки ответа 200 (OK) на GET .... Сильный валидатор уникален для всехверсии всех представлений, связанных с конкретным ресурсом с течением времени.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...