wp_headers vs send_headers. Quando usar cada um?

9

Eu vi wp_headers e send_headers ambos usados anteriormente para a mesma coisa e estou imaginando como você deve saber qual deles usar e quando ...

Na send_headers página do códice , há um exemplo de adição da X-UA-Compatible: IE=edge,chrome=1 para compatibilidade com versões anteriores do Internet Explorer já que a metatag muitas vezes falha em sites da intranet se carregada muito tarde .

É assim que o exemplo send_headers se parece:

add_action( 'send_headers', 'add_header_xua' );
function add_header_xua() {
    header( 'X-UA-Compatible: IE=edge,chrome=1' );
}

No entanto, wp_headers também pode fazer isso:

apply_filters ( 'wp_headers', array $headers, WP $this )

add_filter( 'wp_headers', 'wpieeam_headers' );
function wpieeam_headers($headers) {
    if (!is_admin()) {
        $headers['X-UA-Compatible'] = 'IE=edge,chrome=1';    
    }
    return $headers;
}

Atualização: Na verdade, notei que uma conversa sobre isso mais ou menos começou uma pergunta parecida há alguns anos atrás ...

Além disso, o send_headers tem a ver apenas com o front end? Eu vi wp_headers fazer verificações como esta:

if ( isset($_SERVER['HTTP_USER_AGENT']) && (strpos($_SERVER['HTTP_USER_AGENT'], 'MSIE') !== false) )

e

if (!is_admin()) 

Estou pensando que send_headers não precisa fazer esses cheques ...

    
por Bryan Willis 07.01.2016 / 19:32

1 resposta

8

Ok, então acho que descobri ...

Ambos funcionam na maior parte como seria de esperar, enviando cabeçalhos http / php para o navegador. wp_headers é na verdade um filtro dentro das funções send_headers() . Você pode usar isso para modificar os cabeçalhos antes que eles sejam enviados para o navegador com alguma exceção. wp_headers não poderá fazer nada se uma página estática em cache estiver lidando com ...

É aqui que entra o gancho send_headers . Após o filtro wp_headers , a função send_headers() verificará se Last-Modified foi enviada com dirá se a página foi armazenada em cache ou não e, em seguida, nos conectará após o armazenamento em cache, o tipo de conteúdo, etc. terem sido enviados.

Então, para o meu exemplo usando X-UA-Compatible , enquanto os dois funcionam, estou inclinado a usar send_headers . Por quê? Se você fosse adicionar os dois, send_headers venceria todas as vezes e garantiria que fosse carregado mesmo se fosse adicionado depois que a página fosse armazenada em cache.

Embora o uso de uma tag <meta> como muitos frameworks populares usados também funcionassem para x-ua-compatible, ele não funcionará em muitos navegadores, a menos que seja carregado quase imediatamente após a tag principal de abertura. Isso é causado por diversos motivos, como se a configuração "intranet" fosse configurada para toda a rede . Por esse motivo, usar o método php é mais seguro. No entanto, se você fosse adicionar os dois, a meta tag venceria (supondo que fosse incluída cedo o suficiente.

Com relação a X-UA-Compatible compatible, espero que isso seja irrelevante em breve, já que A Microsoft está abandonando o suporte para versões mais antigas do IE na próxima semana!

Além disso, eu testei o filtro wp_headers sem usar a verificação is_admin() e ele não modificou os admin_headers para que a verificação seja desnecessária.

Se você precisou modificar os cabeçalhos de administração por algum motivo, sei que pode fazer assim, mas não tenho certeza se funcionaria o tempo todo ...

function admin_add_my_header() {
    header('X-UA-Compatible: IE=edge,chrome=1');    
}
add_action( 'admin_init', 'admin_add_my_header', 1 );

Resposta atualizada com base na sugestão de Toscho para verificar o administrador:

is_admin() || add_action('send_headers', function(){ 
    header('X-UA-Compatible: IE=edge,chrome=1'); 
}, 1);
    
por Bryan Willis 08.01.2016 / 05:57