Access-Control-Allow-Origin Домены нескольких источников?

Как расширение предложения Marc, я хотел бы предложить следующее решение, которое также позволит манипулировать словарем во время выполнения:

public class DictionaryBindingList<TKey, TValue> : BindingList<KeyValuePair<TKey, TValue>>
{
    public readonly IDictionary<TKey, TValue> Dictionary;
    public DictionaryBindingList()
    {
        Dictionary = new Dictionary<TKey, TValue>();
    }

    public void Add(TKey key, TValue value)
    {
        base.Add(new KeyValuePair<TKey, TValue>(key, value));
    }

    public void Remove(TKey key)
    {
        var item = this.First(x => x.Key.Equals(key));
        base.Remove(item);
    }

    protected override void InsertItem(int index, KeyValuePair<TKey, TValue> item)
    {
        Dictionary.Add(item.Key, item.Value);
        base.InsertItem(index, item);
    }

    protected override void RemoveItem(int index)
    {
        Dictionary.Remove(this[index].Key);
        base.RemoveItem(index);
    }

    public int IndexOf(TKey key)
    {
        var item = this.FirstOrDefault(x => x.Key.Equals(key));
        return item.Equals(null) ? -1 : base.IndexOf(item);
    }
}
953
задан sideshowbarker 2 February 2019 в 04:22
поделиться

2 ответа

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

С помощью .htaccess вы можете сделай это так:

# ----------------------------------------------------------------------
# Allow loading of external fonts
# ----------------------------------------------------------------------
<FilesMatch "\.(ttf|otf|eot|woff|woff2)$">
    <IfModule mod_headers.c>
        SetEnvIf Origin "http(s)?://(www\.)?(google.com|staging.google.com|development.google.com|otherdomain.example|dev02.otherdomain.example)$" AccessControlAllowOrigin=$0
        Header add Access-Control-Allow-Origin %{AccessControlAllowOrigin}e env=AccessControlAllowOrigin
        Header merge Vary Origin
    </IfModule>
</FilesMatch>
822
ответ дан 19 December 2019 в 20:20
поделиться

Есть один недостаток, о котором вы должны знать: Как только вы передадите файлы на CDN (или любой другой сервер, который не разрешает скриптинг) или если ваши файлы будут кэшироваться на прокси, изменение ответа на основе заголовка запроса 'Origin' не будет работать.

20
ответ дан 19 December 2019 в 20:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: