Проблема з CORS (Cross-Origin Resource Sharing) може виникнути під час взаємодії між веб-додатками, особливо коли вони знаходяться на різних доменах. Один із таких випадків – це співпраця між Leaflet, популярною бібліотекою для відображення карт на веб-сторінках, та сервером QGIS. У даній статті ми розглянемо причини виникнення проблеми CORS у взаємодії між Leaflet та QGIS SERVER та можливі шляхи вирішення цієї проблеми.
Проблема з CORS зазвичай виникає тоді, коли веб-додаток, запущений на одному домені, намагається зробити запит до сервера, що розташований на іншому домені. Браузери встановлюють обмеження щодо таких запитів з міркувань безпеки, і вони можуть блокуватися, якщо сервер не надає відповідні заголовки CORS.
У випадку Leaflet та QGIS SERVER ситуація ускладнюється додатковими факторами, такими як наявність сертифіката безпеки (HTTPS) на веб-сайті, який відображає карти Leaflet, та використання “попередніх перевірок” (preflight requests) браузером, які Chrome автоматично надсилає до сервера QGIS, коли відбувається зміна протоколу з HTTP на HTTPS.
1 |
Розкодовано: Leaflet та QGIS SERVER: проблема з CORS - запити на попередню перевірку не вдаються. Я борюся з таким випадком: у мене є веб-сайт з протоколом http. На сторінках є інтерфейс Leaflet, який запитує послуги (карти) від різних доменів сервера QGIS. Раніше це працювало ідеально: всі GET-запити у заголовках були повернені сервером QGIS з Access-Control-Allow-Origin: * (джокер) та статусом 200. Коли я додав сертифікат (https) на вихідний веб-сайт, Chrome почав надсилати до сервера QGIS запити CORS на попередню перевірку (у режимі "OPTION"). Але в цьому випадку сервер QGIS не повертав відповідь (нульовий байт). Таким чином, Chrome видає помилку: "Запит на перехресне відображення ресурсів (CORS) був заблокований, оскільки відповідь на пов'язаний запит на попередню перевірку не вдалася, мала невдалий HTTP-код статусу і/або була переадресацією. Щоб виправити цю проблему, переконайтеся, що всі запити OPTIONS на попередню перевірку CORS відповідають успішним HTTP-кодом статусу (2xx) і не переадресовуються". Так чи інакше, інтерфейс Leaflet отримує дані карти від QGIS, навіть якщо виникає ця помилка... Я бачу на Chrome GET-запити. Сервер QGIS також відповідає статусом 200. В кінці я маю багато цих помилок, але все одно отримую дані. Шукаю спосіб або вимкнути запити на попередню перевірку до сервера QGIS, або налаштувати сервер QGIS (який належить мені, але розташований в іншому місці), щоб відповідати на запити на попередню перевірку. |