WordPress.org

Make WordPress Core

Ticket #40444: 40444.3.diff

File 40444.3.diff, 2.8 KB (added by jnylen0, 3 years ago)

Rename function; clean up docs/comments; only send empty header if it was already sent before

  • src/wp-includes/rest-api/class-wp-rest-server.php

    diff --git a/src/wp-includes/rest-api/class-wp-rest-server.php b/src/wp-includes/rest-api/class-wp-rest-server.php
    index 9d4a5fe..ab3858d 100644
    a b class WP_REST_Server { 
    252252                $send_no_cache_headers = apply_filters( 'rest_send_nocache_headers', is_user_logged_in() );
    253253                if ( $send_no_cache_headers ) {
    254254                        foreach ( wp_get_nocache_headers() as $header => $header_value ) {
    255                                 $this->send_header( $header, $header_value );
     255                                if ( empty( $header_value ) ) {
     256                                        $this->remove_header( $header );
     257                                } else {
     258                                        $this->send_header( $header, $header_value );
     259                                }
    256260                        }
    257261                }
    258262
    class WP_REST_Server { 
    12631267        }
    12641268
    12651269        /**
     1270         * Removes an HTTP header from the current response.
     1271         *
     1272         * @since 4.8.0
     1273         * @access public
     1274         *
     1275         * @param string $key Header key.
     1276         */
     1277        public function remove_header( $key ) {
     1278                if ( function_exists( 'header_remove' ) ) {
     1279                        // In PHP 5.3+ there is a way to remove an already set header.
     1280                        @header_remove( $key );
     1281                } else {
     1282                        // In PHP 5.2, send an empty header, but only as a last resort to
     1283                        // override a header already sent.
     1284                        foreach ( headers_list() as $header ) {
     1285                                if ( 0 === stripos( $header, "$key:" ) ) {
     1286                                        $this->send_header( $key, '' );
     1287                                        break;
     1288                                }
     1289                        }
     1290                }
     1291        }
     1292
     1293        /**
    12661294         * Retrieves the raw request entity (body).
    12671295         *
    12681296         * @since 4.4.0
  • tests/phpunit/includes/spy-rest-server.php

    diff --git a/tests/phpunit/includes/spy-rest-server.php b/tests/phpunit/includes/spy-rest-server.php
    index 58e3c3b..b14e2ab 100644
    a b class Spy_REST_Server extends WP_REST_Server { 
    3131                $this->sent_headers[ $header ] = $value;
    3232        }
    3333
     34        public function remove_header( $header ) {
     35                unset( $this->sent_headers[ $header ] );
     36        }
     37
    3438        /**
    3539         * Override the dispatch method so we can get a handle on the request object.
    3640         *
  • tests/phpunit/tests/rest-api/rest-server.php

    diff --git a/tests/phpunit/tests/rest-api/rest-server.php b/tests/phpunit/tests/rest-api/rest-server.php
    index 046d2b5..1cd9e68 100644
    a b class Tests_REST_Server extends WP_Test_REST_TestCase { 
    763763                $headers = $this->server->sent_headers;
    764764
    765765                foreach ( wp_get_nocache_headers() as $header => $value ) {
     766                        if ( empty( $value ) ) {
     767                                continue;
     768                        }
     769
    766770                        $this->assertTrue( isset( $headers[ $header ] ), sprintf( 'Header %s is not present in the response.', $header ) );
    767771                        $this->assertEquals( $value, $headers[ $header ] );
    768772                }
     773
     774                // Last-Modified should be unset as per #WP23021
     775                $this->assertFalse( isset( $headers['Last-Modified'] ), 'Last-Modified should not be sent.' );
    769776        }
    770777
    771778        public function test_no_nocache_headers_on_unauthenticated_requests() {