rest_send_cors_headers()
云策文档标注
概述
rest_send_cors_headers() 是一个 WordPress REST API 函数,用于发送跨源资源共享(CORS)头信息,以支持跨域请求。
关键要点
- 函数接收一个参数 $value,作为响应数据,并返回相同的响应数据。
- 通过 get_http_origin() 获取请求的 HTTP Origin,如果 Origin 存在且不为 'null',则使用 sanitize_url() 清理后设置 Access-Control-Allow-Origin 等 CORS 头。
- 在特定条件下(如未发送头信息、GET 请求且用户未登录),会设置 Vary: Origin 头以优化缓存。
- 该函数自 WordPress 4.4.0 版本引入,常用于 REST API 请求处理中。
代码示例
function rest_send_cors_headers( $value ) {
$origin = get_http_origin();
if ( $origin ) {
// Requests from file:// and data: URLs send "Origin: null".
if ( 'null' !== $origin ) {
$origin = sanitize_url( $origin );
}
header( 'Access-Control-Allow-Origin: ' . $origin );
header( 'Access-Control-Allow-Methods: OPTIONS, GET, POST, PUT, PATCH, DELETE' );
header( 'Access-Control-Allow-Credentials: true' );
header( 'Vary: Origin', false );
} elseif ( ! headers_sent() && 'GET' === $_SERVER['REQUEST_METHOD'] && ! is_user_logged_in() ) {
header( 'Vary: Origin', false );
}
return $value;
}注意事项
- 函数依赖于 get_http_origin()、sanitize_url() 和 is_user_logged_in() 等辅助函数,确保这些函数在调用时可用。
- CORS 头的设置有助于解决跨域请求问题,但需注意安全性和性能影响,特别是在处理敏感数据时。
原文内容
Sends Cross-Origin Resource Sharing headers with API requests.
Parameters
$valuemixedrequired-
Response data.
Source
function rest_send_cors_headers( $value ) {
$origin = get_http_origin();
if ( $origin ) {
// Requests from file:// and data: URLs send "Origin: null".
if ( 'null' !== $origin ) {
$origin = sanitize_url( $origin );
}
header( 'Access-Control-Allow-Origin: ' . $origin );
header( 'Access-Control-Allow-Methods: OPTIONS, GET, POST, PUT, PATCH, DELETE' );
header( 'Access-Control-Allow-Credentials: true' );
header( 'Vary: Origin', false );
} elseif ( ! headers_sent() && 'GET' === $_SERVER['REQUEST_METHOD'] && ! is_user_logged_in() ) {
header( 'Vary: Origin', false );
}
return $value;
}
Changelog
| Version | Description |
|---|---|
| 4.4.0 | Introduced. |