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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top