У меня есть сайт с http и https. Я установил в .htaccess следующую строку, которая запускается для http.
Набор заголовков Access-Control-Allow-Origin "*"
Но с https я получаю эту ошибку.
На запрошенном ресурсе нет заголовка Access-Control-Allow-Origin. Происхождение 'https://dl.dropboxusercontent.com'поэтому не разрешен доступ.
Я безуспешно пробовал следующее.
Набор заголовков Access-Control-Allow-Origin "*" env = HTTPS
Любой способ установить заголовок Access-Control-Allow-Origin для https в .htaccess?
Вот мой полный .htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
<IfModule mod_headers.c>
Header always set Access-Control-Allow-Origin "*"
</IfModule>
Вот настройки моего виртуального хоста
<VirtualHost *:443>
ServerAdmin admin@localhost
DocumentRoot /var/www/html/domain
ServerName domain.com
SSLEngine on
SSLProtocol all -SSLv2
SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
SSLCertificateFile "/etc/pki/tls/private/domain.crt"
SSLCertificateKeyFile "/etc/pki/tls/private/domain.key"
SSLCACertificateFile "/etc/pki/tls/private/domain.ca-bundle.crt"
<Files ~ "\.(cgi|shtml|phtml|php3?)$">
SSLOptions +StdEnvVars
</Files>
SetEnvIf User-Agent ".*MSIE.*" \
nokeepalive ssl-unclean-shutdown \
downgrade-1.0 force-response-1.0
ErrorLog logs/domain-error_log
CustomLog logs/domain-access_log common
<Directory "/var/www/html/domain">
AllowOverride All
</Directory>
</VirtualHost>
Любое решение?
Мне пришлось создать .php, чтобы я запрашивал файл через request.php? F = main.jpg вместо того, чтобы запрашивать его напрямую, например, domain.com/main.jpg
Это немного уродливая работа, но она работает. Конечно, мне пришлось добавить заголовок Access-Control-Allow-Origin вот так. Таким образом, мне не нужно указывать этот заголовок в файле .htaccess.
if (isset($_SERVER['HTTP_ORIGIN']) && strpos($_SERVER['HTTP_ORIGIN'],'safedomain') !== false) {
header("Access-Control-Allow-Origin: {$_SERVER['HTTP_ORIGIN']}");
header('Access-Control-Allow-Credentials: true');
header('Access-Control-Max-Age: 86400'); // cache for 1 day
}
// Access-Control headers are received during OPTIONS requests
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_METHOD']))
header("Access-Control-Allow-Methods: GET, POST, OPTIONS");
if (isset($_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']))
header("Access-Control-Allow-Headers: {$_SERVER['HTTP_ACCESS_CONTROL_REQUEST_HEADERS']}");
exit(0);
}
Без полного .htaccess я точно не знаю, но когда в Apache выполняется дополнительная обработка, добавляется условие always
может понадобиться:
Header always set Access-Control-Allow-Origin "*"
В руководство объясняет это следующим образом:
Когда ваше действие является функцией существующего заголовка, вам может потребоваться указать условие всегда, в зависимости от того, в какой внутренней таблице был установлен исходный заголовок.
Таблица, соответствующая всегда используется как для локально сгенерированных ответов об ошибках, так и для успешных ответов. Также обратите внимание, что повторение этой директивы с обоими условиями имеет смысл в некоторых сценариях, потому что всегда не является расширением на успех относительно существующих заголовков:
Вы добавляете заголовок в локально сгенерированный неуспешный (не 2xx) ответ, такой как перенаправление, и в этом случае в конечном ответе используется только таблица, соответствующая always.
Вы изменяете или удаляете заголовок, созданный сценарием CGI, и в этом случае сценарии CGI находятся в таблице, соответствующей всегда, а не в таблице по умолчанию.
Вы изменяете или удаляете заголовок, сгенерированный некоторой частью сервера, но этот заголовок не обнаруживается условием при успешном завершении по умолчанию.
Вы используете самоподписанный сертификат?
http://dev.housetrip.com/2014/04/17/unleash-your-ajax-requests-with-cors/
Вы можете столкнуться с трудностями, когда запрос нацелен на HTTPS-сервер с использованием самоподписанных сертификатов. Возможный обходной путь - добавить сертификат в список доверенных. Сертификат, поставляемый с тонким веб-сервером, попадает в эту категорию.