wp_headers 및 send_headers. 각각을 언제 사용해야합니까?


10

나는 본 적이 wp_headerssend_headers모두 같은 일을 위해 이전에 사용하고 난 당신이 사용하는 경우 어떤 일을 알고 생각하고 얼마나 궁금하네요 ...

send_headers사본 페이지 를 추가하는 예제 거기에 X-UA-Compatible: IE=edge,chrome=1메타 태그가 종종 있기 때문에 인터넷 익스플로러 이전 버전과의 호환성을 위해 너무 늦게로드 된 경우 인트라넷 사이트에서 실패합니다 .

send_headers예제는 다음과 같습니다.

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

그러나 wp_headers이것을 할 수도 있습니다 :

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;
}

업데이트 : 실제로 몇 년 전에 비슷한 질문 으로이 대화가 시작 되었다는 것을 알았습니다 ...

또한 send_headers는 프론트 엔드와 만 관련이 있습니까? wp_headers가 다음과 같이 검사하는 것을 보았습니다.

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

if (!is_admin()) 

그래서 나는 send_headers그 점검을 할 필요가 없다고 생각 합니다 ...


1
일반적으로 말하면, 하나는 행동이고 다른 하나는 필터입니다. 액션은 이벤트가 발생할 때 무언가를하기위한 것이며 필터는 사용하기 전에 무언가를 수정하기위한 것입니다.
Milo

답변:


9

좋아, 나는 그것을 이해했다고 생각한다 ...

이 두 가지 모두 브라우저에 http / php 헤더를 보내면 대부분 예상대로 작동합니다. wp_headers실제로는 send_headers()함수 내부의 필터입니다. 이를 사용하면 헤더를 브라우저로 보내기 전에 헤더를 수정할 수 있습니다. wp_headers정적 캐시 된 페이지가 처리하고 있다면 아무것도 할 수 없습니다 ...

이것은 send_headers후크 가 작용하는 곳 입니다. wp_headers필터 후, send_headers()함수는 Last-Modified전송 여부를 확인 하여 페이지가 캐시되었는지 여부를 알려주고 캐싱, 컨텐츠 유형 등이 모두 전송 된 후 페이지에 연결되도록합니다.

따라서을 사용 X-UA-Compatible하는 예 에서는 둘 다 작동하지만을 사용하는 경향이 있습니다 send_headers. 왜? 두 가지를 모두 추가 send_headers하면 매번 승리하고 페이지가 캐시 된 후에 추가 된 경우에도로드됩니다.

많은 인기있는 프레임 워크<meta> 와 같은 태그를 사용하면 x-ua 호환에서도 작동하지만 여는 헤드 태그 직후에로드하지 않으면 많은 브라우저에서 작동하지 않습니다. "인트라넷"설정이 네트워크 전체로 설정된 경우와 같은 여러 가지 이유로 인해 발생합니다 . 이러한 이유로 php 메소드를 사용하는 것이 더 안전합니다. 그러나 둘 다 추가하면 메타 태그가 충분히 포함되어 있다고 가정하면 메타 태그가 승리합니다.

X-UA-Compatible호환성과 관련하여 Microsoft가 다음 주에 이전 버전의 IE에 대한 지원중단 하므로 곧 관련성이 없어지기를 바랍니다 .


또한 검사 wp_headers를 사용하지 않고 필터를 테스트했으며 is_admin()검사가 필요하지 않도록 admin_headers를 수정하지 않습니다.

어떤 이유로 관리자 헤더를 수정 해야하는 경우 이와 같이 할 수 있다는 것을 알고 있지만 항상 작동하는지 확실하지 않습니다 ...

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

관리자 확인을위한 Toscho의 제안에 따라 업데이트 된 답변 :

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

2
is_admin() || add_action( … )필요하지 않은 경우 등록 된 콜백 목록을 오염시킬 필요가 없으므로 여전히을 사용해야 합니다.
fuxia

재미있는 포인트 토초 ... 지금 약 10 년 동안 워드 프레스 사이트를 만들어 왔으며 또는 기호를 사용하기 전에 그 형식을 본 적이 없습니다. 실제로 몇 년 전에 해당 접근법을 추가하고 싶다면 조건을 올바르게 형식화하는 방법에 대한 질문을했습니다 .
Bryan Willis

Toscho 귀하의 제안에 따라 답변을 업데이트했습니다. 그게 무슨 뜻입니까?
Bryan Willis

그렇습니다. :)
fuxia

" send_headers매번 이기고 페이지가 캐시 된 후에 추가 된 경우에도로드되도록 보장 할 것입니다."— send_headers테스트에서 W3 Total Cache와 같은 플러그인이 사용하는 페이지 캐싱 또는 정적 캐싱을 이길 수 는 없습니다. 서버 수준에서 WordPress를 효과적으로 우회합니다.
Nick
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.