为什么有的带后缀名的网址能直接在浏览器里预览,有的默认是下载文件?

264 天前
 Mickeyy

比如 www.abc.com/1.txt 我打开默认是在浏览器里显示 txt 内容

而我在自己的网站上传了这个 1.txt ,输入网址 www.mywebsite.com/1.txt 却是自动下载文件?

2014 次点击
所在节点    问与答
15 条回复
JohnVon
264 天前
搜索 http header content-type
none
264 天前
response header 里参数不一样
agagega
264 天前
取决于 HTTP header 里的 Content-Disposition 字段。如果 inline 就是不下载,attachment 就是下载。有帮助的话点个赞吧,被降权没币了。
moult
264 天前
Mickeyy
264 天前
解惑了,感谢楼上几位大佬,我爱 V 站。
Chad0000
264 天前
这种问题问 GPT 也能解决的
iBugOne
264 天前
大多数时候 response 是没有 Content-Disposition 的,这时候就会取决于 Content-Type 了(所以 #1 其实没说错)
ysc3839
264 天前
@iBugOne 是的,Content-Disposition 的用途更多是指定文件名,控制是否下载、以及浏览器的解析规则的是 Content-Type ,也称为 mime type 。
yuzo555
264 天前
这个取决于 Content-Disposition 响应头是 inline 还是 attachment
inline 就是在浏览器内直接展示,attachment 就是下载

但除非服务端主动设置,一般响应不会有 Content-Disposition 响应头的,此时浏览器会针对不同的文件类型(即 Content-Type 响应头)来决定

对于浏览器来说:
一般常见的纯文本文件类型(如 text/* 、JS 、CSS 等)浏览器会直接采用 inline 原样展示出来;
一些浏览器原生支持的文件类型(例如支持的图片 image/*、支持的音视频 audio/*、video/*、网页 text/html 、PDF 等)浏览器会直接解析展示出来;
如果不属于上面两类,浏览器会采用 attachment 触发下载。

服务端如何自动设置 Content-Type 响应头:
一般服务器都有一个 MIME 类型表,为不同的文件后缀自动设置 Content-Type 响应头
例如 .mp4 文件 对应 video/mp4 ;.js 文件对应 text/javascript

对于 MIME 类型表里面没有的文件后缀类型,服务器也会设置一个默认值,不同服务器会有不同,例如 application/octet-stream 或者 text/plain 等

OP 这个情况很明显是服务器 MIME 类型表里没有 txt 这个后缀,然后服务器自动设置 Content-Type 响应头为 application/octet-stream ,然后浏览器会默认采用 attachment 触发下载。
所以只需要在服务器 MIME 类型表里补充 txt 这个后缀为 text/plain 即可。
Tink
264 天前
其实问 gpt 可能更快
Mickeyy
264 天前
@Chad0000
@Tink
确实,ChatGPT 可以更快的解答问题,但我想有时候能引发讨论也是好的吧,虽然现在 ChatGPT 很高效,但偶尔有些问题我还是倾向去问搜索引擎,可以更快速的得到一些相关结果,同样的,有些问题我也更倾向来到社区直接和真实的大佬们互动,说实话我用 ChatGPT 的频次并不低,用得多了甚至也比较怀念与真人讨论、交流的感觉,尤其是看到楼上几位大佬的耐心解答,都让我觉得挺温暖的,这是 ChatGPT 类工具无论如何也给不了的感觉,可能我的问题在于这个提问太过于简单了,所以让二位有了这样的回复,但其实自我发帖到现在也有几位 V 友收藏了这个帖子,或许无意中也帮助到了其他人呢。
m4a1deakvv2
264 天前
谢谢,学习了
blankmiss
264 天前
@Mickeyy 摸鱼的时候看过不下三个人问这个问题了 其实直接 google: V2EX 搜索类似的问题就行了
dode
263 天前
也可以根据需要在前端控制,强制下载

<a href="/xxx" download>下载</a>
<a href="/xxx" >查看</a>
JohnVon
263 天前
@moult 👍,学习了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/966834

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX