当前位置: 首页> 最新文章列表> 设置跨域头(CORS)响应:Access-Control-Allow-Origin 的用法

设置跨域头(CORS)响应:Access-Control-Allow-Origin 的用法

M66 2025-05-28

在Web开发中,跨域问题是一个非常常见的问题。特别是在前后端分离的应用中,前端可能需要访问不同域名下的资源,而浏览器出于安全的考虑,默认会阻止跨域请求。这时候,服务器端就需要通过设置HTTP头来允许跨域请求。在PHP中,我们可以使用 header() 函数来设置跨域相关的头部信息。

1. 跨域问题及解决方案

跨域资源共享(CORS)是一种机制,它通过允许浏览器向不同域发起请求,来解决跨域问题。CORS主要依赖于HTTP头部,尤其是Access-Control-Allow-Origin。当浏览器向一个不同域的服务器发起请求时,服务器需要在响应头中包含 Access-Control-Allow-Origin 来明确允许跨域请求。

2. Access-Control-Allow-Origin 详解

Access-Control-Allow-Origin 是CORS标准中的一个关键头部,决定了哪些域名可以访问资源。它的值可以是以下几种情况:

  • *:表示所有域名都可以访问该资源。

  • http://m66.net:只允许该指定域名访问资源。

  • null:表示不允许跨域请求。

例如,当我们想要允许 http://m66.net 这个域名进行跨域请求时,我们需要在PHP脚本中设置相应的头部。

3. 使用PHP设置Access-Control-Allow-Origin

在PHP中,设置HTTP头部信息是通过 header() 函数来实现的。要允许跨域请求,最基本的步骤是使用 header() 设置 Access-Control-Allow-Origin

示例代码:

<?php
// 允许来自http://m66.net的跨域请求
header("Access-Control-Allow-Origin: http://m66.net");

// 如果需要支持其他HTTP方法(如POST、PUT、DELETE等),可以这样设置:
header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");

// 如果需要允许携带cookie,则需要设置以下头部
header("Access-Control-Allow-Credentials: true");

// 设置允许的请求头
header("Access-Control-Allow-Headers: Content-Type, Authorization");

// 在实际应用中,可以判断请求的来源域名,来动态设置跨域头
$allowedOrigin = "http://m66.net";
if ($_SERVER['HTTP_ORIGIN'] === $allowedOrigin) {
    header("Access-Control-Allow-Origin: $allowedOrigin");
}
?>

解释:

  • Access-Control-Allow-Origin:允许指定域名进行跨域请求。如果你希望允许多个域名,可以动态判断请求来源,设置不同的域名。

  • Access-Control-Allow-Methods:允许的HTTP方法(如GET、POST等)。

  • Access-Control-Allow-Credentials:如果需要发送Cookie,需要将该头设置为 true

  • Access-Control-Allow-Headers:允许的自定义请求头(例如 Content-TypeAuthorization)。

4. 预检请求(OPTIONS)

当浏览器发起某些复杂的跨域请求(如带有自定义头部或使用PUT、DELETE方法等)时,浏览器会先发送一个OPTIONS请求,称为预检请求(Preflight Request)。这个请求是为了检查服务器是否允许跨域请求。在预检请求的响应中,服务器也需要返回相应的CORS头部。

例如:

<?php
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    // 处理预检请求
    header("Access-Control-Allow-Origin: http://m66.net");
    header("Access-Control-Allow-Methods: GET, POST, PUT, DELETE");
    header("Access-Control-Allow-Headers: Content-Type, Authorization");
    header("Access-Control-Allow-Credentials: true");
    exit();
}
?>

解释:

  • OPTIONS 请求不需要返回实际数据,但需要正确设置CORS头部,以告诉浏览器服务器是否允许跨域请求。

5. 总结

通过使用PHP的 header() 函数,我们可以轻松设置跨域相关的HTTP头部,特别是 Access-Control-Allow-Origin,来允许指定域名的跨域请求。根据实际需求,我们可以灵活配置CORS策略,确保安全性和功能的平衡。

跨域资源共享是Web应用中不可忽视的问题,掌握如何在PHP中配置CORS头部,能够帮助你解决跨域问题,提高应用的可访问性和扩展性。