簡體   English   中英

Java-Servlet的默認contentType

[英]Java - Default contentType for Servlet

在servlet中,通常我們將指定一個contentType,然后可以打印出html代碼。

response.setContentType("text/html");
PrintWriter out = response.getWriter();

如果沒有指定contentType,什么contentType將設置為默認值呢? 我通過添加response.setContentType("text/html");進行了測試response.setContentType("text/html"); ,然后將其刪除,但是我的網站能夠呈現html嗎? 這是為什么?

您的問題有兩個不同的部分。 讓我分別回答

Java Servlet容器中的默認Content-Type標頭值

如果是什么,我們沒有指定contentType ,任何contentType將被設置為默認值嗎?

由Javadoc判斷ServletResponse#getContentType

返回用於此響應中發送的MIME正文的內容類型。 在提交響應之前,必須已經使用setContentType(java.lang.String)指定了適當的內容類型 如果未指定任何內容類型,則此方法返回null

ServletResponse而言,沒有默認值。 響應將僅不包含Content-Type標頭。

Java Servlet規范(版本2.4和版本3)明確指出,Servlet容器不得定義默認內容類型。

這是Java Servlet 3.0規范的摘錄-JSR-315 ,重點是

Servlet程序員負責確保在響應對象中為Servlet生成的內容正確設置Content-Type標頭。 HTTP 1.1規范不需要在HTTP響應中設置此標頭。 當Servlet程序員未設置默認內容類型時,Servlet容器不得設置默認內容類型。

是否能夠觀察到這一點取決於外部因素。 可能存在填充Content-Type標頭的servlet過濾器,在您的機器和執行此操作的服務器之間可能存在代理,但是所有這些特定於給定應用程序或它的部署方式,而不是由Servlet決定。容器。

這在應用程序服務器之間可能有所不同,甚至取決於一部分配置(您可以使用web.xml mime-mapping指定擴展名和內容類型之間mime-mapping )。

最重要的是,您可以通過多種方式在Java Web應用程序中設置Content-Type標頭,但是就Servlet API而言,沒有默認值

Web瀏覽器處理缺少Content-Type標頭的響應

如果是什么,我們沒有指定contentType ,任何contentType將被設置為默認值嗎? 我通過添加response.setContentType("text/html");進行了測試response.setContentType("text/html"); ,然后將其刪除,但是我的網站能夠呈現html嗎? 這是為什么?

如前所述,可能會一直設置內容類型。 但是,即使不是這種情況,您的網絡瀏覽器在大多數情況下仍可以處理它。

當瀏覽器遇到缺少內容類型標頭的響應時,他們只是試圖做出有根據的猜測。

例如,Firefox 使用一種稱為“ 未知解碼器”的東西

是Internet Explorer / Edge的功能

不幸的是,我找不到描述Chrome / Chromium行為的好資料。

暫無
暫無

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

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