Zagłębiam się w tworzenie interfejsów API RESTful i do tej pory pracowałem z kilkoma różnymi platformami. Oczywiście natrafiłem na zasady tego samego pochodzenia i teraz zastanawiam się, jak wymuszają to serwery sieciowe (a nie przeglądarki). Z tego, co rozumiem, pewne wymuszanie wydaje się mieć miejsce na końcu przeglądarki (np. Honorowanie nagłówka Access-Control-Allow-Origin otrzymanego z serwera). Ale co z serwerem?
Załóżmy na przykład, że serwer sieciowy obsługuje aplikację internetową Javascript, która uzyskuje dostęp do interfejsu API, również hostowanego na tym serwerze. Zakładam, że serwer wymusiłby zasady tego samego pochodzenia --- tak, aby tylko javascript hostowany na tym serwerze miał dostęp do interfejsu API. Uniemożliwi to komuś innemu napisanie klienta javascript dla tego interfejsu API i hostowanie go w innej witrynie, prawda? Jak więc serwer sieciowy mógłby zatrzymać złośliwego klienta, który próbowałby wysyłać żądania AJAX do swoich punktów końcowych interfejsu API, twierdząc, że uruchamia javascript pochodzący z tego samego serwera WWW? W jaki sposób najpopularniejsze serwery (Apache, nginx) chronią przed tego rodzaju atakami? A może moje rozumienie tego jest jakoś nie na miejscu?
Czy też zasada krzyżowania pochodzenia jest egzekwowana tylko po stronie klienta?