¿Es posible hacer peticiones entre dominios en JavaScript y Configurar encabezados personalizados?
-
28-09-2019 - |
Pregunta
Como no se puede aplicar encabezados personalizados en JSONP llama , ¿cómo puedo hacer peticiones entre dominios y aplicar encabezados personalizados utilizando jQuery?
básicamente estoy tratando de acceder a Google Docs con jQuery y necesidad de aprobar un token de autenticación:
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) {
}
});
Nota: El objetivo de esto es completamente de derivación de la capa de aplicación. Es sencillo de usar rubí para conectarse a la API de datos de Google, pero se necesita una gran cantidad de recursos de análisis sintáctico alimentos todo el tiempo del lado del servidor.
Solución
Se puede usar la biblioteca de cliente JavaScript de Google para consultar la API Docs. A pesar de que no viene con ayudantes para Docs en concreto, todavía se puede utilizar con la mayoría de las API, incluyendo Docs. Ver este entrada en el blog por un empleado de google que muestra un ejemplo de trabajo.
Si termina en un bucle infinito de autorizaciones, ver esta relacionado pregunta de los grupos de Google. Básicamente, las galletas no se establecen con la suficiente rapidez, por lo que cuando los controles de la biblioteca cliente de JavaScript, no encuentra nada y vuelve a dirigir a la página de autorización OAuth. Una solución es añadir ya sea un pequeño retraso antes de que se haga el cheque, o usar un botón de inicio de sesión que inicia la autorización en lugar de hacerlo al cargar la página.
También habría que añadir cualquier imagen a su página que reside en el mismo dominio. Se puede ocultar con CSS, siempre y cuando en el DOM.
Usando el ejemplo de la entrada de blog anterior, yo era capaz de recuperar mi lista de documentos con JavaScript solo. Aquí está la función de inicialización modificado he utilizado para deshacerse del bucle infinito de autorización:
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);
}
};
Otros consejos
Tenga en cuenta que escribir código en el lado del servidor, que juega para un proxy y dejar jQuery llamarlo.
- Si está usando PHP, utiliza
curl
. - Si está usando Java, el uso
URLConnection
o la más convenienced Apache HttpClient . - Si estás usando C # /. NET, utilice
WebClient
. - Si estás usando Ruby, el uso
Net::HTTP
.
Se puede, siempre y cuando el dominio externo permite que mediante el envío de una cabecera Access-Control-Allow-Origin
apropiado. Entonces sólo tiene que utilizar la API XMLHttpRequest
en los navegadores que soportan la API de dominios cruzados XHR estándar y XDomainRequest
en IE.