Est-il possible de faire des requêtes entre domaines dans Javascript et de définir des en-têtes personnalisés?

Étant donné que vous ne pouvez pas appliquer des en-têtes personnalisés sur les appels JSONP , comment puis-je effectuer des demandes de domaine et appliquer des en-têtes personnalisés à l'aide de jQuery?

Je tente essentiellement d'accéder à google docs avec jQuery et je dois passer un jeton d'authentification:

var token = "my-auth-token"; $.ajax({ url: "http://docs.google.com/feeds/documents/private/full?max-results=1&alt=json", dataType: 'json', beforeSend: function(xhr) { xhr.setRequestHeader("Authorization", "GoogleLogin auth=" + token); }, success: function(data, textStatus, XMLHttpRequest) { }, error: function(XMLHttpRequest, textStatus, errorThrown) { } }); 

Remarque: Le but est de contourner complètement la couche d'application. Il est simple d'utiliser Ruby pour se connecter à l'API de données Google, mais il nécessite beaucoup d'analyses de ressources pour alimenter le serveur sur l'ensemble du serveur.

Vous pouvez utiliser la bibliothèque client JavaScript de Google pour interroger l'API Docs. Bien qu'il ne vienne pas avec des assistants pour Docs spécifiquement, il peut encore être utilisé avec la plupart des API, y compris Docs. Consultez cette publication du blog par un employé de Google qui montre un exemple de travail.

Si vous vous retrouvez dans une boucle infinie d'autorisations, consultez cette question de Google Group. Fondamentalement, les cookies ne sont pas réglés assez rapidement, alors, lorsque la bibliothèque client JavaScript vérifie, rien ne redire et redirige vers la page d'autorisation OAuth. Une solution consiste soit à ajouter un petit délai avant la vérification, soit à utiliser un bouton de connexion qui déclenche l'autorisation au lieu de la faire à la page.

Vous devriez également ajouter n'importe quelle image à votre page qui réside sur le même domaine. Il peut être caché avec CSS, aussi longtemps que dans le DOM.

En utilisant l'exemple dans la publication du blog ci-dessus, j'ai pu récupérer ma liste de documents avec JavaScript seul. Voici la fonction d'initialisation modifiée que j'ai utilisée pour éliminer la boucle d'autorisation infinie:

 function initialize() { var scope = 'http://docs.google.com/feeds/'; if (google.accounts.user.checkLogin(scope)) { var service = new google.gdata.client.GoogleService('writely', 'DocList-App-v1.0'); service.getFeed(scope + 'documents/private/full/', handleFeed, handleError); } else { var loginButton = $("<button>Click here to login</button>"); loginButton.click(function() { var token = google.accounts.user.login(scope); // can ignore returned token }); $("body").append(loginButton); } };​ 

Envisagez d'écrire un code du côté du serveur qui joue pour un proxy et que jQuery l'appelle.

  • Si vous utilisez PHP, utilisez curl .
  • Si vous utilisez Java, utilisez URLConnection ou le HttpClient Apache le plus convenu .
  • Si vous utilisez C # /. NET, utilisez WebClient .
  • Si vous utilisez Ruby, utilisez Net::HTTP .

Vous pouvez, tant que le domaine externe le permet en envoyant un en Access-Control-Allow-Origin tête Access-Control-Allow-Origin approprié. Ensuite, utilisez l'API XMLHttpRequest dans les navigateurs qui prennent en charge l'API XHR et le XDomainRequest dans IE.