Простое сравнение междоменных преимуществ CORS и обратного агента NGINX

Nginx

Извините опять те же старые вещи. . . Пожалуйста, принесите резюме, чтобы убить меня. . . Ants Gold Service - Credit Seaname Recuctions Friends Front End P6 / 7,Опубликовать ссылку JD, количество мест ограничено, приходите быстрее. . .


Я написал несколько постов об основных принципах и распространенных заблуждениях, связанных с междоменными решениями, после проектов по разделению внешнего и внутреннего интерфейса, в основном включая обратный прокси-сервер CORS и Nginx. Обе эти схемы используются, и у каждой есть свои преимущества и недостатки.Что касается того, какую схему использовать, мнения у всех не совсем одинаковы.Эта статья в основном расширяет это, от фронтенда, бэкенда и сервера конфигурация, безопасность и гибкость миграции, масштабируемость и т. д., подробно сравните преимущества и недостатки двух схем, чтобы помочь вам в выборе схемы на более позднем этапе.


1. Конфигурация внешнего интерфейса

CORS-решение: при междоменном использовании некоторые браузеры по умолчанию не передают файлы cookie, поэтому для переноса файлов cookie необходимо установить атрибут withCrendetails запроса xmlhttprequest.При использовании vue-resouce настройки следующие.

Vue.http.options.credentials = true

При использовании axios в перехватчике можно установить следующее

axios.interceptors.request.use((config) => {
    config.withCredentials = true
    return config
}, (error) => {
    return Promise.reject(error)
})

При использовании собственного объекта XMLHttpRequest следующим образом:

var xhr = new XMLHttpRequest();
xhr.withCredentials = true;

Если вам не нужно передавать файлы cookie, лучше установить для него значение false, чтобы избежать ситуации, когда файлы cookie по умолчанию разрешены для переноса в разных браузерах.

Обратный прокси Nginx: в настоящее время внешний интерфейс эквивалентен не междоменному, что согласуется с обычными запросами, и дополнительная настройка не требуется.

Во-вторых, внутренняя конфигурация

CORS-решение: Для простого запроса вам нужно упаковать заголовок серии ACA,

'Access-Control-Allow-Origin' '*';
'Access-Control-Allow-Credentials' "true"; 
'Access-Control-Allow-Headers' 'X-Requested-With';

Для сложных междоменных запросов также требуется одноэтапный процесс предварительной проверки.

Обратный прокси Nginx: в настоящее время серверная часть не является междоменной, соответствует обычным запросам, и дополнительная настройка не требуется.

3. Конфигурация сервера

CORS-решение: без.Обратный прокси Nginx: Программа работы сосредоточилась на перекрестном домене Nginx Server, настроен следующим образом

...
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Real-Port $remote_port;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
...
location /api {
   proxy_pass https://b.test.com; # 设置代理服务器的协议和地址
   proxy_cookie_domain b.test.com  a.test.com; # 修改cookie,针对request和response互相写入cookie
}       
...

Принцип можно увидеть в предыдущих двух статьях

4. Безопасность

CORS-решение: Поскольку в это время браузер добавит атрибут origin по умолчанию, сервер может напрямую найти источник запроса, что удобно для контроля источника и блокировки ссылки из черного списка. В то же время доменное имя и порт сервера будут раскрыты.Обратный прокси Nginx: нет заголовка источника по умолчанию, который можно использовать в решении обратного прокси-сервера, но IP-адрес клиента и прокси-сервера на всех уровнях можно просмотреть через заголовок X-Forward-For, а также может быть определена определенная степень обратного отслеживания и экранирования черного списка. достигнуто. В обратном прокси-сервере адрес интрасети может использоваться для доступа к интерфейсному серверу, что может в определенной степени защитить интерфейсный сервер от раскрытия.

5. Гибкость и масштабируемость трансплантации

CORS-решение: Вам нужно только настроить черный и белый список в центре кода или конфигурации, что удобно для портирования и расширения.Обратный прокси Nginx: доменное имя службы разных окружений может не совпадать, поэтому конфигурация nginx тоже отличается, что не удобно для портирования. Для масштабируемости, когда есть новый проект, которому требуется доступ к интерфейсному серверу, необходимо сначала получить доступ к доменному имени, указанному сервером в nginx, а затем обратно проксировать доменное имя сервера на интерфейсный сервер, например

server { 
    listen       8443;
    server_name  a.test.com;    
    client_max_body_size            100m;
        
    ssl ...

    location /micro{
        proxy_pass   https://b.test.com;  #反向代理
        proxy_cookie_domain b.test.com a.test.com; #修改cookie
        add_header 'Access-Control-Allow-Origin' 'htps://c.test.com';
        add_header 'Access-Control-Allow-Credentials' "true"; 
        add_header Access-Control-Allow-Headers X-Requested-With;
    }
}

В настоящее время междоменная модель изменилась с простого обратного прокси-сервера с a.test.com на b.test.com на обратный прокси-сервер с a.test.com на b.test.com и c.test. .comCORS Обратный прокси-сервер на a.test.com, а затем на b.test.comd. Это немного сбивает с толку, но вы поймете, если хорошенько об этом подумаете. Это, несомненно, увеличивает стоимость обслуживания в более поздний период.

Всестороннее сравнение

Исходя из вышеизложенного, мы можем получить примерно следующее

Item CORS Обратный прокси Nginx
Конфигурация кода -- внешний интерфейс credentials=true без
Конфигурация кода -- фон setHeader: ACA-Origin, ACA-Method, ACA-Credentials и т. д. без
конфигурация сервера без Конфигурация Nginx
Гибкость миграции Высокая, дополнительная настройка не требуется Низкий, каждая конфигурация среды может отличаться
безопасность Управляемая источником, прямая прослеживаемость X-Forwarded-For трассирует многоуровневые источники
новое расширение проекта Управление черным и белым списком Обновите конфигурацию, междоменная модель изменится

Контрастный вывод

Подводя итог, для общедоступных базовых служб, поскольку в стыковке может участвовать больше интерфейсных проектов, а также больше сред разработки, тестирования и развертывания, в целом я более склонен рекомендовать вам использовать решение CORS. Для некоторых небольших проектов с сильной оппозицией использование nginx может снизить затраты на разработку, а также ускорить разработку и запуск. Разумеется, конкретное использование следует совмещать с реальной работой и использовать по мере необходимости. Кроме того, при использовании обратного прокси-сервера Nginx рекомендуется использовать внутреннее доменное имя/ip в качестве входа на интерфейсный сервер и стараться не выставлять его наружу, чтобы избежать ненужных проблем с безопасностью.


EMMM, мы все еще рекрутируем людей недавно, Ant Financial - Seaname Credit - набор в конечном итоге P6 / 7! Редкая возможность! Ну давай же! ты сможешь! , Дачанг, как вы знаете, бонус будет разделен на половину вас. Если вы заинтересованы, приходите и попробуйте. Если вы заинтересованы в WeChat Chat, добавьте меня Heiohiio. Вы также можете бросить свое резюме прямо к моему почтовому ящику ~ Heioray @ sina.com.


~Конец этой статьи~Добро пожаловать для совместного обсуждения~