函数文档

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.

Return

mixed 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.