Cómo lidiar con las solicitudes de PHP entre dominios

Hay varias formas de manejar solicitudes de origen cruzado en PHP:

  1. Establecer encabezado HTTP: permita que otros nombres de dominio accedan a los recursos del nombre de dominio actual configurando la información del encabezado de respuesta.
header("Access-Control-Allow-Origin: http://example.com");

El código anterior permitirá que las solicitudes del dominio http://example.com accedan a los recursos del dominio actual. Si desea permitir todos los nombres de dominio, puede establecer el valor en *:

header("Access-Control-Allow-Origin: *");
  1. Solicitud de verificación previa de soporte: al realizar algunas solicitudes complejas de dominios cruzados, el navegador enviará una solicitud de OPCIONES para verificar si se permiten dominios cruzados. La respuesta a la solicitud de OPCIONES se puede establecer mediante el siguiente código:
if ($_SERVER['REQUEST_METHOD'] == 'OPTIONS') {
    
    
    header("Access-Control-Allow-Origin: http://example.com");
    header("Access-Control-Allow-Methods: POST, GET, OPTIONS");
    header("Access-Control-Allow-Headers: Content-Type");
    exit;
}

El código anterior permitirá las solicitudes POST y GET del nombre de dominio http://example.com y permitirá transportar información de encabezado de tipo de contenido.

  1. JSONP resuelve problemas entre dominios: si realiza solicitudes entre dominios mediante la carga dinámica de archivos JavaScript, puede utilizar la tecnología JSONP. El backend de PHP devuelve datos en formato JSONP, y la función de devolución de llamada se utiliza para procesar los resultados devueltos en el front-end.
$data = array('name' => 'John', 'age' => 25);
$jsonpData = json_encode($data);
$callback = $_GET['callback'];
echo $callback . '(' . $jsonpData . ')';

Use JavaScript para procesar datos JSONP en el front-end:

function callback(data) {
    
    
    console.log(data);
}
var script = document.createElement('script');
script.src = 'http://example.com/api?callback=callback';
document.body.appendChild(script);
  1. Use un servidor proxy: si el problema de dominio cruzado no se puede resolver con los métodos anteriores, puede configurar un proxy en el lado del servidor para reenviar la solicitud de dominio cruzado al servidor de destino, lo que se puede realizar a través de la biblioteca cURL en PHP .
$url = 'http://example.com/api';
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_HEADER, true);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
curl_close($ch);
header('Content-Type: application/json');
echo $response;

El código anterior obtendrá los datos del servidor de destino y devolverá los datos tal cual al cliente. Tenga en cuenta que este método aumentará la carga en el servidor y puede causar riesgos de seguridad, así que utilícelo con precaución.

Los anteriores son varios métodos comunes para manejar solicitudes PHP entre dominios, el método a usar depende de sus necesidades y escenarios de proyecto.

Supongo que te gusta

Origin blog.csdn.net/qq_27487739/article/details/131527032
Recomendado
Clasificación