Кросдоменний AJAX, Developer Notes
Кросдоменний AJAX
На питання, як зробити AJAX запит до іншого домену, я завжди відповідав, що ніяк, і пропонував як альтернативу jsonp, проксі, флеш, фрейми. Але, виявляється, більшість сучасних браузерів (IE8+, FF3.5+, Chrome 6+ та Safari 4+) цілком підтримує кросдоменний XMLHTTPRequest.
З клієнтів все залишається без змін. Тільки тепер браузер не блокує запит під час надсилання, а додає до нього заголовок з ім'ям домену, звідки робиться запит:Origin: example.com
Відповідь від сервера він просто не пропускає, сервер повинен додати спеціальний заголовок:Access-Control-Allow-Origin: * Замість зірочки сервер може вказати конкретний домен, якому дозволено отримати відповідь.
Ось таке елегантне рішення. Без зайвих HTTP запитів, без зміни клієнтського API, без порушення безпеки існуючих програм (адже підвантажити картинку з іншого домену або відправити форму в іфрейм можна було й раніше), і нарешті, на відміну від Флеша, з гнучким налаштуванням прав доступу до індивідуальних сторінок.
У чому проблематичність кросдоменних запитів? Всі браузери обмежують нашу свободу для безпеки. Тому запити з «недовірених» джерел припиняються на корені. А що робити, якщо ми довіряємо джерелам? Правильно використовувати «милиці» (багато з яких є загальноприйнятою практикою).
В рамках юзерскриптів слід враховувати обмеження, що накладаються оточенням, в якому запускаються скрипти (подробиці в цій статті) плюс додаткова важлива умова: наявність доступу до серверної частини (наявність (або можливість створити) серверного API для реалізації конкретного методу запиту )!
Нижче наведено таблицю, в якійпредставлені деякі «милиці» та їх застосовність для юзерскриптів.