nginx 踩坑 之 mine.types

踩坑记录

在尝试在 mac 上部署静态 doc 项目时,发现样式死活显示不出来,但是在开发环境样式可以正常显示的,打包后使用 nginx 代理却不能正常显示,这让我感到很困惑,我一开始认为是代理地址,或者相对路径配置的有问题,但在 devtools - network 中查看 css, js 文件 均成功请求。

Pasted image 20230329230525.png

于是我尝试在 URL 上拼接 css 文件路径,发现直接就下载下来了,要知道,正常的脚本(css, js…)如果直接通过浏览器访问脚本地址,是直接在网页中显示出来的,然而这里却没有在网页上打开,而是直接下载下来了。

经过一段时间的搜索排查后,发现之前由于 mime.types 文件没有和 nginx.conf 再同一个目录下,启动报错被我误删导致的。

mime.types 中指定了项目中已知的文件类型,如果没有在 mime.types 中出现,则默认为 default_type。
而在当时 default_type 指定的是:application/octet-stream, 所以导致 js, css 没有正常加载资源。

在 chrome 下,css 与 js 文件被设为 application/octet-stream 类型不会报错, 也没有任何提示,而在 firefox 中会报错提醒。

Pasted image 20230329230735.png

解决方式

在 nginx.conf 中指定了 mime.types 文件后, 重启后访问恢复正常

mine.types--nginx.conf.png

MIME type 介绍

MIME (Multipurpose Internet Mail Extensions) 类型是一种用于标识文件内容类型的标准。它最初是为了支持电子邮件系统而设计的,但现在也被广泛用于HTTP协议中,用于指示在互联网上传输的文件的类型。

MIME type 现在称为「 媒体类型 (media type) 」,但有时也是「 内容类型 (content type) 」是指示文件类型的字符串,与文件一起发送(例如,一个声音文件可能被标记为 audio/ogg ,一个图像文件可能是 image/png )。它与传统 Windows 上的文件扩展名有相同目的。

MIME type 由两个部分组成:主类型和子类型,它们之间由斜杠(/)分隔。主类型表示一类广泛的内容类型,而子类型表示这类内容的具体子类型。

下面是一些业务系统中常见的 MIME type

  1. 文本类型:

    • text/plain:普通文本文件。
    • text/html:HTML网页。
    • text/css:CSS样式表文件。
    • text/xml:XML文件。
  2. 图像类型:

    • image/jpeg:JPEG图像。
    • image/png:PNG图像。
    • image/gif:GIF图像。
    • image/svg+xml:可缩放矢量图形。
  3. 音频类型:

    • audio/mpeg:MPEG音频文件(MP3)。
    • audio/ogg:Ogg音频文件。
    • audio/wav:WAV音频文件。
  4. 视频类型:

    • video/mp4:MP4视频文件。
    • video/webm:WebM视频文件。
    • video/mpeg:MPEG视频文件。
  5. 应用程序类型:

    • application/javascript:JS文件。
    • application/json:JSON数据。
    • application/xml:XML数据。
    • application/octet-stream:未知的二进制数据。

在 HTTP 请求和响应中,MIME type 通常以 Content-Type 标头的形式进行传输,指示了消息主体的类型。这使得服务器和客户端能够正确地处理传输的数据,确保正确地解释内容,如在浏览器中正确显示图像或以适当的方式打开文件。

MIME type 在互联网通信中起着重要的作用,帮助确保数据能够以正确的格式传输和解释,从而促进了各种类型文件的无缝交互。

application/octet-stream 介绍

这是应用程序文件的默认值。意思是 未知的应用程序文件, 浏览器一般不会自动执行或询问执行。浏览器会像对待 设置了 HTTP 头 Content-Disposition值attachment 的文件一样来对待这类文件,即浏览器会触发下载行为。

application/octet-stream 是一种通用的二进制数据类型的 MIME type 。在 MIME type 中,application 表示一种应用程序或二进制数据类型,而 octet-stream 表示二进制数据流,即未知的二进制数据。

当服务器或系统无法识别文件的具体内容类型时,通常会将文件的 MIME type 设置为 application/octet-stream。这种设置告诉接收文件的客户端应用程序不要尝试解释文件的内容,而应该直接将其保存到本地文件系统中或交给用户选择打开方式。因为没有指定明确的内容类型,所以客户端将不能自动地以正确的方式打开或显示该文件,而是需要用户自行选择相应的应用程序来处理。

application/octet-stream 通常用于传输各种二进制文件,如未知格式的文件、压缩文件(如ZIP、RAR)、可执行文件、字体文件、以及其他无法明确定义为特定内容类型的文件。这样的文件可能包含任何类型的数据,因此服务器或发送者没有确切的方式来标识文件的内容类型。

需要注意的是,当服务器知道文件的具体内容类型时,最好还是使用相应的明确 MIME type ,而不是将其设置为 application/octet-stream。这样可以确保客户端能够正确地处理和展示文件内容,提供更好的用户体验。但在某些情况下,例如传输未知类型的二进制数据或允许用户下载任意文件时,这时使用 application/octet-stream 才是一种合理的选择。

相关资料

  • MIME 类型
  • 常见 MIME 类型列表
  • Content-Disposition

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/693084.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习基础】正则化

🚀个人主页:为梦而生~ 关注我一起学习吧! 💡专栏:机器学习 欢迎订阅!后面的内容会越来越有意思~ ⭐特别提醒:针对机器学习,特别开始专栏:机器学习python实战 欢迎订阅&am…

Dockerfile文件中只指定挂载点会发生什么?

当你在VOLUME指令中只指定容器内的路径(挂载点)而不指定宿主机的目录时,Docker会为该挂载点自动生成一个匿名卷。这个匿名卷存储在宿主机的某个位置,但这个具体位置是由Docker自动管理的,用户通常不需要关心这个存储位…

主流开发语言和开发环境介绍

主流开发语言和开发环境介绍文章目录 ⭐️ 主流开发语言:2024年2月编程语言排行榜(TIOBE前十)⭐️ 主流开发语言开发环境介绍1.Python2.C3.C4.Java5.C#6.JavaScript7.SQL8.GO9.Visual Basic10.PHP ⭐️ 主流开发语言:2024年2月编程…

C语言二级易忘易错易混知识点(自用)

1.数组名不能自加。 因为数组名实际上是一个指针,指向数组的第一个元素的地址。数组名在编译器中被视为常量,它的值是固定的,不能改变。 要访问数组的不同元素,应该使用数组名加上偏移量的方式来访问。 2.共用体只有最后一次赋值…

相机图像质量研究(30)常见问题总结:图像处理对成像的影响--重影

系列文章目录 相机图像质量研究(1)Camera成像流程介绍 相机图像质量研究(2)ISP专用平台调优介绍 相机图像质量研究(3)图像质量测试介绍 相机图像质量研究(4)常见问题总结:光学结构对成像的影响--焦距 相机图像质量研究(5)常见问题总结:光学结构对成…

【Unity】管道流动模拟Shader

【Unity】管道流动模拟Shader 抽象模拟管道介质流动的效果,使用顶点片元着色器。可以调整管线光泽,颜色,流动方向,透明度,流动体粗细,流动速度和横断面。 实现效果 Demo效果 Demo下载地址 管线光泽调整 …

LabVIEW声速测定实验数据处理

LabVIEW声速测定实验数据处理 介绍了一个基于LabVIEW的声速测定实验数据处理系统的应用。该系统利用LabVIEW的强大数据处理和分析能力,通过设计友好的用户界面和高效的算法,有效提高了声速测定实验的数据处理效率和准确性。通过这个案例,可以…

Gradle8之下载安装与环境变量配置及国内下资源设置

Gradle8之下载安装与环境变量配置及国内下资源设置 文章目录 Gradle8之下载安装与环境变量配置及国内下资源设置1. Gradle1. 官网2. 关于Gradle1. 构建任何内容2. 自动化一切3. 更快地交付 2. 下载与安装1. 下载2. 环境变量3.本地存储路径4. 查看Gradle版本 3. 配置国内下资源1…

Linux CentOS stream 9 安装docker

在计算机技术中,虑拟化是一种资源管理技术,是将计算机的各种实体资源(CPU、内存、磁盘空间、网络适配器等),予以抽象、转换后呈现出来并可供分区、组合为一个或多个电脑配置环境。 目前,大多数服务器的容量的利用率不足15%,这导致服务器数量激增以及增加了复杂性。服务…

计算机视觉基础【OpenCV轻松入门】:获取图像的ROI

OpenCV的基础是处理图像,而图像的基础是矩阵。 因此,如何使用好矩阵是非常关键的。 下面我们通过一个具体的实例来展示如何通过Python和OpenCV对矩阵进行操作,从而更好地实现对图像的处理。 ROI(Region of Interest)是…

centos 7.6安装 Apache HTTP Server 2.4.58

centos 7.6安装 Apache HTTP Server 1、下载Apache HTTP Server 2.4.582、安装Apache HTTP Server 2.4.583、配置Apache HTTP Server 2.4.58 1、下载Apache HTTP Server 2.4.58 Apache HTTP Server is the Number One HTTP Server On The Internet. The Apache HTTP Server Pr…

redis scan命令导致cpu飙升

一.背景 今天下午Redis的cpu占用突然异常升高,一度占用达到了90%,触发了钉钉告警,之后又回到正常水平,跟DBA沟通,他说主要是下面这个语句的问题 SCAN 0 MATCH fastUser:6136* COUNT 10000这个语句的执行时长很短&…

SpringBoot项目如何打包成docker镜像?

将Spring Boot项目打包成Docker镜像的过程可以分为以下几个步骤: 1. 创建Dockerfile 首先,你需要在Spring Boot项目的根目录下创建一个Dockerfile。这个文件包含了Docker镜像构建的所有指令。一个基本的Dockerfile可能看起来像这样: # 使用…

运维的利器--监控--zabbix--第二步:建设--汉化补丁

文章目录 一、环境及需求说明二、安装配置步骤1、安装语言包2、查看安装的中文语言包3、登录zabbix控制台设置语言为简体中文4、刷新系统页面 一、环境及需求说明 环境说明: 操作系统 centos 7.9 zabbix-server版本 5.0 一般情况下,zabbix-server和WE…

基于JavaWeb开发的小区车辆登记系统计算机毕设[附源码]

基于JavaWeb开发的小区车辆登记系统计算机毕设[附源码] 🍅 作者主页 央顺技术团队 🍅 欢迎点赞 👍 收藏 ⭐留言 📝 🍅 文末获取源码联系方式 📝 🍅 查看下方微信号获取联系方式 承接各种定制系统…

【洛谷题解】P8627 [蓝桥杯 2015 省 A] 饮料换购

题目链接&#xff1a;[蓝桥杯 2015 省 A] 饮料换购 - 洛谷 题目难度&#xff1a;普及- 涉及知识点&#xff1a;换购 题意&#xff1a; 分析&#xff1a;一直换购直至瓶盖数<3为只 AC代码&#xff1a; #include<bits/stdc.h> using namespace std; int main() {i…

【wu-lazy-cloud-network】Java自动化内网穿透架构整理

项目介绍 wu-lazy-cloud-network 是一款基于&#xff08;wu-framework-parent&#xff09;孵化出的项目&#xff0c;内部使用Lazy ORM操作数据库&#xff0c;主要功能是网络穿透&#xff0c;对于没有公网IP的服务进行公网IP映射 使用环境JDK17 Spring Boot 3.0.2 版本更新 1…

Kotlin基本语法 4 类

1.定义类 package classStudyclass Player {var name:String "jack"get() field.capitalize()set(value) {field value.trim()} }fun main() {val player Player()println(player.name)player.name " asdas "println(player.name)} 2.计算属性与防范…

2.20 day2 QT

自由发挥登录窗口的应用场景&#xff0c;实现一个登录窗口界面 #include "widget.h"Widget::Widget(QWidget *parent): QWidget(parent) {//窗口相关设置this->setWindowTitle("登入页面"); //设置 窗口 标题this->setWindowIcon(QIcon("D:…

深度学习图像处理基础

这里写目录标题 分辨率是什么 视网膜屏视网膜屏人眼的视觉视力 像素密度设置合适的PPI&#xff0c;制造视网膜屏 色彩是什么色匹配实验色彩匹配的意义量化色彩匹配白色合为1色度图 总结 HDR光亮度&#xff08;尼特&#xff09;灰阶亮度范围HDR显示技术总结 一级目录二级目录二级…