%EC%97%90%20%EB%8C%80%ED%95%9C%20%EC%97%AC%EB%9F%AC%20%ED%98%B8%EC%B6%9C%EC%9D%B4%20%EC%9E%91%EB%8F%99%ED%95%98%EC%A7%80%20%EC%95%8A%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
내 PHP 파일에는 다음 코드가 있습니다(실제 코드는 아니며 데모 목적으로만 사용됨).
ob_start();
var_export(headers_sent());
var_export(ob_get_status());
header('Content-Type: text/html');
header('Content-Type: application/json');
그러나 응답 헤더는 text/html
결국 application/json
. 내 이해에 따르면 마지막 호출은 header()
사용되는 것이어야 합니다. 특히 headers_sent()
false를 반환하고 ob_get_status()
출력 버퍼링이 켜져 있는지 확인하기 때문입니다.
~ 안에PHP 문서header()
버전 5.1.2의 변경 로그에는 다음과 같은 내용이 나와 있습니다 .
이 기능은 이제 헤더 삽입 공격에 대한 보호로 두 개 이상의 헤더가 동시에 전송되는 것을 방지합니다.
하지만 이것이 무엇을 의미하는지 잘 모르겠습니다. 왜냐하면 이것은 확실히 PHP 5.1.2 이후로 항상 문제가 되지 않았기 때문입니다.
그리고 심지어워드프레스예를 들어 여러 번 전화하는 데 의존하고 있습니다 header()
. wp-admin/admin-ajax.php
파일 호출의 시작 부분에 있고 나중에 작업 이 에서 @header( 'Content-Type: text/html; charset=' . get_option( 'blog_charset' ) );
호출하는 JSON 데이터를 반환해야 한다고 결정한 경우입니다 .@header( 'Content-Type: application/json; charset=' . get_option( 'blog_charset' ) );
wp_send_json()
wp-includes/functions.php
PHP가 마지막으로 지정된 콘텐츠 유형을 사용하도록 서버에서 수행할 수 있는 변경 사항이 있습니까? 분명히 Wordpress 핵심 파일을 변경할 수 없습니다.
저는 데비안 9.3, PHP 7.1.3, 아파치 2.4.25를 사용합니다.
사이트 참고 사항: 이 문제로 인해 미디어 라이브러리가 그리드 모드에서 이미지를 로드하지 않고 활동 표시기가 계속 회전하게 됩니다.
!! 업데이트 !!
.htaccess
이제 내 파일 에 다음이 있기 때문에 이런 일이 발생한다는 것을 알았습니다 .
php_value output_handler mb_output_handler
왜 거기에 그게 들어 있는지 잊어버렸는데, 감히 제거할 수 있을지 모르겠네요... 그런데 왜 그런 효과가 있는 걸까요?