Mickeyy
V2EX  ›  问与答

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

  •  1
     
  •   Mickeyy · Aug 20, 2023 · 3788 views
    This topic created in 1171 days ago, the information mentioned may be changed or developed.

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

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

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

    <a href="/xxx" download>下载</a>
    <a href="/xxx" >查看</a>
    theroad
    theroad
    Aug 21, 2023 via Android
    15
    @moult 👍,学习了
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   5224 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 47ms · UTC 02:22 · PVG 10:22 · LAX 18:22 · JFK 21:22
    ♥ Do have faith in what you're doing.