2009-09-12 2 views

답변

90

"필수"를 정의하십시오.

브라우저를 원하면 을 알고 있어야합니다. 파일의 종류는 무엇입니까? PHP는 Content-Type 헤더를 자동으로 text/html으로 설정하여 브라우저가 HTML을 포함하지 않는 HTML 파일로 처리하도록 무시합니다. 출력물에 HTML이 포함되어 있으면 매우 다른 결과가 나타납니다. 당신은 보낼 것 인 경우 :

<b><i>test</i></b> 

Content-Type: text/html 것 출력 :

테스트

Content-Type: text/plain 반면 것이라고 출력 :

<b><i>test</i></b> 

TLDR 버전 : 당신이 만약 실제로 텍스트를 출력하는 것만 큼 중요하지는 않지만 입니다.

+1

text/html 인 PHP 기본 콘텐츠 유형에 대한 진술을 제공 할 수 있습니까? 동의하지 않습니다. 단지 공식적인 문서를 찾는 것입니다. – billynoah

+8

php.ini에서 "default_mimetype"을 검색하십시오. "PHP의 기본 제공 기본값은 text/html"입니다. 왜 그런지는 모르지만 [매뉴얼] (http://php.net/manual/en/ini.core.php#ini.default-mimetype)에 실제로 언급되어 있지는 않습니다. –

+1

감사합니다. 나는 실제로 이것을 오늘 일찍 질문으로 게시하고이 설정에 대해 배웠다. – billynoah

41

PHP는 기본적으로 Content-Type "text/html"을 사용합니다.이 텍스트는 "text/plain"과 매우 유사하므로 차이점이없는 이유를 설명합니다. 텍스트를 그대로 출력하려면 text/plain이 필요합니다 (<> -ymbols 포함). 예 : 없음

header("Content-Type: text/plain"); 
echo "<b>hello world</b>"; 
// Output: <b>hello world</b> 

header("Content-Type: text/html"); 
echo "<b>hello world</b>"; 
// Output: hello world 
+11

* 브라우저 *는 기본적으로 text/html을 사용하지 않습니다 : PHP는 이것을 사용합니다. – Miles

+0

사소한 세부 사항 - 예제 코드는 여전히 유효합니다. –

+6

그리고 설명은 여전히 ​​잘못되었습니다 ... –

0

이 아니 그런 식으로, 여기 내 대답의 지원을위한 예입니다 ---- 당신이 데이터 동안 압축 할 수 HTTP 압축, 갈 때> 명확한 차이는 볼 수 서버에서 클라이언트로 이동하면이 데이터의 유형이 자동으로 "gzip"이되어 브라우저에 바우어가 압축되어 있고 upzip입니다.이 유형은 Bowser에서 Type이 중요한 경우의 예입니다.

+1

실제로 그것이 어떻게 작동하는지 실제로는 아닙니다. –

+0

나는 내가 정말로 내 지식을 수정하고 배울 정말로 열망하기 때문에 내가 틀렸다는 것을 설명 할 수있다. –

+0

oohh !! 나중에 미안 해요 그냥 내 마음에서 미끄러하지만, 당신이 유형을 정의하는 경우, 그것은 당신이 어떤 선택적 유형을 압축 할 수 있습니다 동의하지 않습니다 –

7

Content-Type 헤더를 설정하면 웹 브라우저에서 콘텐츠를 처리하는 방식이 달라집니다. 대부분의 주류 웹 브라우저가 Content-Type의 text/plain을 발견하면 HTML에서 렌더링 된 소스와 달리 브라우저 창에 원시 텍스트 소스를 렌더링합니다. XMLHttpRequest 객체를 사용하는 경우 그것은 foo는 또한

<b>foo</b> 

또는

을보고 사이의 차이입니다, 당신의 Content-Type 헤더는 브라우저가 반환 된 결과를 직렬화하는 방법에 영향을줍니다 . jQuery 및 Prototype과 같은 AJAX 프레임 워크를 인수하기 전에 AJAX 응답의 일반적인 문제점은 text/xml 대신 text/html로 설정된 Content-Type이었습니다. Content-Type이 text/plain이면 비슷한 문제가 발생할 수 있습니다.

1

204 : No Content HTTP 상태로 요청에 응답하고 싶다고합시다. Firefox가 브라우저의 콘솔에서 "요소를 찾을 수 없습니다"라는 메시지가 표시됩니다. 이것은 몇 년 동안보고되었지만 수정되지 않은 Firefox의 버그입니다. "Content-type : text/plain"헤더를 보내면 Firefox에서이 오류를 방지 할 수 있습니다.

4

어떤 종류의 데이터를 보내고 있는지 브라우저에 알리는 것이 매우 중요합니다. 그 차이는 분명해야합니다. 브라우저에서 다음 PHP 파일의 출력을보십시오.

<?php 
header('Content-Type:text/html'); 
?> 
<p>Hello</p> 

당신은 볼 수 있습니다 :

안녕하세요

이 경우 헤더 행을 놓칠 경우 동일한 결과를 얻을 것이다

(주 - 텍스트/HTML은 PHP의 기본이다 일반 텍스트)

변경을/

<?php 
header('Content-Type:text/plain'); 
?> 
<p>Hello</p> 

당신은 볼 수 있습니다 :

< P> 안녕하세요 </P>

않는 이유는이 문제? 당신은 예를 들어, 아약스 요청에 의해 사용되는, PHP 스크립트에 다음과 같은 경우 :

<?php 
header('Content-Type:text/html'); 
print "Your name is " . $_GET['name'] 

누군가가 자신의 사이트에 http://example.com/test.php?name=%3Cscript%20src=%22http://example.com/eviljs%22%3E%3C/script%3E 같은 URL에 대한 링크를 넣을 수 있습니다, 그리고 사용자가이를 클릭하면 , 그들은 귀하의 사이트에있는 모든 정보를 링크를 올리는 사람에게 공개했습니다. 파일을 text/plain으로 제공하면 안전합니다.

이것은 바보 같은 예입니다. 잘못된 스크립트 태그가 공격자에 의해 데이터베이스의 필드에 추가되거나 양식 제출을 사용했을 가능성이 큽니다.