Исключить междоменный / поддоменный запрос ОПЦИИ для веб-сайта ASP.NET и веб-интерфейса ASP.NET
У меня есть ASP.Net MVC 4 Website
и другой ASP.Net Web API
project.Currently оба размещены на разных доменах. Я использую amplify.js
использовать API на моем внешнем интерфейсе. Так как оба веб-сайта размещены на разных доменах, это всегда междоменный запрос, когда я звоню своему API
от UI
(Я использую CORS
для этой цели.). Это приводит к дополнительным OPTIONS
запрос для каждого HTTP API
я звоню, что увеличивает накладные расходы. Я также пытался разместить эти 2 сайта на поддоменах, но все же OPTIONS
запрос есть, я хочу избавиться от этих лишних запросов.
Есть ли способ, которым я могу устранить OPTIONS
запрос?
2 ответа
Есть ли способ, которым я могу исключить запрос ОПЦИИ?
Вы могли бы использовать JSONP
вместо CORS. К сожалению, этого может быть недостаточно для вашего сценария, потому что JSONP работает только с GET-запросами (jQuery's $.ajax
метод имеет это ограничение).
Или, если вы размещаете 2 в том же домене, и вы не нарушаете same origin policy
Вы можете использовать обычный запрос AJAX.
Чтобы предотвратить междоменный запрос, исходный и целевой домены должны быть точно такими же: в хосте, домене и порте (одна и та же политика происхождения). Тем не менее, у вас есть несколько способов предотвратить CORS:
- Поместить веб-сайт и API в один домен - довольно очевидно;)
- Создайте какой-нибудь серверный прокси-скрипт (PHP, Node.js или любой другой), который направляет запрос через curl или что-то похожее на API. Это должно предотвратить заголовки OPTIONS, но нужен другой HTTP-запрос (AJAX <-> веб-сайт httpd <-> API httpd).
- Аналогичное решение заключается в использовании Apache в качестве обратного прокси-сервера ( здесь). Как и в случае скриптового решения, это также приводит к двум HTTP-запросам, но я предполагаю, что обратный прокси-сервер вызывает меньше накладных расходов.
- Вы также можете использовать JSONP, но API должен поддерживать его (поэтому вам может потребоваться переопределить интерфейс API веб-сайта<->), и ваш API больше не будет RESTful (если вы заботитесь об этом).
Я бы выбрал один или три варианта, так как решение для скрипта кажется слишком неуклюжим;) Я бы также предложил проверить, действительно ли необходимо запускать API и веб-сайт в разных доменах. Заголовок OPTIONS обычно не вызывает слишком много накладных расходов, поэтому вы можете сначала оптимизировать другие части кода.
Может быть, вы могли бы разместить сайт и API в одном домене и только базу данных для API на другом сервере? Просто идея...