Добро пожаловать в сообщество XML.
Вам нужно будет найти и использовать проверочный синтаксический анализатор для вашего XML; если вы хотите использовать веб-браузер, вы можете быть разочарованы. Старые версии Internet Explorer проверяют XML по отношению к DTD по умолчанию; более новые версии (но я считаю, что вы можете настроить их для этого, если вы можете понять, как).
Большинство пользователей, использующих XML, в конечном итоге используют XML-специфические инструменты для проверки. Среди моих фаворитов для проверки правильности командной строки являются
Существуют также редакторы, поддерживающие XML, которые предлагают интегрированные валидация из редактора (иногда из вашего выбора нескольких парсеров).
Две основные вещи, которые вам нужно изменить / добавить:
Header always set
вместо просто Header set
OPTIONS
, просто отправив обратно 200 OK
с этими заголовками Итак, чтобы включить запрос в вопросе, вот минимальный фрагмент (ish) config:
Header always set Access-Control-Allow-Origin "*"
Header always set Access-Control-Allow-Headers "Authorization"
Header always set Access-Control-Allow-Methods "GET, OPTIONS"
Header always set Access-Control-Expose-Headers "Content-Security-Policy, Location"
Header always set Access-Control-Max-Age "600"
RewriteEngine On
RewriteCond %{REQUEST_METHOD} OPTIONS
RewriteRule ^(.*)$ $1 [R=200,L]
Дальнейшее объяснение в https://benjaminhorn.io/code/setting-cors-cross-origin-resource-sharing-on-apache-with-correct-response-headers-allowing -все-через /
Некоторые общие замечания о том, какие значения задавать для различных заголовков ответа Access-Control-
:
Access-Control-Allow-Headers
: вы должны установить он включает любые имена заголовков, которые ваш запрос отправляет , кроме Имена заголовков CORS-safelisted или так называемые «запрещенные» имена заголовков (имена наборов заголовков браузером, который вы не можете установить в своем JavaScript); spec альтернативно позволяет *
wildcard в качестве его значения, поэтому вы можете попробовать его когда-нибудь, но браузер еще не поддерживает его: Хром-ошибка , Ошибка Firefox , Ошибка Safari Access-Control-Allow-Methods
: спецификация альтернативно разрешает групповой символ *
, но снова , как и в Access-Control-Allow-Headers: *
, браузеры еще не поддерживают его Access-Control-Expose-Headers
: вы должны включить любые заголовки ответов, которые ваш код клиента должен читать за пределами Cache-Control
, Content-Language
, Content-Type
, Expires
, Last-Modified
и Pragma
, которые выставлены по умолчанию (многие люди забывают установить это и в конечном итоге сбиты с толку, почему они не могут прочитать значение конкретного заголовка ответа); снова спецификация альтернативно допускает *
wildcard здесь, но браузеры еще не поддерживают ее Access-Control-Max-Age
: Chrome имеет верхний предел 600
(10 минут) hardcoded , поэтому нет смысла устанавливать для него более высокое значение, чем это (Firefox может его уважать, но Chrome будет просто отключать его до 10 минут, если вы установите его выше, а Safari ограничивает его только 5 минут) Итак, о конкретном запросе, указанном в вопросе, вот некоторые конкретные примечания:
Access-Control-Request-Headers:authorization
, поэтому в вашем конфиге Apache добавьте Authorization
в заголовок ответа Access-Control-Allow-Headers
тоже. Origin
- это имя запрещенного заголовка, установленное браузером, а Accept
- имя заголовка CORS-safelisted, поэтому вам не нужно включать их в Access-Control-Allow-Headers
Content-Type
, поэтому он не нужен в Access-Control-Allow-Headers
в ответе (и никогда не требовалось для запросов GET
и в противном случае требовалось только, если тип отличается от application/x-www-form-urlencoded
, text/plain
или multipart/form-data
) Access-Control-Allow-Methods
, ваш запрос кажется просто GET
, поэтому, если вы не планируете также делать запросы POST
/ PUT
/ DELETE
/ PATCH
, не указывать явно их включение