SECURITY NOTE: 除非您有办法覆盖该选项,否则不应使用该选项(以及其他解决方案)Content-Type: text/html
WP Super Cache使用适当的application/json
价值发送JSON为text/html
将导致浏览器将其呈现为HTML,HTML可能是XSS向量。
看起来这需要在服务器层完成,因为WPSC没有提供必要的挂钩。
我就是这样做的。它与Liang的方法类似,但不需要直接修改插件,并且具有更精确的regex模式。
如果您使用的是REST API的v2,那么应该使用REST_REQUEST
而不是JSON_REQUEST
.
订阅就好了22 和#79 以防WP超级缓存中发生更改。
/**
* Tell WP Super Cache to cache API endpoints
*
* @param string $eof_pattern
*
* @return string
*/
function wcorg_json_cache_requests( $eof_pattern ) {
global $wp_super_cache_comments;
if ( defined( \'JSON_REQUEST\' ) && JSON_REQUEST ) {
// Accept a JSON-formatted string as an end-of-file marker, so that the page will be cached
$json_object_pattern = \'^[{].*[}]$\';
$json_collection_pattern = \'^[\\[].*[\\]]$\';
$eof_pattern = str_replace(
\'<\\?xml\',
sprintf( \'<\\?xml|%s|%s\', $json_object_pattern, $json_collection_pattern ),
$eof_pattern
);
// Don\'t append HTML comments to the JSON output, because that would invalidate it
$wp_super_cache_comments = false;
}
return $eof_pattern;
}
add_filter( \'wp_cache_eof_tags\', \'wcorg_json_cache_requests\' );