26 public static function register() {
27 if ( version_compare( PHP_VERSION,
'8.6',
'<' ) ) {
35 class_exists( WebRequest::class );
36 class_exists( LoggerFactory::class );
37 class_exists( Telemetry::class );
40 header_register_callback( self::callback( ... ) );
51 foreach ( headers_list() as $header ) {
52 $header = explode(
':', $header, 2 );
55 if ( isset( $header[1] ) ) {
56 $headers[ strtolower( trim( $header[0] ) ) ][] = trim( $header[1] );
60 if ( isset( $headers[
'set-cookie'] ) ) {
61 $cacheControl = isset( $headers[
'cache-control'] )
62 ? implode(
', ', $headers[
'cache-control'] )
65 if ( !preg_match(
'/(?:^|,)\s*(?:private|no-cache|no-store)\s*(?:$|,)/i',
68 header(
'Expires: Thu, 01 Jan 1970 00:00:00 GMT' );
69 header(
'Cache-Control: private, max-age=0, s-maxage=0' );
70 LoggerFactory::getInstance(
'cache-cookies' )->warning(
71 'Cookies set on {url} with Cache-Control "{cache-control}"', [
73 'set-cookie' => self::sanitizeSetCookie( $headers[
'set-cookie'] ),
74 'cache-control' => $cacheControl ?:
'<not set>',
80 $telemetryHeaders = Telemetry::getInstance()->getRequestHeaders();
83 foreach ( $telemetryHeaders as $header => $value ) {
84 if ( !isset( $headers[strtolower( $header )] ) ) {
85 header(
"$header: $value" );
90 self::$headersSentException =
new RuntimeException(
'Headers already sent from this point' );
118 $sanitizedValues = [];
119 foreach ( $values as $value ) {
121 $parts = explode(
';', $value );
122 [ $name, $value ] = explode(
'=', $parts[0], 2 );
123 if ( strlen( $value ) > 8 ) {
124 $value = substr( $value, 0, 8 ) .
'...';
125 $parts[0] =
"$name=$value";
127 $sanitizedValues[] = implode(
';', $parts );
129 return implode(
"\n", $sanitizedValues );