Столкнулся с очень навязчивой ошибкой CORS при выполнении межсерверного GET запроса из JS скрипта на свой сервер Apache с развернутым Django проектом. Самое интересное, что POST запрос на регистрацию отрабатывает без проблем. Я отправляю POST с регистрацией пользователя, затем отправляю POST с авторизацией для получения токена, а затем отправляю GET с токеном в Header для получения данных и каждый раз ловлю ошибку на этом этапе. Ошибка имеет следующий текст:
Access to fetch at 'https://server.domain/accounts/all-profiles' from origin 'https://client.domain' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: It does not have HTTP ok status.
3 дня я путешествовал по интернету, пробуя различные варианты решения этой проблемы, но положительного результата так и не получил. По-этому очень прошу помощи в этом вопросе. Через Postman запросы отлично работают.
В файл конфигурации Apache apache2.conf добавлял разрешения
<IfModule mod_headers.c>
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Allow-Headers
"append,delete,entries,foreach,get,has,keys,set,values,Authorization"
</IfModule>
Добавлял редирект для проверочного запроса OPTIONS
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ /blank.html [QSA,L]
Еще такой вариант пробовал
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]
Установил SSL для сервера
Установил SSL для клиента
Писал GET запрос и через XMLHttpRequest() и через fetch()
Ниже мой JS запрос
XMLHttpRequest()
const loginrequests = new XMLHttpRequest();
const CheckJWT = 'https://server.domain/accounts/all-profiles'
function ShowToken() {
NewTok = localStorage.getItem("SavedToken");
console.log(NewTok);
loginrequests.open("GET", registerURL, true);
loginrequests.setRequestHeader("Authorization", NewTok);
loginrequests.send();
}
Ниже мой JS запрос
Fetch()
async function postData() {
NewTok = localStorage.getItem("SavedToken");
const CheckJWT = 'https://server.domain/accounts/all-profiles'
const response = await fetch(CheckJWT, {
method: 'GET',
headers: {
'Authorization': NewTok,
},
});
return await response.json();
}
Еще ниже главное из моего файла конфигурации Apache
apache2.conf
DefaultRuntimeDir ${APACHE_RUN_DIR}
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
Include ports.conf
<Directory />
Options FollowSymLinks
AllowOverride None
Require all denied
</Directory>
<Directory /usr/share>
AllowOverride None
Require all granted
</Directory>
<Directory /var/www/>
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
WSGIPassAuthorization On
AccessFileName .htaccess
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
IncludeOptional conf-enabled/*.conf
IncludeOptional sites-enabled/*.conf
<IfModule mod_headers.c>
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
Header always set Access-Control-Allow-Headers
"append,delete,entries,foreach,get,has,keys,set,values,Authorization"
</IfModule>
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ /blank.html [QSA,L]
Помогите пожалуйста, так как больше нет сил бросать горохом об стену, пробуя варианты, которые не помогают =.(