Назад | Перейти на главную страницу

Access-Control-Allow-Origin «*» не разрешен, если установлен флаг учетных данных.

У меня есть запрос ajax, который подключается к http://example.com:6001.

Однако он будет работать только тогда, когда я открою http://example.com:6001 в браузере, который загружает index.html (который запускается через Node.js на порту 6001). Это отлично работает, и ajax возвращает:

XHR завершил загрузку: http://example.com:6001/_api/

Однако, когда я открываю index.html со своего сервера Apache на: 80, вызов ajax вернется:

XMLHttpRequest не может загрузить http://example.com/_api/?xxx. Подстановочный знак «*» нельзя использовать в заголовке «Access-Control-Allow-Origin», если установлен флаг учетных данных. Происхождение 'http://example.com'поэтому не разрешен доступ.

Я не уверен, возвращается ли эта ошибка CouchDB или Apache.

Я пробовал несколько вариантов следующего в /etc/apache2/sites-available/000-default.conf Apache:

<VirtualHost *:6001>
        Header set Access-Control-Allow-Origin *
        Header set Access-Control-Allow-Credentials "false"
</VirtualHost>

И в /etc/couchdb/local.ini Couch DB (из Совместное использование ресурсов между источниками документация):

[httpd]
enable_cors = true

[cors]
origins = *
credentials = false

Последнее имеет наибольший смысл, потому что, кажется, указывает на credentials флаг..

Это тоже не должен быть скрипт, потому что он работает в том же «домене порта» (т. Е.: 6001).

Эта ошибка возвращается вашим браузером.

В основном означает, что вы просто не можете этого сделать.

Заголовки, связанные с CORS, не должны быть установлены в Apache (в вашем случае)

Создайте это в своем приложении NodeJS с указанным доменом: порт, а не подстановочным знаком.

Вот похожий случай, который вы можете захотеть посмотреть

Я не знаю NodeJS. В php вы можете использовать

header("Access-Control-Allow-Origin: ".$_SERVER['HTTP_ORIGIN']);

для имитации подстановочного знака.

Пункт 6.1.3 «Простой запрос источника, фактический запрос и перенаправления» не позволяет серверу ресурсов отвечать с разрешением подстановочного знака, когда ресурс ожидает учетные данные.

http://www.w3.org/TR/cors/#resource-requests

Я предполагаю, что это защищает от разработчиков, слепо раскрывающих ресурсы, защищенные учетными данными, любому возможному клиенту, включая тех, которые могут работать на открытых http-сайтах. Ответ с помощью URL-адреса источника запроса в Access-Control-Allow-Origin, по-видимому, указывает на достаточную осведомленность разработчиков о том, что секреты могут путешествовать по всему миру.

$ curl -v https://www.googleapis.com/urlshortener/v1/url -X OPTIONS -H "Origin: http://foo" -H "Access-Control-Request-Method: GET"
* Hostname was NOT found in DNS cache
*   Trying 216.58.216.170...
* Connected to www.googleapis.com (216.58.216.170) port 443 (#0)
* successfully set certificate verify locations:
*   CAfile: none
  CApath: /etc/ssl/certs
* SSLv3, TLS handshake, Client hello (1):
* SSLv3, TLS handshake, Server hello (2):
* SSLv3, TLS handshake, CERT (11):
* SSLv3, TLS handshake, Server key exchange (12):
* SSLv3, TLS handshake, Server finished (14):
* SSLv3, TLS handshake, Client key exchange (16):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSLv3, TLS change cipher, Client hello (1):
* SSLv3, TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES128-GCM-SHA256
* Server certificate:
*    subject: C=US; ST=California; L=Mountain View; O=Google Inc; CN=*.storage.googleapis.com
*    start date: 2015-04-08 14:12:01 GMT
*    expire date: 2015-07-07 00:00:00 GMT
*    subjectAltName: www.googleapis.com matched
*    issuer: C=US; O=Google Inc; CN=Google Internet Authority G2
*    SSL certificate verify ok.
> OPTIONS /urlshortener/v1/url HTTP/1.1
> User-Agent: curl/7.38.0
> Host: www.googleapis.com
> Accept: */*
> Origin: http://foo
> Access-Control-Request-Method: GET
> 
< HTTP/1.1 200 OK
< Cache-Control: no-cache, no-store, max-age=0, must-revalidate
< Pragma: no-cache
< Expires: Fri, 01 Jan 1990 00:00:00 GMT
< Date: Thu, 16 Apr 2015 03:56:29 GMT
< Access-Control-Allow-Credentials: true
< Access-Control-Allow-Methods: DELETE,GET,HEAD,PATCH,POST,PUT
< Access-Control-Allow-Origin: http://foo
< Access-Control-Max-Age: 3600
< Vary: Origin
< Vary: X-Origin
< Content-Type: application/octet-stream
< X-Content-Type-Options: nosniff
< X-Frame-Options: SAMEORIGIN
< X-XSS-Protection: 1; mode=block
< Content-Length: 0
* Server GSE is not blacklisted
< Server: GSE
< Alternate-Protocol: 443:quic,p=0.5
< 
* Connection #0 to host www.googleapis.com left intact