Размещение статического контента в другом домене от веб-сервисов, как избежать междоменного? - PullRequest
9 голосов
/ 17 марта 2012

Недавно мы работали над довольно современным веб-приложением и готовы развернуть его для альфа / бета-версии и получить некоторый реальный опыт работы с ним.

У нас есть веб-сервисы на основе ASP.Net(Web Api) и JavaScript-интерфейс, который на 100% на стороне клиента MVC использует магистраль.

Мы приобрели наше доменное имя, и ради этого вопроса наше развертывание выглядит следующим образом:

webservices.mydomain.com (веб-сервисы)

mydomain.com (интерфейс JavaScript)

Если JavaScript пытается установить связь с веб-сервисами на поддомене, мы взрываемся с помощьюПроблемы с несколькими доменами. Я поиграл с CORS, но меня не устраивает поддержка кросс-браузеров, поэтому я считаю это опцией.

На наших компьютерах для разработки мы использовали обратный прокси-сервер IIS для пересылкивсе запросы к mydomain.com/webservices к webservices.mydomain.com - что решает все наши проблемы, так как браузер считает, что все находится в одном домене.

Так что мой вопросВ публичном развертывании вопрос, как эта проблема чаще всего решается?Является ли обратный прокси-сервер правильным способом?Если да, есть ли какие-либо размещенные сервисы, которые предлагают обратный прокси-сервер для этой ситуации?Существуют ли более эффективные способы развертывания этого?

Я хочу использовать CloudFront CDN, поскольку все наши серверы / службы размещены на Amazon, я действительно изо всех сил пытаюсь найти информацию о том, может ли CDN поддерживать этот тип настройки, хотя.

Спасибо

Ответы [ 6 ]

1 голос
/ 13 июня 2012

Чтобы разрешить вызов этой веб-службы из сценария с использованием ASP.NET AJAX, добавьте следующую строку в первый код веб-службы:

[System.Web.Script.Services.ScriptService]
1 голос
/ 26 марта 2012

То, что вы пытаетесь сделать, это кросс-субдоменные вызовы, а не кросс-доменные.Вот какие уловки для этого: http://www.tomhoppe.com/index.php/2008/03/cross-sub-domain-javascript-ajax-iframe-etc/

На вопрос, как эта проблема наиболее часто решается.Мой ответ: эта проблема обычно избегается.В реальном мире вы должны настроить свои домены так, чтобы вам не нужно было обходить их, просто чтобы запустить приложение или настроить прокси-сервер для переадресации вызовов за вас.JSONP также является хакерским решением.

0 голосов
/ 25 июня 2012

easyXDM - это междоменный плагин Javascript, который стоит изучить.Он использует стандарты, когда браузер поддерживает их, и абстрагирует различные хаки, необходимые, когда браузер не поддерживает стандарты.От easyXDM.net:

easyXDM - это библиотека Javascript, которая позволяет вам, как разработчику, легко обойти ограничения, установленные единой политикой происхождения, что, в свою очередь, облегчает общение и раскрытие javascript.API через границы домена.

В основе easyXDM предоставляет транспортный стек, способный передавать сообщения на основе строк между двумя окнами, потребителем (основным документом) и поставщиком (документ, включенный с использованием iframe).Это делается с помощью одного из нескольких доступных методов, всегда выбирая наиболее эффективный для текущего браузера.Для всех реализаций транспортный стек предлагает двунаправленность, надежность, постановку в очередь и проверку отправителя.

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

Цитируя автора XDM, просто:

... сайты, такие как LinkedIn, Twitter и Disqus, а также приложения, запускаемые Nokia и другими, создали свои приложения поверх платформы обмена сообщениями, предоставляемой easyXDM.

Так что easyXDM - это явно не посмешище.хак, но я признаю, что это большая зависимость для вашего проекта.

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

См. Также этот ТАК вопрос .

0 голосов
/ 08 июня 2012

Если у вас есть пропускная способность (сетевой ввод / вывод и процессор) для этого, обратный прокси-сервер является отличным решением. Хороший обратный прокси-сервер даже кеширует статические вызовы, чтобы помочь уменьшить задержку в сети, вызванную прокси.

Другой вариант - настроить правильные файлы политики и / или заголовки междоменной политики. В некоторых облачных провайдерах это может быть сложно или даже невозможно. Недавно я столкнулся с проблемами с файлами шрифтов, и IE не удовлетворен междоменными вызовами. Нам не удалось получить поставщика облачного хранилища, который мы использовали для установки правильных заголовков, поэтому мы размещали их локально, а не имели дело с обратным прокси.

0 голосов
/ 21 апреля 2012

У вас есть 2/3 слоя

в веб-сервисе класс code-behin, добавьте этот атрибут: <System.Web.Script.Services.ScriptService()> _

возможно, вам нужно добавить это в узел System.web вашего web.config:

<webServices>
        <protocols>
          <add name="AnyHttpSoap"/>
          <add name="HttpPost"/>
          <add name="HttpGet"/>
        </protocols>
      </webServices>

В интерфейсе на стороне клиента

-Добавить веб-ссылку на службу на поддомене (например, webservices.mydomain.com/svc.asmx) Визуальная студия делает "прокси класс"

-добавить функциональность в коде элемента | страницы | -Просто вызвать эту функцию со стороны клиента

Вы можете использовать функциональность AJAX со скриптовым менеджером или использовать другую систему, такую ​​как JQuery.

Если ваш основной веб-сайт скомпилирован в .NET 3.5 или более ранней версии, вам нужно добавить ссылку на пространство имен System.Web.Extensions и объявить ее в файле web.config.

0 голосов
/ 26 марта 2012

Вы можете просто использовать JSONP для запросов AJAX, тогда междоменная проблема не является проблемой.

Если запросы AJAX возвращают некоторый HTML, он может быть экранирован в строку JSON.

Второй немного неловкий.

...