gpt4 book ai didi

Java - Servlet 的默认 contentType

转载 作者:行者123 更新时间:2023-11-29 09:59:56 30 4
gpt4 key购买 nike

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

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

如果我们不指定 contentType,任何 contentType 都会被设置为默认值?我通过添加 response.setContentType("text/html"); 进行了测试,然后将其删除,但我的网站能够呈现 html?这是为什么?

最佳答案

您的问题有两个不同的部分。我分开回答

Java Servlet 容器中的默认 Content-Type header 值

What IF, we don't specify a contentType, any contentType will be set default?

根据 ServletResponse#getContentType 的 Javadoc 判断

Returns the content type used for the MIME body sent in this response. The content type proper must have been specified using setContentType(java.lang.String) before the response is committed. If no content type has been specified, this method returns null.

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

Java Servlet 规范(2.4 版和 3 版)明确指出 Servlet 容器不得定义默认内容类型。

以下是 Java Servlet 3.0 Specification - JSR-315 的摘录, 强调我的

Servlet programmers are responsible for ensuring that the Content-Type header isappropriately set in the response object for the content the servlet is generating. TheHTTP 1.1 specification does not require that this header be set in an HTTP response.Servlet containers must not set a default content type when the servlet programmerdoes not set the type.

您能否观察到这一点取决于外部因素。可以有填充 Content-Type header 的 servlet 过滤器,您的机器和执行此操作的服务器之间可能有代理,但所有这些都是特定于给定应用程序或其方式的已部署且不由 Servlet 容器确定。

这在应用程序服务器之间可能不同,甚至取决于配置(您可以使用 mime-mapping in web.xml 指定扩展和内容类型之间的映射)

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

Web 浏览器处理缺少 Content-Type header 的响应

What IF, we don't specify a contentType, any contentType will be set default? I did a test by adding response.setContentType("text/html");, then remove after it, but my website able to render the html? Why is that?

如前所述,某些东西可能会在此过程中设置内容类型。有时,尽管越来越少,即使不是这种情况,您的 Web 浏览器仍可能通过对 MIME 类型进行有根据的猜测来处理响应。

这是 what Internet Explorer/Edge does

Firefox,用于实现称为未知解码器 的机制(文档最初位于 https://developer.mozilla.org/en-US/docs/Mozilla/How_Mozilla_determines_MIME_Types ,可能在某些网络文件中仍然可用)早在最初发布此答案时。它no longer does that for security reasons .

很遗憾,我找不到描述 Chrome/Chromium 行为的权威来源。我希望他们的行为方式与 Firefox 相同,假设他们实现了该标准,但我无法通过引用来支持这一点。

关于Java - Servlet 的默认 contentType,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36998638/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com