Появилась необходиимость делать запросы с одного домена в другой, например, дергаете API другого домена? Используете при этом Content-Type: application/json?
Поздравляю! Пора изучить CORS - Cross-Origin Resource Sharing, кросс-доменные запросы.
Стандарт CORS различает “простые” и “сложные” запросы. Простым считается запрос методами HEAD, GET, POST и заголовками: Accept, Accept-Language, Content-Language, Last-Event-ID, Content-Type, но только со значениями: application/x-www-form-urlencoded, multipart/form-data, text/plain
Если запрос отличается от простого, браузер добавит заголовок Origin с адресом страницы, откуда инициирован запрос. Сервер получив такой запрос, прочтет Origin и решит, как его обработать.
Заголовок ответа Access-Control-Allow-Origin сообащает, с какого домена разрешено запрашивать данные. Это может быть как веб-адрес, так и знак *, если разрешено всем. Несколько адресов через запятую не поддерживается.
Клиент сначала сделает запрос OPTIONS (preflight request), на который сервер должен ответить какие методы и заголовки он принимает.
В моем rails-backend (на домене api.test.example.ru) для настройки CORS используется gem rack-cors, вот его настройки в config/initializers/cors.rb:
module ApiRails
class Application < Rails::Application
config.middleware.insert_before 0, Rack::Cors do
allow do
origins /lk.test.example.ru\z/
resource '*',
headers: :any,
methods: %i(get post delete options),
expose: ['access-token', 'expiry', 'token-type', 'uid', 'Authorization'],
max_age: 600
end
end
end
end
Для проверки можно использовать команду:
curl -v -H "Origin: https://lk.test.example.ru" https://api.test.example.ru.