首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java的默认contentType

Java的默认contentType
EN

Stack Overflow用户
提问于 2016-05-03 07:56:17
回答 1查看 8.3K关注 0票数 3

在servlet中,我们通常会指定一个contentType,然后我们可以打印出html代码。

代码语言:javascript
复制
response.setContentType("text/html");
PrintWriter out = response.getWriter();

如果我们没有指定一个contentType,那么任何contentType都会被设置为默认的呢?我做了一个测试,通过添加response.setContentType("text/html");,然后删除它,但我的网站能够呈现html?为什么会这样呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-03 09:01:38

你的问题有两个不同的部分。让我分别回答

Java容器中的默认Content-Type头值

如果我们没有指定一个contentType,那么任何contentType都会被设置为默认的呢?

ServletResponse#getContentType的Javadoc判断

返回用于此响应中发送的MIME主体的内容类型。在提交响应之前,必须使用setContentType(java.lang.String) 指定内容类型。如果未指定任何内容类型,此方法将返回null

ServletResponse而言,没有默认值。响应将根本不包含Content-Type头。

Java规范(版本2.4和版本3)明确规定Servlet容器不能定义默认的内容类型。

这是JavaServlet3.0规范- JSR-315的一段摘录,重点是我

Servlet程序员负责确保为servlet生成的内容在响应对象中适当设置Content-Type头。HTTP1.1规范不要求在HTTP响应中设置此标头。servlet程序员没有设置Servlet容器时,不能设置默认的内容类型。

你是否能观察到这一点取决于外部因素。可以在servlet过滤器中填充Content-Type头,您的机器和执行该任务的服务器之间可能有一个代理,但是所有这些都是特定于给定应用程序的,或者是它部署的方式,而不是由Servlet容器决定的。

这在应用程序服务器之间可能有所不同,甚至依赖于一段配置(您可以使用web.xml指定扩展和内容类型之间的映射)。

底线是,有很多方法可以在Java应用程序中设置Content-Type头,但就Servlet而言,没有默认设置。

web浏览器处理缺少Content-Type头的响应

如果我们没有指定一个contentType,那么任何contentType都会被设置为默认的呢?我做了一个测试,通过添加response.setContentType("text/html");,然后删除它,但我的网站能够呈现html?为什么会这样呢?

正如前面提到的,一些东西可能正在设置内容类型。有时候,尽管越来越少,即使不是这样,你的网页浏览器仍然可能通过对MIME类型进行有根据的猜测来处理响应。

这是Internet Explorer/Edge做什么?

火狐,用于实现一种名为“未知解码器”(最初放在类型上的文档)的机制,在最初发布这个答案时,它可能仍然可以在一些网络档案中找到。It 因为安全原因,现在不再这么做了

不幸的是,我找不到一个明确的来源,描述铬/铬的行为。我希望他们的行为和Firefox一样,假设他们实现了这个标准,但我不能用引文来支持这一点。

票数 12
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36998638

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档