为什么有的带后缀名的网址能直接在浏览器里预览,有的默认是下载文件? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Mickeyy
V2EX    问与答

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

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

    比如 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 站。
    ktqFDx9m2Bvfq3y4
        6
    ktqFDx9m2Bvfq3y4  
       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  
    PRO
       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     Solana     891 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 22:41 PVG 06:41 LAX 15:41 JFK 18:41
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86