2012-03-17 16 views
9

Niedawno pracowaliśmy nad dość nowoczesną aplikacją internetową i jesteśmy gotowi wdrożyć ją w wersji alfa/beta i uzyskać w niej rzeczywiste doświadczenie.Hosting statycznych treści w różnych domenach od serwisów internetowych, jak uniknąć cross-domain?

Mamy usługi internetowe oparte na ASP.Net (Web Api) i front-end JavaScript, który jest w 100% po stronie klienta MVC przy użyciu szkieletu.

Kupiliśmy naszą nazwę domeny, a ze względu na to pytanie nasza wdrożenie wygląda następująco:

webservices.mydomain.com (usługi sieciowe)

mydomain.com (JavaScript front-end)

Jeśli JavaScript próbuje rozmawiać z usługami internetowymi w subdomenie wysadzamy w powietrze z problemami związanymi z domeną, grałem z CORS, ale nie jestem zadowolony z obsługi wielu przeglądarek, więc liczę to jako opcja.

Na naszych komputerach programistycznych użyliśmy odwrotnego proxy IIS, aby przekazać wszystkie żądania do mydomain.com/webservices do webservices.mydomain.com - Które rozwiązuje wszystkie nasze problemy, ponieważ przeglądarka uważa, że ​​wszystko jest w tej samej domenie.

Moje pytanie brzmi, czy w publicznym wdrożeniu w jaki sposób rozwiązuje się tę kwestię najczęściej? Czy odwrotny proxy to odpowiednia metoda? Jeśli tak, to istnieją hostowane usługi, które oferują odwrotne proxy dla tej sytuacji? Czy istnieją lepsze sposoby wdrażania tego?

Chcę korzystać z CloudFront CDN, ponieważ wszystkie nasze serwery/usługi są hostowane przez Amazon, naprawdę staram się znaleźć informacje na temat, czy CDN może obsługiwać tego typu instalację.

Dzięki

+1

Być może moja osobista realizacja jest zbyt prosta (a jeśli tak, to byłabym też zainteresowana komentarzami innych osób). Chyba brakuje tego, jaki jest transport danych między frontem a plecami? W mojej prostej implementacji front komunikuje się z powrotem (usługa WCF) za pośrednictwem JSONP dla "prawdziwej" implementacji między domenami. Jeśli potrzebuję "proxy", to jego "proxy aplikacji" - front na mydomain.com będzie rozmawiać z handler (np. Ashx) na mydomain.com, który "proxy" żądania http do WCF na myotherdomain.com. – EdSF

+0

Czy używasz JQuery lub czysty javascript? (w przypadku JQuery, możesz użyć tego: http://usejquery.com/posts/the-jquery-cross-domain-ajax-guide) – ONOZ

+1

Dla WebAPI, możesz przejrzeć ten wpis na temat włączania CORS z JSONP, który powinien działać również w różnych przeglądarkach http://goo.gl/KjT6y – cecilphillip

Odpowiedz

1

co chce zrobić, to domaga cross-subdomeny, a nie w całości cross-domain. To są sztuczki do tego: http://www.tomhoppe.com/index.php/2008/03/cross-sub-domain-javascript-ajax-iframe-etc/

Na pytanie, w jaki sposób ten problem jest najczęściej rozwiązywany. Moja odpowiedź brzmi: ten problem jest zwykle UNIKAJ. W prawdziwym świecie konfigurowałbyś swoje domeny, tak jak nie potrzebujesz takich sposobów, aby uruchomić aplikację lub skonfigurować serwer proxy, aby przekazywał ci połączenia. JSONP to także hackowe rozwiązanie.

+0

Z ciekawości, jak skonfigurować swoje domeny, aby uniknąć tego problemu? Moim zdaniem "aplikacje internetowe" nie są jeszcze gotowe na prime time, tj. Nie można jeszcze zbudować i uruchomić czystej aplikacji internetowej javascript. CORS = Złe wsparcie, JSONP = Funkcje Hack/Limited, Inter-iframe coms = Hack. – Tyler

+0

Po prostu ustaw swoją usługę internetową jako mydomain.com/service z modułem równoważenia obciążenia z odwrotnym proxy i wszystkie problemy zniknęły. – Tisho

0

Możesz po prostu użyć JSONP dla żądań AJAX, a wtedy domena nie jest problemem.

Jeśli AJAX prosi o zwrócenie kodu HTML, można go przekształcić w ciąg znaków JSON.

Ten drugi jest jednak trochę niezręczny.

0

Masz 2/3 warstw

w służbie web kodowej behin klasy, dodaj atribute: <System.Web.Script.Services.ScriptService()> _

może trzeba dodać to w węźle system.web swojej sieci. config:

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

W interfejsie po stronie klienta

-Dodaj odniesienie do strony internetowej do usługi na poddomenie (exmpl. webservices.mydomain.com/svc.asmx) Visual Studio zrobić "klasy proxy"

-add funkcjonalność w masterpage na | Strona użytkownika | kod kontrolki behin -Simply nazywają to z funkcji po stronie klienta

można wykorzystywać funkcjonalność AJAX za pomocą scriptmanager lub użyj innego systemu, takiego jak JQuery.

Jeśli Twoja strona główna jest skompilowana w .NET 3.5 lub starszej wersji, musisz dodać odwołanie do przestrzeni nazw System.Web.Extensions i zadeklarować ją w pliku web.config.

0

Jeśli masz przepustowość (sieciowe We/Wy i procesor) do obsługi tego, odwrotne proxy jest doskonałym rozwiązaniem. Dobre odwrotne proxy będzie nawet buforowało statyczne wywołania, aby złagodzić opóźnienie sieci wprowadzone przez serwer proxy.

Inną opcją jest skonfigurowanie odpowiednich plików strategii i/lub nagłówków. Zrobić to w niektórych dostawców chmury może być trudne, a nawet niemożliwe. Ostatnio napotkałem problemy z plikami czcionek, a IE nie jest zadowolony z wywołań międzydomenowych. Nie mogliśmy uzyskać dostawcy pamięci masowej, którego używaliśmy do ustawiania poprawnych nagłówków, więc hostowaliśmy je lokalnie, zamiast zajmować się odwrotnym proxy.

1

Aby umożliwić to Web Service na miano ze skryptu przy użyciu ASP.NET AJAX, dodaj następującą linię do pierwszej usługi internetowej opóźnieniem kodu:

[System.Web.Script.Services.ScriptService] 
0

easyXDM jest domeną krzyż Javascript plugin, który może warte poznania. Korzysta ze standardów, gdy obsługuje je przeglądarka, i usuwa różne hacki wymagane, gdy przeglądarka nie obsługuje standardów. Od easyXDM.net:

easyXDM jest biblioteką JavaScript, który umożliwia jak deweloper łatwo obejść ograniczenia ustawionego w miejscu o tym samym pochodzeniu polityki, z kolei dzięki czemu można łatwo komunikować się i wystawiać JavaScript Interfejsy API wykraczają poza granice domen.

Rdzeń easyXDM zapewnia stos transportowy, który może przekazywać wiadomości oparte na łańcuchach między dwoma oknami, konsumentem (główny dokument ) i dostawcą (dokument dołączony za pomocą elementu iframe). To robi się za pomocą jednej z kilku dostępnych technik, zawsze wybierając najbardziej wydajną dla bieżącej przeglądarki. Dla wszystkich implementacji stos transportu oferuje dwukierunkową niezawodność, kolejkowanie i weryfikację nadawcy.

Jednym z celów easyXDM jest obsługa wszystkich przeglądarek, które są w powszechnym użyciu pod jedną nazwą i zapewnienie tych samych funkcji wszystkim. Jedną ze strategii osiągnięcia tego celu jest przestrzeganie zdefiniowanych standardów, a także użycie funkcji wykrywania cech w celu zapewnienia użycia najbardziej wydajnego.

Cytując łatwy XDM Autora:

... witryn takich jak LinkedIn, Twitter i Disqus jak również aplikacje działają przez firmę Nokia i inni zbudowali swoje aplikacje w górnej części ram wiadomości dostarczonych przez easyXDM.

Tak więc easyXDM najwyraźniej nie jest jakimś poxem, ale przyznaję, że jest to duża zależność, aby wziąć na siebie swój projekt.

Obecny stan sieci polega na tym, że jeśli chcesz przesuwać obwiednię, musisz użyć funkcji wykrywania obiektów i polyfills lub po prostu zmusić użytkowników do przejścia na przeglądarkę HTML5. Jeśli to sprawia, że ​​się skręcasz, nie jesteś sam, ale te polyfile są rodzajem tymczasowego zła potrzebnego, by dostać się z miejsca, w którym chcielibyśmy być.

Zobacz także this SO question.

Powiązane problemy