簡體   English   中英

是 header('Content-Type:text/plain'); 有必要嗎?

[英]Is header('Content-Type:text/plain'); necessary at all?

我還沒有看到有或沒有這個頭部信息的任何區別。

定義“必要”。

如果您希望瀏覽器知道文件的類型,這是必要的。 如果您不覆蓋它,PHP 會自動將Content-Type標頭設置為text/html ,因此您的瀏覽器會將其視為不包含任何 HTML 的 HTML 文件。 如果您的輸出包含任何 HTML,您會看到非常不同的結果。 如果您要發送:

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

Content-Type: text/html; charset=UTF-8 Content-Type: text/html; charset=UTF-8將在瀏覽器中以粗體和斜體顯示:

✅ 好的

Content-Type: text/plain; charset=UTF-8 Content-Type: text/plain; charset=UTF-8將在瀏覽器中顯示如下:

<b><i>✅ OK</i></b>

TLDR 版本:如果你真的只輸出純文本,沒有像<>這樣的特殊字符,那么這並不重要,但這錯誤的。

PHP 使用 Content-Type text/html作為默認值,這與text/plain非常相似,這解釋了為什么您看不到任何差異。

如果要按原樣輸出文本(包括<>符號),則需要text/plain content-type。

例子:

header("Content-Type: text/plain");
echo "<b>hello world</b>";
// Displays in the browser: <b>hello world</b>

header("Content-Type: text/html");
echo "<b>hello world</b>";
// Displays in the browser with bold font: hello world

告訴瀏覽器您發送的數據類型非常重要。 區別應該很明顯。 嘗試在瀏覽器中查看以下 PHP 文件的輸出;

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

你會看見:

你好

(請注意,如果您在這種情況下錯過標題行,您將獲得相同的結果 - text/html 是 php 的默認值)

將其更改為文本/純文本

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

你會看見:

<p>你好</p>

為什么這很重要? 如果您在 php 腳本中有類似以下內容,例如,由 ajax 請求使用:

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

有人可以在他們的網站上放置一個鏈接,如http://example.com/test.php?name=%3Cscript%20src=%22http://example.com/eviljs%22%3E%3C/script%3E網站,如果用戶點擊它,他們就會將他們在您網站上的所有信息暴露給提供鏈接的任何人。 如果您將文件作為文本/純文本提供,則您是安全的。

請注意,這是一個愚蠢的示例,攻擊者更有可能將錯誤的腳本標記添加到數據庫中的字段或使用表單提交。

設置 Content-Type 標頭將影響 Web 瀏覽器處理您的內容的方式。 當大多數主流 Web 瀏覽器遇到 text/plain 的 Content-Type 時,它​​們將在瀏覽器窗口中呈現原始文本源(而不是在 HTML 中呈現的源)。 這就是看到的區別

<b>foo</b>

要么

此外,當使用XMLHttpRequest對象時,您的 Content-Type 標頭將影響瀏覽器序列化返回結果的方式。 在采用 jQuery 和 Prototype 等 AJAX 框架之前,AJAX 響應的一個常見問題是 Content-Type 設置為 text/html 而不是 text/xml。 如果 Content-Type 為 text/plain,則可能會出現類似的問題。

假設您想用 204: No Content HTTP 狀態回答請求。 Firefox 會在瀏覽器的控制台中抱怨“找不到元素”。 這是 Firefox 中的一個錯誤,多年來一直被報告但從未修復。 通過發送“Content-type: text/plain”標頭,您可以防止 Firefox 中出現此錯誤。

不,它不是那樣的,這里是支持我的答案的示例 ----> 明顯的區別是可見的,當您使用 HTTP 壓縮時,它允許您在從服務器到客戶端傳輸時壓縮數據以及類型這個數據會自動變成“gzip”,它告訴瀏覽器 bowser 得到了一個壓縮的數據,它必須向上壓縮它,這是一個 Type 在 Bowser 真正重要的例子。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM