通过URL后缀区分HTML文档

时间:2016-01-07 13:22:01

标签: html http url language-agnostic

浏览器收到的内容HTML文件在路径上可以有多个不同的文件扩展名:.html.htm/.php.asp.stm.cgi

有没有办法区别于请求网址,是否指向HTML文档或其他一些数据(f.ex。.png.css.js,...)?这应该在请求时确定,因此等待Content-Type不是一种选择。

HTML网址

google.com/stackoverflow.comhttps://en.wikipedia.org/wiki/Uniform_Resource_Locatorhttps://www.google.de/search?q=content-lengthhttp://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html

非HTML网址

http://cdn.sstatic.net/stackoverflow/img/apple-touch-icon@2.png?v=73d79a89bdedhttp://ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.jshttp://cdn.sstatic.net/stackoverflow/all.css?v=aaf07438bdbd

也许过滤非HTML部分(例如,通过jscsspngjpg,...)会有效。另一种方法是按What are common file extensions for web programming languages?过滤并包含目录和域。

它一定不是完美的,足够接近会很好。

4 个答案:

答案 0 :(得分:3)

  

有没有办法区分请求URL,是否它   指向HTML文档或一些其他数据(例如.png,.css,   .js,...)?这应该在请求时确定,所以   等待Content-Type不是一个选项。

不,这是不可能的。

网络服务器可以根据请求执行任何操作。

某些响应可以是静态的,即磁盘上的文件(但即使这样,扩展也不能保证文件的真实内容) - 其他响应可以是完全动态的,只有服务器决定返回哪种数据(它甚至可以返回一个.jpg文件来响应.html请求 - 或者相反的情况可能在现实世界中发生很多:一个.jpg网址,它返回一个带有该jpg下载链接的html页面。)

很多网址甚至都没有扩展名,所以一般来说检查扩展名是不行的。

最好(最简单)的方法是查看Content-Type标题字段(假设它与数据对应)。

如果客户端不想下载完整回复,只需检查Content-Type,就可以发出HEAD请求,该请求只会返回HTTP headers

答案 1 :(得分:2)

没有

一旦您点击路径段,网址就完全是任意的。

有时,URL会包含与HTTP服务器硬盘上的文件名匹配的内容。 有时该文件名将提供关于其中包含哪种数据的线索。通常它会给出关于服务器如何执行将生成任何类型内容的程序的线索。

HTTP资源的权威描述是Content-Type响应头(有时服务器在那里提供错误的信息)。

答案 2 :(得分:1)

不,那是不可能的(假设你正在寻找可靠的东西)。

通常,URI的格式与其标识的资源的媒体类型无关。这就是网络的运作方式。

答案 3 :(得分:-1)

以下答案已弃用。在Python中,标准库中有mimetypes.py,就是这样。

旧答案

作为一种推理:包含.html等文件扩展名的URL是实现细节。当您从cgi更改为,无论如何,您将被迫放弃URL,断开链接或保持不正确的版本。另见