Я разрабатываю одностраничное приложение реагирования (16.9.0), в котором используется топор ios (0.19.0). Запросы ax ios используют аутентификацию токена для доступа к серверу, на котором запущены django -rest-framework (3.6.4) и django -cors-headers (3.1.1). Токены аутентификации генерируются django -rest-auth (0.9.5) во время входа в систему.
Приложение надежно работает в Chrome и Firefox. В Safari некоторые запросы не выполняются из-за ошибок 401.
Этот запрос выполняется во всех трех браузерах:
INFO basehttp: "GET /apis/games/?slug=pop HTTP/1.1" 200 60932```
код, который его генерирует, выглядит следующим образом:
axios
.get(`${simplUrl}/apis/games/?slug=${gameSlug}`, {
headers: { Authorization: simplToken },
})
.then(res => {
this.setState({
game: res.data[0],
});
...
Этот запрос не удался с Safari:
INFO basehttp: "OPTIONS /apis/runs/43 HTTP/1.1" 200 0
INFO basehttp: "DELETE /apis/runs/43 HTTP/1.1" 301 0
INFO basehttp: "OPTIONS /apis/runs/43/ HTTP/1.1" 200 0
WARNING basehttp: "DELETE /apis/runs/43/ HTTP/1.1" 401 58
, но он был успешно выполнен с Chrome:
INFO basehttp: "OPTIONS /apis/runs/43 HTTP/1.1" 200 0
INFO basehttp: "DELETE /apis/runs/43 HTTP/1.1" 301 0
INFO basehttp: "OPTIONS /apis/runs/43/ HTTP/1.1" 200 0
INFO basehttp: "DELETE /apis/runs/43/ HTTP/1.1" 204 0
код, который его генерирует, выглядит так:
const url = `${simplUrl}/apis/runs/${run.id}`;
// console.log('url:', url);
axios
.delete(url, {
headers: { Authorization: simplToken },
})
.then(res => {
// console.log(res);
afterDelete();
});
Ответ Safari 401 был:
"detail": "Authentication credentials were not provided."
Это информация, записанная Safari для неудачного запроса DELETE:
Использование представлений DRF apis основано на это смешение:
class CommonViewSet(viewsets.ModelViewSet):
authentication_classes = (TokenAuthentication, BasicAuthentication, SessionAuthentication)
permission_classes = (IsAuthenticated,)
Для локальной разработки параметры CORS сервера DRF:
CORS_ORIGIN_ALLOW_ALL = True
CORS_ALLOW_HEADERS = [
'accept',
'accept-encoding',
'authorization',
'content-type',
'dnt',
'origin',
'user-agent',
'x-csrftoken',
'x-requested-with',
]
Я не понимаю, почему некоторые запросы в Safari не выполняются, а другие нет. В основном я хочу, чтобы все запросы работали во всех трех браузерах.