设置 SVN 文件的 MIME 类型

脚本的代码放在 Google Code 上, CSS 和 JS 均直接调用 SVN 主干文件. 改写脚本的时候发现 IE6 以外的浏览器不能正常执行, 比如: 页面直接显示成代码, JavaScript 不执行, 且获得浏览器警告信息如下.

Resource interpreted as Script but transferred with MIME type text/plain


经过排查, 发现是 SVN 的 MIME 设置问题. Firefox, Chrome, IE9 等现代浏览器会通过判断获取文件的 MIME 类型, 调用不同的客户端程序或使用不同的方式来执行. 如果文件的 MIME 缺失或者有误, 那浏览器会按默认方式处理. 而老版本的 IE 浏览器会识别文件类型并更具识别到的类型来处理, 所以一般不存在执行问题.

为了 SVN 服务器上的文件也被正确执行, 需要修改 svn:mime-type.

手动设置

TortoiseSVN 和 Eclipse 等一类客户端可以对文件的属性进行设定. 以下是 TortoiseSVN 中的修改方式.

在 TortoiseSVN 上修改 SVN 文件的 MIME 类型

  1. 右击展开文件菜单, 选择 TortoiseSVN > Propertise.
  2. 添加或者修改 Mime-Type.
  3. 保存并提交 SVN.

在 Eclipse 中修改方法差不多, 文件的 SVN 属性的目录位置在 Team > Set Property.

自动匹配

SVN 有配置文件, 可以在里面进行配置.

  1. 打开 SVN 配置文件.
    • Linux: /etc/subversion/config
    • Windows: %APPDATA%\Subversion\config
  2. 设置 enable-auto-props = yes.
  3. 找到 auto-props 区域, 并添加文件的 mime-type.
    *.js = svn:mime-type=text/javascript
    *.css = svn:mime-type=text/css
    *.html = svn:mime-type=text/html
    

修改保存后, 新建对应后缀的文件, 提交时自动会带上设置的 mime-type.

后话

长久以来, SVN 对我来说只是一个代码管理工具, 会通过 Apache 或者 Nginx 等 Web 服务器来获取文件, 所以头一次遇到觉得诡异. 刚发现问题的时候没有去抓包, 还以为是 Google Code 的问题, 真是错怪它了. 事实上, Web 服务器提供一个 MIME 模块, 用来识别文件的 MIME, SVN 也一样. 只是 Apache 等默认打开了 MIME 自动匹配, 而 Subversion 没有.

 

原文转载自:http://www.neoease.com/setting-mime-type-on-svn-client/

猜你喜欢

转载自fableking.iteye.com/blog/1855380