Scott Tiger Tech Blog

Blog technologiczny firmy Scott Tiger S.A.

Archiwum dla Sierpień 1st, 2012

Cross-Origin Resource Sharing (CORS)

Autor: Piotr Karpiuk o 1. sierpnia 2012

W miarę rozwoju Internetu coraz większego znaczenia nabiera współdzielenie zasobów, a także aplikacje agregujące dane pochodzące z różnych źródeł. Aplikacje webowe typu mashup udostępniają na jednej stronie WWW dane pochodzące z różnych serwerów, np. na jednym pulpicie użytkownik może mieć kursy walut, prognozę pogody, program telewizyjny itp. Jeszcze do niedawna implementacja takich witryn napotykała spore problemy za sprawą polityki bezpieczeństwa JavaScriptu. Chodzi o zasadę same origin policy, która utrudnia skryptom strony WWW komunikację się z innymi serwerami niż ten, z którego pochodzi witryna. Twórcy aplikacji webowych rozwiązywali ten problem albo niewydajnie (gdy serwer witryny służy przeglądarce jako pośrednik w komunikacji z innym serwerem), albo uciekając się do podejrzanych hakerskich technik w rodzaju JSONP.

Rozszerzenie AJAXa obecne już od dłuższego czasu we współczesnych przeglądarkach udostępnia mechanizm Cross-Origin Resource Sharing (CORS), znacznie upraszczający cały proces.

Rozważmy taki scenariusz: serwer api.alice.com udostępnia dane, z których chce skorzystać aplikacja webowa umieszczona na api.bob.com.

Z punktu widzenia programisty JavaScript wywołanie AJAX CORS wygląda tak jak komunikacja z macierzystym serwerem:

          xhr.open('GET', 'http://api.alice.com/cors', true);
          xhr.withCredentials = true;
          xhr.send();

(Opcjonalnie można ustawić własność withCredentials obiektu XHR, aby spowodować żeby w zleceniu do zdalnego serwera poszły również ciasteczka domeny api.alice.com i żeby ta domena mogła ustawiać ciasteczka. Trzeba nadmienić, że w przeciwieństwie do samej przeglądarki kod JavaScriptu aplikacji api.bob.com nie będzie miał dostępu do ciasteczek domeny api.alice.com – ani w postaci nagłówków HTTP, ani w document.cookie).

Różnice w porównaniu ze zwykłym zleceniem AJAX do macierzystego serwera występują w nagłówkach HTTP automatycznie wysyłanych przez przeglądarkę:

        Origin: http://api.bob.com

Czytaj więcej »

Napisany w JavaScript, WWW | Brak komentarzy »