Рекомендации по получению межсайтовых ответов JSON на POST?
-
03-07-2019 - |
Вопрос
Я работаю в интрасети с несколькими поддоменами.Я контролирую каждый поддомен, поэтому безопасность межсайтовых запросов не вызывает беспокойства.У меня есть сценарии PHP с ответами JSON, которые я хотел бы вызывать из нескольких поддоменов без дублирования.Для запросов GET я могу сделать это с помощью AJAX и JSONP, но с запросами POST это не работает.Я вижу несколько альтернатив, ни одна из которых не кажется очень хорошей:
- POST в копию на локальном субдомене с минимальным ответом, затем ПОЛУЧИТЕ полный ответ из центрального расположения с помощью JSONP.
- И POST, и GET для копии на локальном поддомене с помощью JSON.
- Используйте mod_rewrite для использования локальных URL-адресов с центральным скриптом на серверной стороне с JSON.
- Используйте символические ссылки для использования локальных URL-адресов с центральным скриптом на серверной стороне с JSON.
Я упускаю что-то более простое?Что бы ты сделал здесь?
Решение
просто посмотри на это https://developer.mozilla.org/En/HTTP_access_control страница.Все, что вам нужно — добавить заголовок ко всем вашим скриптам, которые принимают почтовые запросы.Пример:
Другие советы
Вы можете написать простой отражатель на стороне сервера.Добавьте в каждый домен скрипт, который просто передает ваш ajax-запрос соответствующему домену.Этот сценарий может быть очень простым (1 или 2 строки кода), позволяет избежать проблем с межсайтовым выполнением сценариев и означает, что вам не нужно дублировать сложную бизнес-логику в существующих сценариях.
Это потребует дополнительной работы для вашего сервера, но для вас это может не быть проблемой.
Самый близкий пример кода, который я могу найти на сайтах, которыми я управляю, следующий.Здесь нам нужно было иметь возможность использовать Googles Chart API для HTTPS-соединения (которое оно пока не поддерживает).Решением было добавить следующий скрипт, который передавал вызовы...
<?php
// Set header so our output looks like a PNG
header("Content-Type: image/png");
// Reflect the image from googles chart API
echo file_get_contents('http://chart.apis.google.com/chart?'.$_SERVER['QUERY_STRING']);
?>
В таких случаях я использую подход REST.Найдите в Google дополнительную информацию о REST.
Если все они являются поддоменами одного и того же домена, вы можете просто добавить этот код на каждую страницу:
document.domain = 'domain.com';
Затем просто используйте простой xmlHttpRequest.