CORS(Cross-Origin Resource Sharing)是一种机制,它使用额外的 HTTP 头来告诉浏览器是否允许在 Web 页面上访问来自不同域的资源。在默认情况下,浏览器限制跨域请求,以防止潜在的安全风险。CORS 允许服务器指定哪些源(域)可以访问其资源。
在 PHP 中处理 CORS 问题,你需要在服务器端设置响应头,以允许或拒绝跨域请求。以下是一个简单的 PHP 示例,演示如何设置 CORS 头:
php
<?php
// 允许所有域的跨域请求
header('Access-Control-Allow-Origin: *');
// 允许的请求方法
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
// 允许的请求头
header('Access-Control-Allow-Headers: Content-Type');
// 允许发送身份验证信息(如 cookies)
header('Access-Control-Allow-Credentials: true');
// 响应类型
header('Content-Type: application/json');
// 处理预检请求(OPTIONS 请求)
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
header('Access-Control-Allow-Headers: Content-Type');
header('Access-Control-Allow-Credentials: true');
header('HTTP/1.1 200 OK');
exit();
}
// 处理实际请求
if ($_SERVER['REQUEST_METHOD'] === 'GET') {
// 处理 GET 请求
$data = array('message' => 'GET request successful');
echo json_encode($data);
} elseif ($_SERVER['REQUEST_METHOD'] === 'POST') {
// 处理 POST 请求
$data = json_decode(file_get_contents('php://input'), true);
$response = array('message' => 'POST request successful', 'data' => $data);
echo json_encode($response);
}
?>
在这个例子中:
Access-Control-Allow-Origin
允许来自任何域的请求。Access-Control-Allow-Methods
允许 GET、POST、PUT、DELETE 请求。Access-Control-Allow-Headers
允许 Content-Type 头。Access-Control-Allow-Credentials
允许发送身份验证信息(如 cookies)。OPTIONS
请求用于处理预检请求,返回对实际请求的许可。Content-Type: application/json
表明服务器将返回 JSON 数据。
请注意,实际应用中,你应该根据项目的安全性需求,限制允许的域、请求方法、请求头等。