Мы разрабатываем веб-сайт с React и Redux. Мы только что добавили кеш Varnish в наш API, и, хотя при тестировании API на Postman все работает хорошо, на нашем веб-сайте это не работает.
По какой-то причине все запросы API завершаются с ошибкой с кодом состояния 401 при первом выполнении, однако после первой ошибки они работают нормально.
Это поведение только начало происходить после того, как мы добавили кеш Varnish, но мы не можем найти ошибку.
Конфигурационный файл Varnish выглядит следующим образом:
vcl 4.0;
backend default {
.host = ...;
.port = ...;
}
sub vcl_backend_response {
set beresp.ttl = 5m;
# Don't cache non-200 responses
if ( beresp.status != 200 ) {
set beresp.ttl = 0s;
}
# Don't cache if "no-cache" or "private" on cache control
if (beresp.http.cache-control ~ "(no-cache|private)" ||
beresp.http.pragma ~ "no-cache") {
set beresp.ttl = 0s;
}
}
sub vcl_recv {
# Do not cache Healthcheck call
if (req.url == "/api/healthcheck") {
return (pass);
}
# Do not cache POST methods
if (req.method == "POST") {
return (pass);
}
# Do not cache users' calls as each user will be different
if (req.url ~ "\/api\/v[a-zA-Z0-9\.]+\/users\/.*") {
return (pass);
}
# Ensure that cache is enabled to any call to the API
if (req.url ~ "/api/*") {
return (hash);
}
}
sub vcl_deliver {
if (req.url ~ "/api/*") {
set resp.http.Access-Control-Allow-Headers = "Accept, Accept-Encoding, Authorization, Content-Type, Dnt, Origin, User-Agent, X-CSRFToken, X-Requested-With";
return (deliver);
}
}
Что может происходить?
Большое спасибо
401
, который является неавторизованным, как вы аутентифицируете запросы API? Некоторое значение заголовка/параметр запроса/данные POST? Подробнее пожалуйста :) - person Danila Vershinin   schedule 03.10.2017