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

2023-08-20 16:08:59 +08:00
 Mickeyy

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

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

2271 次点击
所在节点    问与答
15 条回复
JohnVon
2023-08-20 16:11:54 +08:00
搜索 http header content-type
none
2023-08-20 16:12:15 +08:00
response header 里参数不一样
agagega
2023-08-20 16:16:40 +08:00
取决于 HTTP header 里的 Content-Disposition 字段。如果 inline 就是不下载,attachment 就是下载。有帮助的话点个赞吧,被降权没币了。
moult
2023-08-20 16:17:16 +08:00
Mickeyy
2023-08-20 16:21:52 +08:00
解惑了,感谢楼上几位大佬,我爱 V 站。
Chad0000
2023-08-20 16:33:14 +08:00
这种问题问 GPT 也能解决的
iBugOne
2023-08-20 16:50:32 +08:00
大多数时候 response 是没有 Content-Disposition 的,这时候就会取决于 Content-Type 了(所以 #1 其实没说错)
ysc3839
2023-08-20 17:15:35 +08:00
@iBugOne 是的,Content-Disposition 的用途更多是指定文件名,控制是否下载、以及浏览器的解析规则的是 Content-Type ,也称为 mime type 。
yuzo555
2023-08-20 17:29:22 +08:00
这个取决于 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
2023-08-20 17:48:09 +08:00
其实问 gpt 可能更快
Mickeyy
2023-08-20 19:08:41 +08:00
@Chad0000
@Tink
确实,ChatGPT 可以更快的解答问题,但我想有时候能引发讨论也是好的吧,虽然现在 ChatGPT 很高效,但偶尔有些问题我还是倾向去问搜索引擎,可以更快速的得到一些相关结果,同样的,有些问题我也更倾向来到社区直接和真实的大佬们互动,说实话我用 ChatGPT 的频次并不低,用得多了甚至也比较怀念与真人讨论、交流的感觉,尤其是看到楼上几位大佬的耐心解答,都让我觉得挺温暖的,这是 ChatGPT 类工具无论如何也给不了的感觉,可能我的问题在于这个提问太过于简单了,所以让二位有了这样的回复,但其实自我发帖到现在也有几位 V 友收藏了这个帖子,或许无意中也帮助到了其他人呢。
m4a1deakvv2
2023-08-20 21:38:56 +08:00
谢谢,学习了
blankmiss
2023-08-21 00:08:36 +08:00
@Mickeyy 摸鱼的时候看过不下三个人问这个问题了 其实直接 google: V2EX 搜索类似的问题就行了
dode
2023-08-21 09:05:38 +08:00
也可以根据需要在前端控制,强制下载

<a href="/xxx" download>下载</a>
<a href="/xxx" >查看</a>
JohnVon
2023-08-21 12:39:03 +08:00
@moult 👍,学习了

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

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

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

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

© 2021 V2EX