mirror of
git://develop.git.wordpress.org/
synced 2025-02-22 15:42:29 +01:00
Script Loader: Improve asset concatenation Etags.
Include the asset version of JavaScript and CSS files when generating the ETag for concatenated assets in `load-scripts.php` and `load-styles.php`. This ensures the ETag is updated as script versions change (for example editor package updates) rather than only when the WordPress version changes. The `W\` prefix is added to the generated ETag to allow for CDNs and proxy servers modifying the script to add or improve the compression algorithm. Props azaozz, dav4, ironprogrammer, johnbillion, kkmuffme, monzuralam, peterwilsoncc, sergeybiryukov. Fixes #58433. git-svn-id: https://develop.svn.wordpress.org/trunk@57943 602fd350-edb4-49c9-b593-d223f7449a82
This commit is contained in:
parent
9b70a33d7e
commit
18db904c29
@ -45,7 +45,26 @@ wp_default_scripts( $wp_scripts );
|
||||
wp_default_packages_vendor( $wp_scripts );
|
||||
wp_default_packages_scripts( $wp_scripts );
|
||||
|
||||
if ( isset( $_SERVER['HTTP_IF_NONE_MATCH'] ) && stripslashes( $_SERVER['HTTP_IF_NONE_MATCH'] ) === $wp_version ) {
|
||||
$etag = "WP:{$wp_version};";
|
||||
|
||||
foreach ( $load as $handle ) {
|
||||
if ( ! array_key_exists( $handle, $wp_scripts->registered ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$ver = $wp_scripts->registered[ $handle ]->ver ? $wp_scripts->registered[ $handle ]->ver : $wp_version;
|
||||
$etag .= "{$handle}:{$ver};";
|
||||
}
|
||||
|
||||
/*
|
||||
* This is not intended to be cryptographically secure, just a fast way to get
|
||||
* a fixed length string based on the script versions. As this file does not
|
||||
* load the full WordPress environment, it is not possible to use the salted
|
||||
* wp_hash() function.
|
||||
*/
|
||||
$etag = 'W/"' . md5( $etag ) . '"';
|
||||
|
||||
if ( isset( $_SERVER['HTTP_IF_NONE_MATCH'] ) && stripslashes( $_SERVER['HTTP_IF_NONE_MATCH'] ) === $etag ) {
|
||||
header( "$protocol 304 Not Modified" );
|
||||
exit;
|
||||
}
|
||||
@ -59,7 +78,7 @@ foreach ( $load as $handle ) {
|
||||
$out .= get_file( $path ) . "\n";
|
||||
}
|
||||
|
||||
header( "Etag: $wp_version" );
|
||||
header( "Etag: $etag" );
|
||||
header( 'Content-Type: application/javascript; charset=UTF-8' );
|
||||
header( 'Expires: ' . gmdate( 'D, d M Y H:i:s', time() + $expires_offset ) . ' GMT' );
|
||||
header( "Cache-Control: public, max-age=$expires_offset" );
|
||||
|
@ -48,7 +48,26 @@ $out = '';
|
||||
$wp_styles = new WP_Styles();
|
||||
wp_default_styles( $wp_styles );
|
||||
|
||||
if ( isset( $_SERVER['HTTP_IF_NONE_MATCH'] ) && stripslashes( $_SERVER['HTTP_IF_NONE_MATCH'] ) === $wp_version ) {
|
||||
$etag = "WP:{$wp_version};";
|
||||
|
||||
foreach ( $load as $handle ) {
|
||||
if ( ! array_key_exists( $handle, $wp_styles->registered ) ) {
|
||||
continue;
|
||||
}
|
||||
|
||||
$ver = $wp_styles->registered[ $handle ]->ver ? $wp_styles->registered[ $handle ]->ver : $wp_version;
|
||||
$etag .= "{$handle}:{$ver};";
|
||||
}
|
||||
|
||||
/*
|
||||
* This is not intended to be cryptographically secure, just a fast way to get
|
||||
* a fixed length string based on the script versions. As this file does not
|
||||
* load the full WordPress environment, it is not possible to use the salted
|
||||
* wp_hash() function.
|
||||
*/
|
||||
$etag = 'W/"' . md5( $etag ) . '"';
|
||||
|
||||
if ( isset( $_SERVER['HTTP_IF_NONE_MATCH'] ) && stripslashes( $_SERVER['HTTP_IF_NONE_MATCH'] ) === $etag ) {
|
||||
header( "$protocol 304 Not Modified" );
|
||||
exit;
|
||||
}
|
||||
@ -84,7 +103,7 @@ foreach ( $load as $handle ) {
|
||||
}
|
||||
}
|
||||
|
||||
header( "Etag: $wp_version" );
|
||||
header( "Etag: $etag" );
|
||||
header( 'Content-Type: text/css; charset=UTF-8' );
|
||||
header( 'Expires: ' . gmdate( 'D, d M Y H:i:s', time() + $expires_offset ) . ' GMT' );
|
||||
header( "Cache-Control: public, max-age=$expires_offset" );
|
||||
|
Loading…
x
Reference in New Issue
Block a user