• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Publiczne API - Access-Control-Allow-Origin

Object Storage Arubacloud
+1 głos
1,904 wizyt
pytanie zadane 22 października 2017 w JavaScript przez robkop Użytkownik (930 p.)

Bawię się ostatnio różnymi API (https://bitcoin-checker-blockchain.firebaseapp.com/ - takie sobie zrobiłem).
Chcę stworzyć narzędzie do prezentowania na stronie komunikatów RSO. W teorii jest udostępnione API z JSONem i XMLem ( http://komunikaty.tvp.pl/integracja )
ale 'ni huhu'. Dostaję komunikat "No 'Access-Control-Allow-Origin' header is present on the requested resource...".

Rozumiem, że to oni musieliby dodać header na serwerze, który pozwoliłby 
dostać się tam mojemu "serwerowi"? Dobrze to rozumiem?

Nie ma z nimi żadnego kontaktu.

 

function loadDoc() {
    const xhttp = new XMLHttpRequest();
    xhttp.open("GET", "http://komunikaty.tvp.pl/komunikatyxml/mazowieckie/wszystkie/0?_format=json");
    xhttp.send();
    xhttp.onreadystatechange = function () {
        if (this.readyState == 4 && this.status == 200) {
            const x = JSON.parse(xhttp.responseText);
            console.log(x)
        };
    };
};

 

1 odpowiedź

+3 głosów
odpowiedź 22 października 2017 przez Gynvael Coldwind Nałogowiec (27,530 p.)

Generalnie są dwa rodzaje API:

1. API dla przeglądarek, które ma ustawione wszystkie potrzebne nagłówki CORS (patrz ten wątek na forum z wczoraj) lub działa na zasadzie dziwnych i semi-bezpiecznych mechanizmów typu JSONP.

2. API dla aplikacji działających poza przeglądarką, opartych o połączenia HTTP - np. server-side jakiegoś serwisu może odpytywać API innego serwisu, a pobrane dane zapisywać w lokalnej bazie (cache) i prezentować użytkownikom owego serwisu.

Bardzo dużo API udostępnianych przez różne serwisy jest tego drugiego rodzaju, tj. nie są zupełnie przystosowane do współpracy z przeglądarkowym Same Origin Policy, a więc nie da się z nich bezpośrednio korzystać z JavaScriptu umieszczonego na losowej stronie i wykonywanego w jej kontekście z przeglądarki.

Powody tego mogą być różne, ale główne z nich to:

  • Takie API może wymagać uwierzytelnienia, a klucz/hasło do niego powinno być tajne (więc nie powinno się umieszczać klucza w kodzie wysyłanym do użytkowników razem z resztą strony, tylko powinien być ukryty po stronie serwerowej).
  • Twórcy serwisu nie chcą obsługiwać tysięcy/milionów użytkowników innych serwisów (to jednak koszty dla łącza/prądu/etc) i wolą, żeby obcy serwis po stronie serwerowej pobrał sobie dane i we własnym zakresie rozesłał je do własnych użytkowników.
  • Używanie danego API jest pozbawione sensu w kontekście przeglądarki (to oczywiście wynika ze specyfiki danego API).

Jeśli koniecznie chcesz pobawić się różnymi API z przeglądarki, możesz to zrobić na dwa sposoby:

  1. Zrobić sobie proxy na własnym serwerze, które będzie przekazywać zapytania API do innych serwerów i odpowiadać przeglądarce w obrębie tego samego kontekstu co reszta strony (i wykonywanego JS).
  2. Zamiast testować na stronie, można testować w rozszerzeniu do przeglądarki - takowym zazwyczaj można nadać uprawnienia pozwalające na dostęp do innych kontekstów (i obejścia Same Origin Policy) w ten czy inny sposób.

Powodzenia :)

 

 

 

Podobne pytania

0 głosów
1 odpowiedź 848 wizyt
pytanie zadane 1 października 2020 w JavaScript przez creend Gaduła (4,700 p.)
+1 głos
0 odpowiedzi 382 wizyt
pytanie zadane 10 lutego 2021 w JavaScript przez michal_php Stary wyjadacz (13,700 p.)
0 głosów
3 odpowiedzi 9,232 wizyt

92,576 zapytań

141,426 odpowiedzi

319,652 komentarzy

61,961 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...