Ответ 1
Хорошо, я решил.
В чем была проблема?
Рабочий процесс CORS для DELETE, PUT и POST выглядит следующим образом:
Что он делает, это:
- Проверка того, какой запрос будет сделан
- Если это POST, PUT или DELETE
- Сначала он отправляет запрос OPTION для проверки того, совпадает ли домен, с которого отправлен запрос, с сервером.
- Если не, он хочет, чтобы Access-Header разрешал отправлять этот запрос
Важно: запрос OPTIONS не отправляет учетные данные.
Таким образом, мой серверный сервер запретил запрос PUT.
Решение:
Поместите это в файл .htaccess
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ blank.php [QSA,L]
Header set Access-Control-Allow-Origin "http://sub.domain:3000"
Header always set Access-Control-Allow-Credentials "true"
Header always set Access-Control-Max-Age "1000"
Header always set Access-Control-Allow-Headers "X-Requested-With, Content-Type, Origin, Authorization, Accept, Client-Security-Token, Accept-Encoding"
Header always set Access-Control-Allow-Methods "POST, GET, OPTIONS, DELETE, PUT"
После этого создайте пустой .php файл с именем blank.php внутри общей папки.
EDIT: Как заметил один из комментаторов, вместо создания пустого PHP файла вы можете добавить это правило перезаписи в файл .htaccess \;
RewriteRule ^(.*)$ $1 [R=200,L,E=HTTP_ORIGIN:%{HTTP:ORIGIN}]]
Чтобы уточнить:
- Я уже отправил заголовок Access-Control-Header
- Решено было две первые строки, а
- Access-Control-Allow-Origin из определенного субдомена с портом
Лучший веб-сайт, который можно найти в узнать больше о CORS.