У меня есть метод Web API, как указано ниже, для службы REST
. Это делается для получения всей информации о пользователях InventoryAuditors. Доступ к этому ресурсу могут получить только авторизованные пользователи InventoryAuditor.Проверка авторизации для HTTP-кешей
[RoutePrefix("api/users")]
public class UsersController : ApiController
{
[Authorize(Roles="InventoryAuditor")]
[Route("")]
[HttpGet]
public List<User> GetAllUsers()
{
//Return list of users
}
}
public class User
{
public int UserID { get; set; }
public string FirstName { get; set; }
}
Вопросы
- Является ли этот ресурс кэшируется для
shared caches
(какForward Proxies
и другие промежуточные кэши)? - Если да, то как общий кэш выполняет проверку авторизации - как кеш знает, что ресурс должен обслуживаться только для InventoryAuditors?
- Как заголовки должны выглядеть так, чтобы это разрешенное представление было кэшируемым?
or is HTTP Caching
Не все должны использоваться в случае авторизованных ресурсов?
Примечание: В статье "Caching Tutorial for Web Authors and Webmasters" говорит:
По умолчанию, страница, защищенная аутентификация HTTP считаются частной; они не будут храниться в общих кэшах. Тем не менее, вы можете публиковать открытые страницы с открытым заголовком Cache-Control: public; HTTP-совместимые кеши будут затем кэшироваться.
ЛИТЕРАТУРА
- https://tools.ietf.org/html/rfc7235#section-4.2
- https://tools.ietf.org/html/rfc7234#section-3.2
- https://tools.ietf.org/html/rfc7234#section-5.2.2
- Hypertext Transfer Protocol (HTTP/1.1): Caching
- Feature: Bearer Authentication- Squid
- Stupid Web Caching Tricks
Читать статью [ "Кэширование Учебник для веб-авторов и веб-мастеров"] (https: //www.mnot. net/cache_docs /). В нем говорится: «По умолчанию страницы, защищенные с помощью HTTP-аутентификации, считаются закрытыми, они не будут храниться в общих кэшах. Однако вы можете сделать общедоступными страницы с проверкой подлинности с открытым заголовком Cache-Control: HTTP-совместимые кеши будут затем разрешите их кэшировать ». , Тогда почему вы говорите, что это невозможно? – Lijo
Это то, что упоминается в ответе на ваш третий вопрос. Поведение по умолчанию для ответов, требующих проверки подлинности, не кэшируется с помощью общих прокси (Cache-Control: private, s-maxage = 0). Но если вы хотите переопределить это поведение, вы можете установить свой собственный заголовок кэша перед отправкой ответа (Cache-Control: public, no-cache), как упоминается в статье, или (Cache-Control: public, proxy-revalidate). Если вы просто используете кэширование с истечением срока действия с помощью общедоступного модификатора, пользователь, не прошедший проверку, может получить представление сервера из кеша. – superblygeneralobject