<-
Apache HTTP 服务器 2.4 > EBCDIC港口

Apache EBCDIC端口

警告:本文档尚未更新,未考虑在Apache HTTP Server 2.0版中所做的更改。一些信息可能仍然有用,但请谨慎使用。
支持Apache!

也可以看看

最佳

Apache EBCDIC端口概述

Apache HTTP Server的1.3版是第一个版本,其中包括(非ASCII)大型机的端口,该主机使用EBCDIC字符集作为其本机代码集。

(这是运行BS2000 / OSD操作系统的SIEMENS大型机系列。如今,该大型机OS具有SVR4衍生的POSIX子系统)。

该端口最初是为了

本文档是描述本机端口的一些设计决策的依据。

最佳

设计目标

EBCDIC端口的一个目标是保持与(EBCDIC)CERN服务器的足够的向后兼容性,以使向新服务器的转换有吸引力且容易。这就需要添加一种可配置的方法来定义HTML文档是以ASCII(旧服务器接受的唯一格式)还是以EBCDIC(POSIX子系统中的本机文档格式)存储,因此是唯一的实际格式。其他POSIX工具,例如grepsed可以在文档上运行)。当前的解决方案是由Apache服务器拦截并解释的“伪MIME格式”(请参阅​​下文)。将来的版本可能会通过为所有必须转换的文档定义一个“ ebcdic-handler”来解决该问题。

最佳

技术方案

由于所有Apache输入和输出均基于BUFF数据类型及其方法,因此最简单的解决方案是将转换添加到BUFF处理例程中。必须随时可以设置转换,因此添加了BUFF标志,该标志定义BUFF对象当前是否已启用转换。该标志在HTTP协议中的几个地方被修改:

最佳

移植说明

  1. 来源中的相关更改#ifdef分为两类:

    #ifdef CHARSET_EBCDIC

    任何基于EBCDIC的机器所需的代码。这包括字符转换,两个字符集的连续性差异,标志,这些标志指示必须转换HTTP协议的哪个部分而不必转换哪个部分等。

    #ifdef _OSD_POSIX

    仅SIEMENS BS2000 / OSD大型机平台所需的代码。这涉及仅在BS2000 / OSD平台上才需要的文件差异和套接字实现主题。

  2. 故意没有选择在套接字级别(在BS2000 POSIX上,有一个支持该选项的套接字选项)在ASCII和EBCDIC之间进行转换的可能性,因为HTTP协议级别的字节流由协议相关的字符串和非-协议相关的原始文件数据。HTTP协议字符串始终以ASCII编码(GET请求,任何Header:行,分块信息),而文件传输部分( GIF图像,CGI输出等))通常应该仅由服务器“通过”。服务器协议中的“协议字符串”和“原始数据”之间的这种分隔通过诸如字符串的函数bgets() 或针对二进制数据的rvputs()函数 反映在服务器代码中bwrite()。因此,对所有内容进行全球翻译是不够的。

    (当然,对于文本文件,必须做出规定,以便始终以ASCII形式提供EBCDIC文档)

  3. 因此,此端口具有针对服务器内部字符串(编译器将其转换为EBCDIC字符串)以及所有服务器生成的文档的内置协议级别转换的功能。硬编码的ASCII逃逸 \012\015其在服务器代码无处不是一个例外:他们已经是ASCII的二进制编码\n\r,并且必须不被转换为ASCII的第二时间。此异常仅与服务器生成的字符串有关;和外部 EBCDIC文档不应包含ASCII换行符。

  4. 通过检查BUFF管理例程的调用层次结构,我添加了一个“ ebcdic / ascii转换层”,该层将在每个puts / write / get / gets上交叉使用,以及一个转换标志,该标志允许在启用/禁用转换的情况下进行转换。飞。通常,文档从其原始源(文件或CGI输出)到其目的地(发出请求的客户端)两次穿过该层:file -> ApacheApache -> client

    服务器现在可以读取EBCDIC格式的CGI脚本输出的标题行,然后发现脚本输出的其余部分为ASCII(例如WWW Counter程序的输出:文档主体包含GIF图片)。所有标头处理均以本机EBCDIC格式完成;然后,服务器根据提供的文档类型确定文档主体(当然,分块信息除外)是否已经是ASCII格式,或者是否必须从EBCDIC转换。

  5. 对于文本文档(MIME类型为text / plain,text / html ),可以使用隐式转换为ASCII,或者(如果用户更喜欢以原始ASCII格式存储某些文档,以便更快地提供服务,或者因为文件位于无需转换即可提供NFS挂载的目录树)。

    例:

    要将后缀.ahtml作为原始ASCII text/html文档而不进行隐式转换(后缀.ascii为ASCII text/plain)的文件,请使用以下指令:

    AddType text/x-ascii-html .ahtml
    AddType text/x-ascii-plain .ascii

    同样,text/foo通过text/x-ascii-foo使用为其配置MIME类型“ ” ,任何MIME类型都可以用作“原始ASCII” AddType

  6. 非文本文档始终以“二进制”形式提供,而不进行转换。对于,,这似乎是最明智的选择。例如,GIF / ZIP / AU文件类型。当然,这需要用户使用rcp -b二进制开关将它们复制到大型机主机。

  7. 服务器解析的文件始终假定为机器上使用的本机( EBCDIC)格式,并在处理后进行转换。

  8. 对于CGI输出,CGI脚本确定是否需要转换:通过设置适当的Content-Type,可以转换文本文件,或者可以通过未修改的方式传递GIF输出。后一种情况的一个示例是我们也移植的wwwcount程序。

最佳

文件存放注意事项

二进制文件

服务器将所有以a Content-Type:开头的文件text/均视为二进制文件,并且不进行任何转换。二进制文件的示例是GIF图像,gzip压缩文件等。

在大型机主机与Unix机器或Windows PC之间交换二进制文件时,请确保使用ftp“ binary”(TYPE I)命令,或使用rcp -b大型机主机上的 命令(-bunix不支持此 开关 rcp)。

文字文件

服务器的默认假设是文本文件(,所有Content-Type: 以开头的文件text/)存储在主机EBCDIC的本机字符集中。

服务器端随附的文档

SSI文档当前必须仅存储在EBCDIC中。没有规定在处理之前将其从ASCII转换。

最佳

Apache模块的状态

模组 状态 笔记
core +
mod_access +
mod_actions +
mod_alias +
mod_asis +
mod_auth +
mod_authn_anon +
mod_authn_dbm 与自己 libdb.a
mod_authz_dbm 与自己 libdb.a
mod_autoindex +
mod_cern_meta
mod_cgi +
mod_digest +
mod_dir +
mod_so -- 没有共享库
mod_env +
mod_example -- (仅限测试床)
mod_expires +
mod_headers +
mod_imagemap +
mod_include +
mod_info +
mod_log_agent +
mod_log_config +
mod_log_referer +
mod_mime +
mod_mime_magic 尚未移植
mod_negotiation +
mod_proxy +
mod_rewrite + 未经测试
mod_setenvif +
mod_speling +
mod_status +
mod_unique_id +
mod_userdir +
mod_usertrack 未经测试
最佳

第三方模块的状态

模组 状态 笔记
JK (Formerly mod_jserv) -- JAVA仍在移植。
mod_php3 + mod_php3 使用LDAP和GD以及FreeType库,运行良好。
mod_put 未经测试
mod_session -- 未经测试

可用语言: zh  |  KO 

最佳

注释

注意:
这不是“问答”部分。此处放置的评论应指向有关改进文档或服务器的建议,如果实施或被认为无效/偏离主题,我们的主持人可以将其删除。有关如何管理Apache HTTP Server的问题,应直接指向我们的IRC频道#httpd(位于Freenode上),或发送至我们的邮件列表
目前,此页面已禁用评论。