📜  php 已被 CORS 策略阻止 - PHP (1)

📅  最后修改于: 2023-12-03 15:33:37.695000             🧑  作者: Mango

PHP 已被 CORS 策略阻止

当在使用 AJAX 或 Fetch API 跨源请求时,会出现 CORS(跨域资源共享)安全限制,阻止跨源请求访问资源。在 PHP 中,对于 CORS,我们需要在服务器端进行一些配置和设置。

CORS 策略

CORS 是一种浏览器安全机制,保护了用户隐私和数据安全。它允许网页客户端跨源(协议、域名或端口)请求服务器资源,如果没有相应的 CORS 规则,则会在浏览器上阻止该请求。

当浏览器发送跨源请求时,服务器会返回以下响应头的其中之一:

  • Access-Control-Allow-Origin: (站点域名,例如 https://example.com):表示允许由该站点发起的跨域请求;
  • Access-Control-Allow-Origin: *:允许任何站点发起的跨域请求。

如果没有设置这些响应头,浏览器将无法处理跨源请求的响应,并抛出一个跨域资源共享错误。

如何配置 PHP 制定 CORS 规则

在 PHP 中,我们可以使用 header() 函数来在返回响应头中添加 CORS 指令。下面是一个例子:

header('Access-Control-Allow-Origin: https://safe-site.com');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE');
header('Access-Control-Allow-Headers: X-Requested-With, Content-Type, Authorization');
Access-Control-Allow-Origin

header() 函数中,使用 Access-Control-Allow-Origin 指令指定允许的站点域名。从安全角度考虑,我们应该明确声明可以访问资源的站点,而不是使用通配符 *,因为这会允许任何站点跨域访问资源。

Access-Control-Allow-Methods

使用 Access-Control-Allow-Methods 指令指定支持的 HTTP 方法,例如 GET、POST、PUT 或 DELETE。如果服务器只支持特定的方法,则必须在此指令中声明,并在请求中使用相应的方法。

Access-Control-Allow-Headers

使用 Access-Control-Allow-Headers 指令来允许客户端使用指定的自定义头,例如 X-Requested-WithContent-TypeAuthorization。如果客户端使用了未被允许的头,则该请求将失败。

总结

CORS 是一种浏览器安全机制,它可以防止跨站点请求资源。在 PHP 中,我们需要在响应头中添加一些 CORS 指令,以允许客户端跨域访问资源。使用 header() 函数添加 Access-Control-Allow-OriginAccess-Control-Allow-MethodsAccess-Control-Allow-Headers 指令可以帮助我们制定 CORS 策略。

注:如果你的 PHP 程序返回的是 JSON 格式数据,可以使用 PHP 函数 header('Content-Type: application/json') 来指定响应内容类型,这样客户端请求时就会按照 JSON 格式解析响应数据。