This is an explanation of the video content.
 用技术延续对ACG的热爱
27

 |   | 

PHP+Ajax跨域问题解决方案

问题出现的原因

前后端分离项目中前端ajax发起请求,后端接受请求并处理,如果发起请求的前端所在域和处理请求的后端不在同一个域内,那么就会产生跨域的问题 只有当

protocol(协议)、domain(域名)、port(端口)三者一致。

才是同源。

解决办法

本文通过设置Access-Control-Allow-Origin来实现跨域。

例如:客户端的域名是t-acg.com,而请求的域名是t-acg.com:3000。

如果直接使用ajax访问,会有以下错误:

XMLHttpRequest cannot load http://t-acg.com:3000/server.php . No 'Access-Control-Allow-Origin' header is present on the requested resource.Origin 'http://t-acg.com' is therefore not allowed access.

1. 允许单个域名访问

指定某域名(http://t-acg.com)跨域访问,则只需在http://t-acg.com:3000/server.php文件头部添加如下代码:

header('Access-Control-Allow-Origin: http://t-acg.com');

2. 允许多个域名访问

指定多个域名(http://c1.t-acg1.comhttp://c2.t-acg.com等)跨域访问,则只需在http://t-acg.com:3000/server.php文件头部添加如下代码:

$origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';

$allow_origin = array(
    'http://c1.t-acg.com',
    'http://c2.t-acg.com'
);

if(in_array($origin, $allow_origin)){
    header('Access-Control-Allow-Origin: '.$origin);
}

3. 允许所有域名访问

允许所有域名访问则只需在http://t-acg.com:3000/server.php文件头部添加如下代码:

header('Access-Control-Allow-Origin: *');

请注意,以上代码中的域名c1.t-acg1.comc2.t-acg.com是示例域名,您需要根据实际情况替换为您自己的域名。同时,确保您的服务器配置允许跨域请求,并且这些代码被正确地放置在PHP文件的头部。

27 ⚙️服务端 ↦ PHP开发技巧 __ 74 字
 PHP开发技巧 #18