Всем привет, мы снова встретились, я ваш друг Цюаньчжаньцзюнь.
由于Политика одинакового происхождения браузераиз Существование позволяет одному источнику загружать ресурсы из других источников.из Поведение ограничено。Междоменные запросы будут запрещены。
Проще говоря, если естьПротокол, доменное имя, портИли разные серверы поддоменов,Или один из них — IP-адрес,Одним из них является адрес доменного имени (по междоменным вопросам).,Домен идентифицируется только по «url из заголовка», без попытки определить, соответствует ли один и тот же IP-адрес двум доменам или принадлежат ли эти два домена одному и тому же IP),Любое действие доступа, инициированное клиентом на любом сервере для запроса других ресурсов сервера, является междоменным.,Браузеры обычно ограничивают междоменный доступ по соображениям безопасности.,То есть междоменные запросы ресурсов не допускаются.
Но часто нам приходится запрашивать ресурсы между доменами. В настоящее время нам нужно найти способы обойти ограничения политики браузера по одному и тому же источнику.
Общие решения для междоменных запросов:
1.Jsonp Реализация возможности использования тегов скрипта для инициации get-запросов без междоменных банов. 2.window.name+iframe Реализовано с помощью промежуточного атрибута window.name. 3.Cors требует, чтобы сервер установил заголовок: Access-Control-Allow-Origin. 4. Обратный прокси-сервер Nginx. Сотрудничество целевого сервера не требуется, но для пересылки запросов требуется сервер ретрансляции Nginx (не будет междоменных ограничений на запросы ресурсов между серверами)
При использовании Ajax для запроса ресурсов между доменами и использовании Nginx в качестве прокси возникает следующая ошибка:
The 'Access-Control-Allow-Origin' header contains multiple values '*, *', but only one is allowed
Решение: Используйте Nginx в качестве обратного прокси-сервера и добавьте следующие настройки в соответствующее место конфигурации.
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header Cache-Control private;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
Полная конфигурация выглядит следующим образом:
server {
listen 80;
server_name 192.168.16.190;
root /home/fastdfs/file/data;
index index.htm index.html;
add_header 'Access-Control-Allow-Origin' '*';
add_header 'Access-Control-Allow-Credentials' 'true';
add_header Cache-Control private;
add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS';
add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';
location / {
# здесь для обработки H5 из История Перепишите вопрос
if (!-e $request_filename) {
rewrite ^(.*) /index.html last;
break;
}
}
# Интерфейс прокси-сервера
location /api {
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,PATCH,OPTIONS;
return 200;
}
proxy_pass http://192.168.16.191:3000/api; #Проксируем реальный запрос к API Адрес обслуживания
}
location ^~/cross_origin/ {
rewrite ^/cross_origin/(.*)$ /$1 break;
if ($request_method = 'OPTIONS') {
add_header Access-Control-Allow-Origin *;
add_header Access-Control-Allow-Methods GET,POST,PUT,DELETE,PATCH,OPTIONS;
return 200;
}
proxy_pass http://192.168.16.191:3000/cross_origin ; #Проксируем реальный запрос к API Адрес обслуживания
}
}
Сервер допускает междоменную настройку:
#region Настроено для разрешения междоменных и сложных запросов.
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "*");
if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
{
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET,POST,PUT,DELETE,PATCH,OPTIONS");
HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept, Authorization");
//HttpContext.Current.Response.AddHeader("Access-Control-Max-Age", "1728000");
HttpContext.Current.Response.End();
}
#endregion
Примечание: Если на сервере разрешено междоменное использование, нет необходимости использовать прокси-сервер Nginx (или нет необходимости использовать Nginx).
Вы можете обратиться к этомуNginxдокумент:http://nginx.org/en/docs/http/ngx_http_headers_module.html coresПожалуйста, обратитесь к значению параметров внутри.:https://blog.csdn.net/m0_37886429/article/details/83617880
Заявление об авторских правах: Содержание этой статьи добровольно предоставлено пользователями Интернета, а мнения, выраженные в этой статье, представляют собой только точку зрения автора. Этот сайт предоставляет только услуги по хранению информации, не имеет никаких прав собственности и не принимает на себя соответствующие юридические обязательства. Если вы обнаружите на этом сайте какое-либо подозрительное нарушение авторских прав/незаконный контент, отправьте электронное письмо, чтобы сообщить. После проверки этот сайт будет немедленно удален.
Издатель: Лидер стека программистов полного стека, укажите источник для перепечатки: https://javaforall.cn/187130.html Оригинальная ссылка: https://javaforall.cn