Tengo un sitio con algunas páginas en conexión HTTPS. De estas páginas HTTPS, tengo que usar una solicitud HTTP Ajax para recuperar algunos errores, como campos en blanco. Pero estos mensajes de error no están llegando. ¿Hay alguna solución o tengo que hacer esa solicitud AJAX para archivar en la conexión HTTPS?HTTP Solicitud Ajax a través de HTTPS Página
Respuesta
Esto no es posible debido a Same Origin Policy.
Deberá cambiar las solicitudes de Ajax a https, también.
Incluso el borrador de trabajo de Intercambio de recursos de origen cruzado lo hace imposible: http://www.w3.org/TR/cors/#user-agent-security – Harmen
Gracias por la respuesta a todos. Cambié mi sitio web de acuerdo con la misma política de origen. – cooldude
@NickSotiros ¿Por qué no quieres que sea seguro? No hay cero inconveniente, y las solicitudes HTTP en una página HTTPS podrían ser atacadas por un MITM para inyectar JS malicioso. – ceejayoz
En algunos casos, una solicitud de un solo sentido sin respuesta se puede iniciar en un servidor TCP, sin un certificado SSL. Un servidor TCP, a diferencia de un servidor HTTP, atrapará su solicitud. Sin embargo, no habrá acceso a ningún dato enviado desde el navegador, ya que el navegador no enviará ningún dato sin una verificación de certificado positiva. Y en casos especiales, incluso una señal TCP sin datos es suficiente para ejecutar algunas tareas. Por ejemplo, para que un dispositivo IoT dentro de una LAN inicie una conexión a un servicio externo. Link
Se trata de una especie de disparador de "Despertar", que funciona en un puerto sin ninguna seguridad.
En caso de que se necesite una respuesta, esto se puede implementar utilizando un servidor https público seguro, que puede enviar los datos necesarios de vuelta al navegador usando p. Ej. Websockets.
Sin embargo, esto se puede hacer con los siguientes pasos:
enviar una petición AJAX https a su sitio web (el mismo dominio)
jQuery.ajax({ 'url' : '//same_domain.com/ajax_receiver.php', 'type' : 'get', 'data' : {'foo' : 'bar'}, 'success' : function(response) { console.log('Successful request'); } }).fail(function(xhr, err) { console.error('Request error'); });
petición GET Ajax, para ejemplo, por php, y haga una solicitud de obtención de CURL a cualquier sitio web deseado a través de http.
use linslin\yii2\curl; $curl = new curl\Curl(); $curl->get('http://example.com');
Sin ningún tipo de solución del lado del servidor, Theres es sólo una manera en la que una página segura puede obtener algo de una página/solicitud insegura y que cree postMessage y una ventana emergente
dije emergente primo el sitio no tiene permitido mezclar contenido. Pero una ventana emergente no se está mezclando realmente. Tiene su propia ventana pero aún puede comunicarse con el abridor con postMessage.
para que pueda abrir un nuevo http páginas con window.open(...)
y tienen que hacer la solicitud en su nombre (es decir, si está usando el sitio CORS así)
XDomain vino a la mente cuando escribí esto pero aquí es un enfoque moderno utilizando la nueva fetch api, la ventaja es la transmisión de archivos de gran tamaño, el inconveniente es que no va a funcionar en todos los navegadores
poner esto script de proxy en cualquier página http
onmessage = evt => {
const port = evt.ports[0]
fetch(...evt.data).then(res => {
// the response is not clonable
// so we make a new plain object
const obj = {
bodyUsed: false,
headers: [...res.headers],
ok: res.ok,
redirected: res.redurected,
status: res.status,
statusText: res.statusText,
type: res.type,
url: res.url
}
port.postMessage(obj)
// Pipe the request to the port (MessageChannel)
const reader = res.body.getReader()
const pump =() => reader.read()
.then(({value, done}) => done
? port.postMessage(done)
: (port.postMessage(value), pump())
)
// start the pipe
pump()
})
}
A continuación, se abre una ventana emergente en su página https (tenga en cuenta que sólo se puede hacer esto en un evento de interacción del usuario o de lo contrario será bloqueado)
window.popup = window.open(http://.../proxy.html)
crear su función de utilidad
function xfetch(...args) {
// tell the proxy to make the request
const ms = new MessageChannel
popup.postMessage(args, '*', [ms.port1])
// Resolves when the headers comes
return new Promise((rs, rj) => {
// First message will resolve the Response Object
ms.port2.onmessage = ({data}) => {
const stream = new ReadableStream({
start(controller) {
// Change the onmessage to pipe the remaning request
ms.port2.onmessage = evt => {
if (evt.data === true) // Done?
controller.close()
else // enqueue the buffer to the stream
controller.enqueue(evt.data)
}
}
})
// Construct a new response with the
// response headers and a stream
rs(new Response(stream, data))
}
})
}
Y hacer la solicitud como lo hace normalmente con la API fetch
xfetch('http://httpbin.org/get')
.then(res => res.text())
.then(console.log)
desde el javascript traté de varias maneras y no pude
Necesita una solución del lado del servidor, por ejemplo, en C# Creé un controlador que llame al http, deserialice el objeto, y el resultado es que cuando llamo desde javascript, estoy haciendo una solicitud de mi https://domain a mi htpps: // dominio. Por favor, vea mi código C#:
[Authorize]
public class CurrencyServicesController : Controller
{
HttpClient client;
//GET: CurrencyServices/Consultar?url=valores?moedas=USD&alt=json
public async Task<dynamic> Consultar(string url)
{
client = new HttpClient();
client.BaseAddress = new Uri("http://api.promasters.net.br/cotacao/v1/");
client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
System.Net.Http.HttpResponseMessage response = client.GetAsync(url).Result;
var FromURL = response.Content.ReadAsStringAsync().Result;
return JsonConvert.DeserializeObject(FromURL);
}
Y permítanme muestro mi lado del cliente (Javascript)
<script async>
$(document).ready(function (data) {
var TheUrl = '@Url.Action("Consultar", "CurrencyServices")?url=valores';
$.getJSON(TheUrl)
.done(function (data) {
$('#DolarQuotation').html(
'$ ' + data.valores.USD.valor.toFixed(2) + ','
);
$('#EuroQuotation').html(
'€ ' + data.valores.EUR.valor.toFixed(2) + ','
);
$('#ARGPesoQuotation').html(
'Ar$ ' + data.valores.ARS.valor.toFixed(2) + ''
);
});
});
Me gustaría que esto le ayudará! Saludos
- 1. solicitud HTTPS a través de AJAX de la página HTTP
- 2. HTTP Cookies y solicitudes de AJAX a través de HTTPS
- 3. Ajax usando https en una página http
- 4. HTTPS a HTTP solicitud JSONP
- 5. http to https a través de .htaccess
- 6. Llamar a HTTPS desde HTTP a través de AJAX para iniciar sesión
- 7. Redirección permanente de http a https página
- 8. ¿Es posible hacer una solicitud JSONP de HTTPS a HTTP?
- 9. Cómo reenviar la solicitud http a https en Amazon Route53?
- 10. Cookie a través de HTTP y HTTPS en PHP
- 11. Obtener archivo JS a través de HTTPS desde una página HTTP
- 12. ¿Cómo emular una solicitud http real a través de cfhttp?
- 13. http a https redirección
- 14. ¿Cómo enviar contenido html a través de una solicitud ajax?
- 15. PHP: HTTP o HTTPS?
- 16. HTTP y HTTPS iframe
- 17. ¿Cómo puedo obligar a los usuarios a acceder a mi página a través de HTTPS en lugar de HTTP?
- 18. HTTP HEAD Solicitud en Javascript/Ajax?
- 19. Clojure/Noir: Forzar HTTPS, redirigir si la solicitud fue http: // a https: //
- 20. Redireccionando de HTTP a HTTPS con PHP
- 21. Errores abortados en Firebug al cargar una página de Drupal 7 a través de https
- 22. ¿Cómo redirige HTTPS a HTTP?
- 23. nginx redirigir HTTPS a HTTP
- 24. ¿Es seguro un POST de HTTP a HTTPS?
- 25. Enviar solicitud HTTP manualmente a través del socket
- 26. Solicitud de https en lua
- 27. Verificar solicitudes AJAX pendientes o solicitud HTTP GET/POST
- 28. URL sin "http | https"
- 29. Bing Maps Ajax API https url?
- 30. página HTML con el contenido recuperado a través de AJAX
ajax debería funcionar bien en https, ¿puede publicar el fragmento de código real? – Manny
Suena como SOP (http://en.wikipedia.org/wiki/Same_origin_policy): los esquemas son diferentes, por lo que es un origen diferente. –
Gracias por la respuesta. He cambiado mi sitio web en consecuencia. – cooldude