Javascript, разработанный одним из наших поставщиков, должен сделать перекрестный запрос XMLHttpRequest на сервис в нашей компании.URL-адрес (скрытый по соображениям безопасности) для запроса GET в основном выглядит как
https://infoservice.testcompany.com/ourservice/api/public/eventshash
К сожалению, предварительная проверка OPTIONS для этого запроса завершается с непредвиденной ошибкой (консоль Firefox):
Cross-Origin Request Blocked: The Same Origin Policy disallows reading the remote resource at https://infoservice.testcompany.com/ourservice/api/public/eventshash. (Reason: CORS header ‘Access-Control-Allow-Origin’ missing).[Learn More]
Но, когда я анализирую запрос, я могу точно найти переменную и значение заголовка, о которых было сообщено в сообщении об ошибке.Слегка запутанный вывод HAR:
{
"log": {
"version": "1.1",
"creator": {
"name": "Firefox",
"version": "62.0"
},
"browser": {
"name": "Firefox",
"version": "62.0"
},
"pages": [
{
"startedDateTime": "2018-09-20T06:44:28.458+02:00",
"id": "page_1",
"title": "Main page - Home",
"pageTimings": {
"onContentLoad": -1,
"onLoad": -1
}
}
],
"entries": [
{
"pageref": "page_1",
"startedDateTime": "2018-09-20T06:44:40.869+02:00",
"request": {
"bodySize": 0,
"method": "OPTIONS",
"url": "https://infoservice.testcompany.com/ourservice/api/public/eventshash",
"httpVersion": "HTTP/1.1",
"headers": [
{
"name": "Host",
"value": "infoservice.testcompany.com"
},
{
"name": "User-Agent",
"value": "Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:62.0) Gecko/20100101 Firefox/62.0"
},
{
"name": "Accept",
"value": "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
},
{
"name": "Accept-Language",
"value": "de,en;q=0.7,en-US;q=0.3"
},
{
"name": "Accept-Encoding",
"value": "gzip, deflate, br"
},
{
"name": "Access-Control-Request-Method",
"value": "GET"
},
{
"name": "Access-Control-Request-Headers",
"value": "if-modified-since"
},
{
"name": "Origin",
"value": "https://mainpage.testcompany.com"
},
{
"name": "Connection",
"value": "keep-alive"
}
],
"cookies": [],
"queryString": [],
"headersSize": 484
},
"response": {
"status": 200,
"statusText": "OK",
"httpVersion": "HTTP/1.1",
"headers": [
{
"name": "Date",
"value": "Thu, 20 Sep 2018 04:44:40 GMT"
},
{
"name": "Cache-Control",
"value": "private"
},
{
"name": "Cache-Control",
"value": "max-age=10"
},
{
"name": "Access-Control-Allow-Origin",
"value": "https://mainpage.testcompany.com"
},
{
"name": "Access-Control-Allow-Credentials",
"value": "true"
},
{
"name": "Allow",
"value": "GET,HEAD,POST,OPTIONS"
},
{
"name": "Vary",
"value": "Origin"
},
{
"name": "Access-Control-Expose-Headers",
"value": "Accept-Language"
},
{
"name": "Access-Control-Allow-Headers",
"value": "if-modified-since"
},
{
"name": "Access-Control-Allow-Methods",
"value": "GET, HEAD, OPTIONS"
},
{
"name": "Accept-Language",
"value": "de,en;q=0.7,en-US;q=0.3"
},
{
"name": "Content-Length",
"value": "0"
},
{
"name": "Connection",
"value": "close"
},
{
"name": "Content-Type",
"value": "application/json"
}
],
"cookies": [],
"content": {
"mimeType": "application/json",
"size": 0,
"text": ""
},
"redirectURL": "",
"headersSize": 504,
"bodySize": 504
},
"cache": {},
"timings": {
"blocked": 23,
"dns": 0,
"connect": 11,
"ssl": 0,
"send": 0,
"wait": 14,
"receive": 0
},
"time": 48,
"_securityState": "secure",
"serverIPAddress": "192.168.0.1",
"connection": "443"
}
]
}
}
Как видите, я получаю
{
"name": "Access-Control-Allow-Origin",
"value": "https://mainpage.testcompany.com"
},
, который должен быть правильным.
В Apache я создаю заголовки CORS следующим образом:
<Files eventshash>
ForceType application/json
# Not needed, saves time:
Header unset ETag
FileETag None
# CORS:
SetEnvIf Origin "http.*\.testcompany\.com.*$" AccessControlAllowOrigin=$0
Header Always Set Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
Header Append Vary Origin
Header Always Set Access-Control-Allow-Credentials true env=AccessControlAllowOrigin
Header set Access-Control-Expose-Headers "Accept-Language" env=AccessControlAllowOrigin
Header set Access-Control-Allow-Headers "if-modified-since" env=AccessControlAllowOrigin
Header set Access-Control-Allow-Methods "GET, HEAD, OPTIONS" env=AccessControlAllowOrigin
Header echo Accept-Language
</Files>
Я вижу ошибку блокировки CORS в Firefox, IE11 и в Chrome.Но я думаю, что мои заголовки CORS верны, и я понятия не имею, что еще может отсутствовать в ответе веб-сервера.Ах, да, я знаю, что Access-Control-Allow-Origin: "*" - это плохо, и поэтому я им не пользуюсь.Просто для завершения ввода.
Есть идеи, что может быть упущено / неправильно?
у.е., Штеффен