Исключить междоменный / поддоменный запрос ОПЦИИ для веб-сайта 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:

  1. Поместить веб-сайт и API в один домен - довольно очевидно;)
  2. Создайте какой-нибудь серверный прокси-скрипт (PHP, Node.js или любой другой), который направляет запрос через curl или что-то похожее на API. Это должно предотвратить заголовки OPTIONS, но нужен другой HTTP-запрос (AJAX <-> веб-сайт httpd <-> API httpd).
  3. Аналогичное решение заключается в использовании Apache в качестве обратного прокси-сервера ( здесь). Как и в случае скриптового решения, это также приводит к двум HTTP-запросам, но я предполагаю, что обратный прокси-сервер вызывает меньше накладных расходов.
  4. Вы также можете использовать JSONP, но API должен поддерживать его (поэтому вам может потребоваться переопределить интерфейс API веб-сайта<->), и ваш API больше не будет RESTful (если вы заботитесь об этом).

Я бы выбрал один или три варианта, так как решение для скрипта кажется слишком неуклюжим;) Я бы также предложил проверить, действительно ли необходимо запускать API и веб-сайт в разных доменах. Заголовок OPTIONS обычно не вызывает слишком много накладных расходов, поэтому вы можете сначала оптимизировать другие части кода.

Может быть, вы могли бы разместить сайт и API в одном домене и только базу данных для API на другом сервере? Просто идея...

Другие вопросы по тегам