PHP 如何实现 跨域资源共享(CORS)

774 阅读1分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 6 月更文挑战」的第 21 天,点击查看活动详情

要实现跨域资源共享(Cross-Origin Resource Sharing,CORS)功能,你可以在 PHP 中采取以下步骤:

  1. 在响应头中添加 CORS 头信息: 在 PHP 中,你可以使用 header() 函数来添加自定义的响应头信息。为了启用 CORS,你需要添加以下头信息:
<?php
header("Access-Control-Allow-Origin: <允许访问的域名>");
header("Access-Control-Allow-Methods: <允许的 HTTP 方法>");
header("Access-Control-Allow-Headers: <允许的请求头>");

<允许访问的域名>:指定允许访问资源的域名。可以使用通配符 * 表示允许任意域名访问,但这在涉及身份验证等敏感操作时不推荐使用。

<允许的 HTTP 方法>:指定允许的 HTTP 方法,例如 GETPOSTPUT 等。如果你希望允许所有方法,可以使用 * 通配符。

<允许的请求头>:指定允许的自定义请求头。例如,如果你的请求中包含了自定义的头信息,如 Authorization,你需要将其添加到这个头信息中。如果允许所有的自定义请求头,可以使用 * 通配符。

例如,如果你想允许来自 `http://example.com` 域名的 `GET``POST` 请求,并允许所有自定义请求头,你可以这样设置:
<?php
 header("Access-Control-Allow-Origin: http://example.com");
 header("Access-Control-Allow-Methods: GET, POST");
 header("Access-Control-Allow-Headers: *");
  1. 处理预检请求(Preflight Request): 当使用非简单请求(例如带有自定义头信息或使用 PUTDELETE 等非常见的 HTTP 方法)时,浏览器会首先发送一个预检请求(OPTIONS 请求)到服务器,以确定是否允许实际的请求。在 PHP 中,你可以检测到 OPTIONS 请求,并返回适当的响应头信息。

以下是一个处理预检请求的示例代码:

<?php
  if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
      header("Access-Control-Allow-Origin: <允许访问的域名>");
      header("Access-Control-Allow-Methods: <允许的 HTTP 方法>");
      header("Access-Control-Allow-Headers: <允许的请求头>");
      exit;
  }

请根据你的需求修改上述代码中的头信息。

以上是基本的 CORS 实现示例。请注意,在实际应用中,你可能需要更加细粒度的控制,例如根据请求的来源、请求头信息等动态设置 CORS 头信息。此外,还需要谨慎处理敏感数据和身份验证等安全问题。