Для вирішення питання "Чому?" Частина, чому браузери не застосовують ту саму політику походження (для якої CORS є розслабленням) для WebSockets, на відміну від викликів AJAX, полягає в тому, що WebSockets були введені після встановлення значення перехресних запитів, і тому, що вони ' не підпадаючи під дію SOP, історична причина перевірок на стороні клієнта CORS не застосовується.
Що стосується AJAX, то в часи загальної політики єдиного походження сервери ніколи не очікували, що перевірений автентифікацією браузер надсилатиме запит з іншого домену 1 , і тому не потрібно було переконатися, що запит надходить із надійного місця 2 , просто перевірте сесійне печиво. Пізніше такі розслаблення, як CORS, повинні були перевіряти на стороні клієнта, щоб уникнути зловживання існуючими програмами , порушуючи це припущення (фактично здійснюючи атаку CSRF ).
Якби Інтернет винайшли сьогодні, знаючи те, що ми знаємо зараз, для AJAX не потрібні ні SOP, ні CORS, і цілком можливо, що вся перевірка залишиться на сервері.
WebSockets, як новіша технологія, призначені для підтримки міждоменних сценаріїв із самого початку. Будь-хто, хто пише логіку сервера, повинен знати про можливість перехресних запитів та виконувати необхідну перевірку, без необхідності жорстких запобіжних заходів із боку браузера, а саме CORS.
1 Це спрощення. Запити GET із перехресним походженням на ресурси (включаючи теги <img>, <link> та <script>) та запити на подання форми POST завжди дозволялися як фундаментальна особливість Інтернету. На сьогоднішній день виклики AJAX з перехресним походженням, запити яких мають однакові властивості, також дозволені і відомі як прості запити перехресного походження . Однак доступ до повернутих даних із таких запитів у коді не дозволяється, якщо це явно не дозволено заголовками CORS сервера. Крім того, саме ці "прості" запити POST є основною причиною того, чому маркери анти-CSRF необхідні серверам для захисту від шкідливих веб-сайтів.
2 Насправді безпечний спосіб перевірки джерела запиту був навіть недоступний, оскільки Referer
заголовок може бути підроблений, наприклад за допомогою вразливості відкритого перенаправлення. Це також показує, наскільки погано тоді розуміли вразливості CSRF.