Tengo algunos problemas con Cross Origin Resource Sharing and Prototype. Tengo una solicitud simple a un recurso externo, y para una simple solicitud posterior hay algunas reglas que deben cumplirse:Intercambio de recursos cruzados de origen con PrototypeJS
el tipo de contenido debe estar en la aplicación/x-www-form-urlencoded, multipart/form-data, o text/plain, una solicitud simple no establece encabezados personalizados con la solicitud http, y el servidor debe establecer el encabezado Access-Control-Allow-Origin correcto.
con una vainilla JavaScript XMLHttpRequest todo funciona bien, pero con PrototypeJS no funcionará porque borda Prototype establece algunos encabezados personalizados y no sé cómo evitarlo.
Lo he probado en Prototype a través de:
new Ajax.Request('some.foreign-host.com/res.php', {
method: 'post',
postBody: 'foo=bar',
contentType: 'application/x-www-form-urlencoded',
onSuccess: function(e){
// some custom code
}
});
Cualquier idea de cómo llegar Prototipo para enviar un simple solicitud de este tipo CORS?
Tengo un volcado de las cabeceras creadas por una llanura JavaScript XMLHttpRequest:
POST /bthesis/returnJSON.php HTTP/1.1
Host: foreign-host.com
Connection: keep-alive
Referer: this-host.com
Content-Length: 9
Origin: this-host.com
Content-Type: application/x-www-form-urlencoded; charset=UTF-8
Accept: */*
User-Agent: [...]
Accept-Encoding: gzip,deflate,sdch
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
y los encabezados creados por una Solicitud Prototipo:
OPTIONS /bthesis/returnJSON.php HTTP/1.1
Host: foreign-host.com
Connection: keep-alive
Referer: this-host.com
Access-Control-Request-Method: POST
Origin: this-host.com
Access-Control-Request-Headers: X-Prototype-Version, X-Requested-With, Content-type, Accept
Accept: */*
User-Agent: [...]
Accept-Encoding: gzip,deflate,sdch
Accept-Language: de-DE,de;q=0.8,en-US;q=0.6,en;q=0.4
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.3
usos del prototipo un conjunto de encabezado totalmente diferente ... que conduce a un error de seguimiento en la consola:
XMLHttpRequest no puede cargar foreign-host.com/bthesis/returnJSON.php. Campo de encabezado de solicitud X-Prototype-Version no está permitido por Access-Control-Allow-Headers. Rehusó obtener el encabezado inseguro "X-JSON"
Lo extraño es que el servidor web devuelve en ambos casos el recurso solicitado (lo veo en la vista de 'Recursos' de la consola del desarrollador en cromo) pero confunde ese prototipo no tiene acceso a ella de alguna manera
Esto funcionó para mí. Gracias – FosAvance