WordPress.org

Make WordPress Core

Ticket #28722: 28722.diff

File 28722.diff, 4.7 KB (added by dd32, 7 years ago)
  • src/wp-admin/load-scripts.php

     
    123123
    124124if ( empty($load) )
    125125        exit;
    126126
    127127require(ABSPATH . WPINC . '/script-loader.php');
    128128require(ABSPATH . WPINC . '/version.php');
    129129
    130130$compress = ( isset($_GET['c']) && $_GET['c'] );
    131131$force_gzip = ( $compress && 'gzip' == $_GET['c'] );
    132132$expires_offset = 31536000; // 1 year
    133133$out = '';
    134134
    135135$wp_scripts = new WP_Scripts();
    136136wp_default_scripts($wp_scripts);
    137137
    138 foreach( $load as $handle ) {
    139         if ( !array_key_exists($handle, $wp_scripts->registered) )
     138$etag = "wp:{$wp_version},";
     139
     140foreach ( $load as $i => $handle ) {
     141        if ( !array_key_exists($handle, $wp_scripts->registered) ) {
     142                unset( $load[ $i ] );
    140143                continue;
     144        }
     145        $etag .= $handle . ':' . $wp_scripts->registered[$handle]->ver . ',';
     146}
     147$etag = md5( $etag );
     148
     149if ( isset( $_SERVER['HTTP_IF_NONE_MATCH'] ) && stripslashes( $_SERVER['HTTP_IF_NONE_MATCH'] ) === $etag ) {
     150        header('HTTP/1.1 304 Not Modified');
     151        exit();
     152}
    141153
     154foreach ( $load as $handle ) {
    142155        $path = ABSPATH . $wp_scripts->registered[$handle]->src;
    143156        $out .= get_file($path) . "\n";
    144157}
    145158
     159header("Etag: $etag");
    146160header('Content-Type: application/x-javascript; charset=UTF-8');
    147161header('Expires: ' . gmdate( "D, d M Y H:i:s", time() + $expires_offset ) . ' GMT');
    148162header("Cache-Control: public, max-age=$expires_offset");
    149163
    150164if ( $compress && ! ini_get('zlib.output_compression') && 'ob_gzhandler' != ini_get('output_handler') && isset($_SERVER['HTTP_ACCEPT_ENCODING']) ) {
    151165        header('Vary: Accept-Encoding'); // Handle proxies
    152166        if ( false !== stripos($_SERVER['HTTP_ACCEPT_ENCODING'], 'deflate') && function_exists('gzdeflate') && ! $force_gzip ) {
    153167                header('Content-Encoding: deflate');
    154168                $out = gzdeflate( $out, 3 );
    155169        } elseif ( false !== stripos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') && function_exists('gzencode') ) {
    156170                header('Content-Encoding: gzip');
    157171                $out = gzencode( $out, 3 );
    158172        }
    159173}
    160174
  • src/wp-admin/load-styles.php

     
    9898$load = preg_replace( '/[^a-z0-9,_-]+/i', '', $_GET['load'] );
    9999$load = array_unique( explode( ',', $load ) );
    100100
    101101if ( empty($load) )
    102102        exit;
    103103
    104104$compress = ( isset($_GET['c']) && $_GET['c'] );
    105105$force_gzip = ( $compress && 'gzip' == $_GET['c'] );
    106106$rtl = ( isset($_GET['dir']) && 'rtl' == $_GET['dir'] );
    107107$expires_offset = 31536000; // 1 year
    108108$out = '';
    109109
    110110$wp_styles = new WP_Styles();
    111111wp_default_styles($wp_styles);
    112112
    113 foreach( $load as $handle ) {
    114         if ( !array_key_exists($handle, $wp_styles->registered) )
     113$etag = "wp:{$wp_version},";
     114
     115foreach ( $load as $i => $handle ) {
     116        if ( !array_key_exists($handle, $wp_styles->registered) ) {
     117                unset( $load[ $i ] );
    115118                continue;
     119        }
     120        $etag .= $handle . ':' . $wp_styles->registered[$handle]->ver . ',';
     121}
     122$etag = md5( $etag );
     123
     124if ( isset( $_SERVER['HTTP_IF_NONE_MATCH'] ) && stripslashes( $_SERVER['HTTP_IF_NONE_MATCH'] ) === $etag ) {
     125        header('HTTP/1.1 304 Not Modified');
     126        exit();
     127}
    116128
     129foreach ( $load as $handle ) {
    117130        $style = $wp_styles->registered[$handle];
    118131        $path = ABSPATH . $style->src;
    119132
    120133        if ( $rtl && ! empty( $style->extra['rtl'] ) ) {
    121134                // All default styles have fully independent RTL files.
    122135                $path = str_replace( '.min.css', '-rtl.min.css', $path );
    123136        }
    124137
    125138        $content = get_file( $path ) . "\n";
    126139
    127140        if ( strpos( $style->src, '/' . WPINC . '/css/' ) === 0 ) {
    128141                $content = str_replace( '../images/', '../' . WPINC . '/images/', $content );
    129142                $content = str_replace( '../js/tinymce/', '../' . WPINC . '/js/tinymce/', $content );
    130143                $content = str_replace( '../fonts/', '../' . WPINC . '/fonts/', $content );
    131144                $out .= $content;
    132145        } else {
    133146                $out .= str_replace( '../images/', 'images/', $content );
    134147        }
    135148}
    136149
     150header("Etag: $etag");
    137151header('Content-Type: text/css; charset=UTF-8');
    138152header('Expires: ' . gmdate( "D, d M Y H:i:s", time() + $expires_offset ) . ' GMT');
    139153header("Cache-Control: public, max-age=$expires_offset");
    140154
    141155if ( $compress && ! ini_get('zlib.output_compression') && 'ob_gzhandler' != ini_get('output_handler') && isset($_SERVER['HTTP_ACCEPT_ENCODING']) ) {
    142156        header('Vary: Accept-Encoding'); // Handle proxies
    143157        if ( false !== stripos($_SERVER['HTTP_ACCEPT_ENCODING'], 'deflate') && function_exists('gzdeflate') && ! $force_gzip ) {
    144158                header('Content-Encoding: deflate');
    145159                $out = gzdeflate( $out, 3 );
    146160        } elseif ( false !== stripos($_SERVER['HTTP_ACCEPT_ENCODING'], 'gzip') && function_exists('gzencode') ) {
    147161                header('Content-Encoding: gzip');
    148162                $out = gzencode( $out, 3 );
    149163        }
    150164}
    151165