mirror of
https://github.com/WordPress/WordPress.git
synced 2024-11-18 00:25:37 +01:00
d5f7417686
As of November 2021, the `HTTP/3` protocol is still officially an Internet Draft, but is already supported by 74% of running web browsers and, according to W3Techs, 23% of the top 10 million websites. It has been supported by Google Chrome (including Chrome for Android, and Microsoft Edge, which is based on it) since April 2020 and by Mozilla Firefox since May 2021. Safari 14 (on macOS Big Sur and iOS 14) has also implemented the protocol but support is hidden behind a feature flag. Based on the wide support, this change adds `HTTP/3` as a valid HTTP protocol. Props malthert. Fixes #54404. Built from https://develop.svn.wordpress.org/trunk@52087 git-svn-id: http://core.svn.wordpress.org/trunk@51679 1a063a9b-81f0-0310-95a4-ce76da25c4cd
93 lines
2.5 KiB
PHP
93 lines
2.5 KiB
PHP
<?php
|
|
|
|
/**
|
|
* Disable error reporting
|
|
*
|
|
* Set this to error_reporting( -1 ) for debugging
|
|
*/
|
|
error_reporting( 0 );
|
|
|
|
/** Set ABSPATH for execution */
|
|
if ( ! defined( 'ABSPATH' ) ) {
|
|
define( 'ABSPATH', dirname( __DIR__ ) . '/' );
|
|
}
|
|
|
|
define( 'WPINC', 'wp-includes' );
|
|
define( 'WP_CONTENT_DIR', ABSPATH . 'wp-content' );
|
|
|
|
require ABSPATH . 'wp-admin/includes/noop.php';
|
|
require ABSPATH . WPINC . '/theme.php';
|
|
require ABSPATH . WPINC . '/class-wp-theme-json-resolver.php';
|
|
require ABSPATH . WPINC . '/global-styles-and-settings.php';
|
|
require ABSPATH . WPINC . '/script-loader.php';
|
|
require ABSPATH . WPINC . '/version.php';
|
|
|
|
$protocol = $_SERVER['SERVER_PROTOCOL'];
|
|
if ( ! in_array( $protocol, array( 'HTTP/1.1', 'HTTP/2', 'HTTP/2.0', 'HTTP/3' ), true ) ) {
|
|
$protocol = 'HTTP/1.0';
|
|
}
|
|
|
|
$load = $_GET['load'];
|
|
if ( is_array( $load ) ) {
|
|
ksort( $load );
|
|
$load = implode( '', $load );
|
|
}
|
|
|
|
$load = preg_replace( '/[^a-z0-9,_-]+/i', '', $load );
|
|
$load = array_unique( explode( ',', $load ) );
|
|
|
|
if ( empty( $load ) ) {
|
|
header( "$protocol 400 Bad Request" );
|
|
exit;
|
|
}
|
|
|
|
$rtl = ( isset( $_GET['dir'] ) && 'rtl' === $_GET['dir'] );
|
|
$expires_offset = 31536000; // 1 year.
|
|
$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 ) {
|
|
header( "$protocol 304 Not Modified" );
|
|
exit;
|
|
}
|
|
|
|
foreach ( $load as $handle ) {
|
|
if ( ! array_key_exists( $handle, $wp_styles->registered ) ) {
|
|
continue;
|
|
}
|
|
|
|
$style = $wp_styles->registered[ $handle ];
|
|
|
|
if ( empty( $style->src ) ) {
|
|
continue;
|
|
}
|
|
|
|
$path = ABSPATH . $style->src;
|
|
|
|
if ( $rtl && ! empty( $style->extra['rtl'] ) ) {
|
|
// All default styles have fully independent RTL files.
|
|
$path = str_replace( '.min.css', '-rtl.min.css', $path );
|
|
}
|
|
|
|
$content = get_file( $path ) . "\n";
|
|
|
|
if ( strpos( $style->src, '/' . WPINC . '/css/' ) === 0 ) {
|
|
$content = str_replace( '../images/', '../' . WPINC . '/images/', $content );
|
|
$content = str_replace( '../js/tinymce/', '../' . WPINC . '/js/tinymce/', $content );
|
|
$content = str_replace( '../fonts/', '../' . WPINC . '/fonts/', $content );
|
|
$out .= $content;
|
|
} else {
|
|
$out .= str_replace( '../images/', 'images/', $content );
|
|
}
|
|
}
|
|
|
|
header( "Etag: $wp_version" );
|
|
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" );
|
|
|
|
echo $out;
|
|
exit;
|