我已经阅读了WP Codex中的多个条目、许多文章和堆栈交换问题。我为我正在开发的一个私有插件提供了一个功能齐全的API,但当它在WPEngine上投入生产时text/html
存在CORS和CORB问题。我试着只为那条路线设置标题,但似乎没有任何效果。它在本地和开发服务器上运行良好。
Why serve HTML
you ask?
我的插件连接了我在React中创建的WP表单。JS,通过管理门户,通过我们的CRM,通过IIS的另一个API。Net服务器。一旦有人提交表单,API就会接管事务并匹配
HTML
我用一些其他内部数据发送电子邮件。为了安全、维护和更重要的跨平台目的,我们希望保持该系统的集中化(我们还提供其他技术栈)。
So What is Happening?
我可以从浏览器和html渲染中点击我的端点。我甚至可以从RESTlet/Postman那里获得html。然而,当我试图
GET
从我们的内部API请求URL,服务器不允许该请求。
Here is the setup:
发送响应//callback for register_rest_route
function proxy_email($request) {
//some validation, db queries and other stuff
header( \'Content-Type: text/html; charset=UTF-8\' );
echo $html_email;
exit();
}
搬运Cors
//handling cors
remove_filter( \'rest_pre_serve_request\', \'rest_send_cors_headers\' );
add_filter( \'rest_pre_serve_request\', function( $served, $result, $request, $server ) {
$origin = get_http_origin();
$route = $request->get_route();
$allowed_origins = array(
//the local, dev, and production origins plus the following:
site_url()
);
// the route I set up for the email includes the string \'thankyou\'
if ( $origin && in_array( $origin, $allowed_origins ) && preg_match( "/(thankyou)/", $route ) != 1) {
header( \'Access-Control-Allow-Origin: \' . esc_url_raw( $origin ) );
header( \'Access-Control-Allow-Methods: POST, GET, OPTIONS, PUT, DELETE\' );
header( \'Access-Control-Allow-Credentials: true\' );
header( \'Access-Control-Allow-Headers: Content-Type, X-WP-Nonce\');
} else if ( $origin && in_array( $origin, $allowed_origins ) && preg_match( "/(thankyou)/", $route ) == 1 ) {
header( \'Access-Control-Allow-Origin: \' . esc_url_raw( $origin ) );
header( \'Access-Control-Allow-Methods: OPTIONS, GET\');
header( \'Access-Control-Allow-Credentials: true\' );
header( \'Access-Control-Allow-Headers: Content-Type\');
header( \'Content-Type: text/html; charset=UTF-8\');
header( \'Accept: */*\');
}
return $served;
}, 10, 4);
我的方法是否存在问题,这是WP问题,还是WPEngine问题,还是其他问题?