V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Mickeyy
V2EX  ›  问与答

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

  •  1
     
  •   Mickeyy · 2023-08-20 16:08:59 +08:00 · 2242 次点击
    这是一个创建于 443 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    <a href="/xxx" download>下载</a>
    <a href="/xxx" >查看</a>
    JohnVon
        15
    JohnVon  
       2023-08-21 12:39:03 +08:00 via Android
    @moult 👍,学习了
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1084 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 19:14 · PVG 03:14 · LAX 11:14 · JFK 14:14
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.