Melhores práticas para a obtenção de respostas cross-site JSON para POST?
-
03-07-2019 - |
Pergunta
Eu estou trabalhando em uma intranet com vários subdomínios. Eu tenho controle sobre cada subdomínio, assim, a segurança de pedidos de cross-site não é uma preocupação. Eu tenho scripts PHP com respostas JSON que eu gostaria de chamar de vários subdomínios sem duplicação. Para solicitações GET, eu posso fazer isso com AJAX e JSONP, mas isso não funciona com solicitações POST. Algumas alternativas que vejo, nenhum dos quais parece muito bom:
- POST para uma cópia no subdomínio local com resposta mínima, em seguida, obter resposta completa da localização central, com JSONP
- Ambos POST e GET para uma cópia no subdomínio local com JSON
- Use mod_rewrite para usar URLs locais com um script central na extremidade traseira com JSON
- Use links simbólicos para usar URLs locais com um script central na extremidade traseira com JSON
Estou faltando alguma coisa mais simples? O que você faria aqui?
Solução
Basta olhar para esta https://developer.mozilla.org/En/HTTP_access_control página. Tudo o que você precisa - adicionar cabeçalho para todos vocês scripts que aceitar o pedido post. Exemplo:
Outras dicas
Você poderia escrever um simples reflector no lado do servidor. Adicionar um script para cada domínio que simplesmente passa o seu pedido ajax no domínio apropriado. Este script pode ser muito simples (1 ou 2 linhas de código), evita seus problemas e os meios que você não precisa de duplicar a lógica do negócio complicado em seus scripts existentes a script entre sites.
Ele fará com que o trabalho extra para seu servidor, mas isso pode não ser um problema para você.
O código exemplo mais próximo que posso encontrar nos sites geridos por mim é o seguinte. Aqui nós necessário para ser capaz de usar Googles Chart API em uma conexão HTTPS (que ele não suporta ainda). A solução foi adicionar o seguinte script que passou as chamadas em ...
<?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']);
?>
Eu uso abordagem RESTO em tais casos. Pesquisa do Google para obter mais informações sobre REST.
Se eles são todos os subdomínios do mesmo domínio, você pode simplesmente adicionar este código a cada página:
document.domain = 'domain.com';
Em seguida, basta usar XMLHttpRequest simples.