是的,您可以通过AJAX向整个web中的任何其他脚本打开您的站点以接受请求。
如果你把原点限制在one 使用API的特定远程域,如this example:
header("Access-Control-Allow-Origin: http://mozilla.com");
然而,正如mozilla文档所述,客户端可以转移来源,然而限制临时用户可以连接的站点是对某些攻击的威慑。
更好的是,您可以将您的请求限制为only the methods you really need to allow, 要点是这个片段,它适用于多个领域,if you have the $_SERVER[\'HTTP_ORIGIN\']
variable populated:
add_action(\'rest_api_init\', function() {
/* unhook default function */
remove_filter(\'rest_pre_serve_request\', \'rest_send_cors_headers\');
/* then add your own filter */
add_filter(\'rest_pre_serve_request\', function( $value ) {
$origin = get_http_origin();
$my_sites = array( \'http://site1.org/\', \'http://site2.net\', );
if ( in_array( $origin, $my_sites ) ) {
header( \'Access-Control-Allow-Origin: \' . esc_url_raw( $origin ) );
} else {
header( \'Access-Control-Allow-Origin: \' . esc_url_raw( site_url() ) );
}
header( \'Access-Control-Allow-Methods: GET\' );
return $value;
});
}, 15);
如您所见,此代码段使用函数
get_http_origin 由WordPress提供,但如果
HTTP_ORIGIN
未在中填充
$_SERVER
数组,因此它对PHP脚本不可用,可能是因为它被您使用的cloudflare代理阻止了。我会很快检查,用脚本
<?php phpinfo(); ?>
, 如果已填充此变量。
可能是源站点,它由cloudflare填充在另一个标头中,您可以在连接到http_origin
滤器如果您迷失了这一点,请编辑原始问题,发布服务器变量的内容,文件系统路径或密码除外。
我很乐意帮忙。