📄 rfc2936.txt
字号:
组织:中国互动出版网(http://www.china-pub.com/)
RFC文档中文翻译计划(http://www.china-pub.com/compters/emook/aboutemook.htm)
E-mail:ouyang@china-pub.com
译者:(runing human1976@263.net)
译文发布时间:2001-6-21
版权:本中文翻译文档版权归中国互动出版网所有。可以用于非商业用途自由转载,但必须
保留本文档的翻译及版权信息。
Network Working Group D. Eastlake
Request for Comments: 2936 Motorola
Category: Informational C. Smith
Royal Bank of Canada
D. Soroka
IBM
September 2000
HTTP 多用途网际邮件扩充协议(MIME)类型处理器检测
(HTTP MIME Type Handler Detection)
本备忘录的状态
本文提供Internetd的相关信息,它并不是专指某种Internet标准,本备忘
录的发布不受任何限制。
版权声明
Copyright (C) The Internet Society (2000). All Rights Reserved.
摘要
web页的组件在提供基于超文本传输协议(HTTP)的服务时,经常会遇到不知道安
装在浏览器上的多用途网际邮件扩充(MIME)类型的句柄的问题。比如,可用的句柄是
否是因特网公开贸易协议(IOTP) Internet Open Trading Protocol或者虚拟现实造型
语言(VRML)Virtual Reality Modeling Language或者安全电子传输(SET)Secure
Electronic Transaction或者其他的流煤体。有的时候需要显示依赖于MIME的有效性
的不同的web页或者内容。本文档概述的技术,用此技术可解决实际基于二十一世纪早
期的Internet的浏览器所存在的问题。在这段时期内,在基于未来技术的更优越的标
准广泛使用之前,此技术可以在实际中使用。
鸣谢:
Helpful comments by Tony Lewis of Visa have been incorporated.
目录
介绍 2
HTTP的'ACCEPT'头 2
JAVASCRIPT 3
ACTIVEX 和WINDOWS 注册表 3
ECML,电子商务建模语言 4
将他们融合在一起 4
未来的发展 5
安全性考虑: 5
IANA 考虑: 6
附录 A:浏览器版本嗅探代码: 7
作者地址: 11
版权说明: 12
致谢 13
介绍
组建web页的在提供基于超文本传输协议(HTTP)的服务时,经常会遇到不知道安装在浏览
器上的多用途网际邮件扩充(MIME)类型的句柄的问题。比如,可用的句柄是否是(IOTP)
或者(VRML)或者(SET)或者其他的流煤体。有的时候需要显示依赖于MIME的有效性的不
同的web页或者内容。发送一个未知的MIME类型的响应经常打断用户对浏览器的使用。浏
览器要知道该怎么对提供的数据进行处理,当然,也不会象对已经安装的正确MIME类型句
柄一样提供正确的服务。
本文档概述的技术,用此技术可解决实际基于二十一世纪早期的Internet的浏览器所存
在的问题。在这段时期内,在基于未来技术的更优越的标准广泛使用之前,此技术可以在实
际中使用。它描述的是判断是否application/iotp或者application/x-iotp存在并且同其
他的MIME类型一样可用。
HTTP的'Accept'头
可以用超文本传输协议的'Accept'请求头来解决该问题,该请求头列出了可以接受的
[MIME]类型,该请求头在1.0和1.1版本的HTTP里都支持,它的内容可以是MIME类型的列
表,和子类型。唯一存在的问题是很多浏览器只是发送诸如"*/*"此类的通配符。
如果你所要的MIME类型在Accept头中出现了,那就可以很安全的指定一个浏览器
或者安装时的句柄了。
注意: 虽然不是本文的主题的一部分,但是如果你在设计使用MIME类型句柄的软件,并
且访问浏览器界面,它允许你在Accept头里请求插入MIME类型句柄或者是你自己软件句柄,
那么你应该这么做(将MIME类型句柄或者自己的软件句柄写入到Accept头里)这样做可以
让服务器容易对此种MIME类型敏感并正确响应。
JavaScript
最近大多数的浏览器支持一种或更多的脚本语言,其中最流行的是"JavaScript" ,这
些在web页里的脚本语言允许对编程语言进行解释性的执行,编程语言可以探测浏览器的环
境,有条件的让不同的页面内容出现。例如,附录A一个在Netscape网址上的有效的
JavaScript,它能判断一个正显示的web页的系统,浏览器,版本。
注意:JacaScript是SUN Microsystems, Inc.的商标,最早叫LiveScript,它和Java语
言没有关系。
脚本在使用时应该加上超文本链接标示语言(HTML)注释符号,以便不支持脚本的浏览
器可以忽略该项。也就是说,脚本应该以"<!--"开头,以"-->"结束。下面给出一个对
JavaScript MIME 类型句柄进行探测后,条件执行web页的各部分的简单例子。
<SCRIPT LANGUAGE=JAVASCRIPT>
<!-- hide it
if (navigator.mimeTypes && navigator.mimeTypes.length > 0) {
if ( navigator.mimeTypes["application/iotp"] ||
navigator.mimeTypes["application/x-iotp"]) {
// here if IOTP handler exists
}
else {
// here if IOTP handler does not exist
}
}
// end and hide -->
</SCRIPT>
ActiveX 和Windows 注册表
如果在Microsoft Windows Internet Explorer第三版或者第四版上运行,则需要查询
注册表来决定当前支持的MIME类型。虽然浏览器支持JavaScript,但是在第三版中不支持
mimeType数组,在第四版中允许mimeType数组存在,但是几乎总是空的。例如,执行以下
代码可以测试对IOTP类型的支持。
CString iotpString, xiotpString;
char* Key, Keyx;
int rc, rcx;
iotpString =
"SOFTWARE\Classes\MIME\Database\Content Type\application/iotp";
xiotpString =
"SOFTWARE\Classes\MIME\Database\Content Type\application/x-iotp";
Key = iotpString.GetBuffer(1);
Keyx = xiotpString.GetBuffer(1);
rc = RegOpenKeyEx(HKEY_LOCAL_MACHINE, Key, 0, KEY_READ, hDefKey);
rcx = RegOpenKeyEx(HKEY_LOCAL_MACHINE, Keyx, 0, KEY_READ, hDefKey);
if ( ( rc == ERROR_SUCCESS ) || ( rcx == ERROR_SUCCESS ) )
{
// IOTP Handler exists
}
else
{
// No IOTP Handler
}
注意: ActiveX 是Microsoft的商标,最初被称为Sweeper.
ECML,电子商务建模语言
工业集团最近提出了一种应用在电子商务方面的标准。该领域允许“钱包”软件让消费
者将标准信息转送给贸易商,包括那些支付关系协议被客户端支持的信息。参阅[ECML]。
将他们融合在一起
下面的表格显示了怎样将这些技术融合在一起。
开始>-----+
|
+--------------------+
|在Accept头 | 否 +----------------------------+
|能找到类型吗? |------------->| JavaScript 是否可用 |
+--------------------+ |它显示了类型没有? |
| +----------------------------+
是 | | | |
|<----------------------------+ | 否|
| 是 | |
| +---<探测器<--+ |
| | |
| +----------------------+ |
| | ActiveX 可用吗? | |
| |它显示了类型吗? | |
| +----------------------+ |
| 是| | | 否 |
|<-----------+ | +-------------------->|
| V |
保存| 决定. 保存|
类型 |. 采取 该类型|
是| 默认的动作. 不|
支持的| 被支持|
X完成 X
未来的发展
在IETF(工程任务组),万维网联盟World Wide Web Consortium [W3C], 和其他的标
准化组织和工业集团正在积极进行相关内容和兼容性协商的工作。这项工作准备找到实现在
这里描述的功能的行之有效的方法。但是,要找到一种普遍的配置方法还需要花很长的时间。
因此在此给出的方法可能过时,也可能在很长的时间里还不会过时。
安全性考虑:
应该注意到上面所建议的ActiveX控件类会读用户的注册表,也就是说会检查计算机,并回
报发现的信息,这点可能有的用户会关心。
总的来说,使用JacaScript和尤其是ActiveX很危险,因为他们太强大了。Web页
的JavaScript和ActiveX能够对客户端造成不可见的危害。
Web交互的安全通常是由采取对浏览器到服务器连接的管道进行加密来实现的。比
如[TLS]。在HTTP外的附加的安全性缺乏的情况下,请求和/或回应可能被忘记或者被干扰。
IANA 考虑:
没有专门在此描述的技术,关于MIME类型和类型的注册流程请参阅[MIME: RFCs 2046,
2048].
参考文献:
[ECML] Eastlake, D. and T. Goldstein, "ECML v1: Field Names for E-
Commerce", RFC 2706, October 1999.
[HTTP] Berners-Lee, T., Fielding, R. and H. Frystyk, "Hypertext
Transfer Protocol -- HTTP/1.0", RFC 1945, May 1996.
[HTTP] Fielding, R., Gettys, J., Mogul, J., Frystyk, H., Masinter,
L., Leach, P. and T. Berners-Lee, "Hypertext Transfer Protocol
-- HTTP/1.1", RFC 2616, June 1999.
[IOTP] Burdett, D., "Internet Open Trading Protocol - IOTP Version
1.0", RFC 2801, April 2000.
[MIME] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
Extensions (MIME) Part One: Format of Internet Message
Bodies", RFC 2045, November 1996.
[MIME] Freed, N. and N. Borenstein, "Multipurpose Internet Mail
Extensions (MIME) Part Two: Media Types", RFC 2046, November
1996.
[MIME] Moore, K., "MIME (Multipurpose Internet Mail Extensions) Part
Three: Message Header Extensions for Non-ASCII Text", RFC
2047, November 1996.
[MIME] Freed, N., Klensin, J. and J. Postel, "Multipurpose Internet
Mail Extensions (MIME) Part Four: Registration Procedures",
RFC 2048, November 1996.
[SET] "Secure Electronic Transaction (SET) Specification, Version
1.0", May 31, 1997, available from <http://www.setco.org>.
Book 1: Business Description
Book 2: Programmer's Guide
Book 3: Formal Protocol Definition
[TLS] Dierks, T. and C. Allen, "The TLS Protocol Version 1.0", RFC
2246, January 1999.
[W3C] World Wide Web Consortium, <www.w3.org>
附录 A:浏览器版本嗅探代码:
<SCRIPT LANGUAGE="JavaScript">
<!-- hide JavaScript from non-JavaScript browsers
// Ultimate client-side JavaScript client sniff.
// (C) Netscape Communications 1999.
// Permission granted to reuse and distribute.
// Revised 17 May 99 to add is_nav5up and is_ie5up (see below).
// Everything you always wanted to know about your JavaScript client
// but were afraid to ask. Creates "is_" variables indicating:
// (1) browser vendor:
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -