更具体地说,我正在使用:
public String getMimeType() {
ServletContext context = request.getServletContext();
String filePath = request.getRequestURI().substring(request.getContextPath().length()+1, request.getRequestURI().length());
String fileName = context.getRealPath(filePath);
return context.getMimeType(fileName);
}
确定客户端请求的文件类型(css、js、字体等)。根据文件类型,会发生不同的操作。这在浏览器中是否一致,或者通常是一种根据 url 中传递的文件名确定文件类型的安全方法,或者它是否太容易破坏?
最佳答案
Is this consistent across browsers?
与文件扩展名关联的 mime 类型在此特定代码片段中,并非由客户端确定。由服务器根据<mime-mapping>
确定web.xml
中的条目。客户端可以控制的只是 URL 中的文件扩展名。但你已经知道了。
所以,您最好问“这在服务器之间是否一致?”。答案是否。每个服务器都有自己预定义的 mime 映射。较旧的服务器可能缺乏较新的 mime 类型(例如 XLSX、SVG 等)的映射。如果您想涵盖您感兴趣的每种 mime 类型,并且无法控制目标服务器及其配置,那么您可以更好地在 webapp 自己的 web.xml
中明确映射它.
与具体问题无关,请跳过getRealPath()
废话。在一个像样的 Web 应用程序中从来不需要它。此外,从技术上讲,您根本不需要它。 URI 甚至唯一的文件名都适用于 getMimeType()
方法。
关于servlets - 使用 ServletContext#getMimeType() 是否安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33138361/