说明 | Apache HTTP服务器核心提供的功能,始终有效 |
---|---|
状态 | 核心(C) |
AcceptFilter 指令
说明 | 根据协议类型对监听Socket进行优化 |
---|---|
语法 | AcceptFilter protocol accept_filter |
作用域 | server config |
状态 | 核心(C) |
模块 | core |
兼容性 | 仅在 Apache 2.1.5 以后的版本中可用 |
这个指令使得操作系统根据协议类型对监听socket进行特别的优化。其基本前提是内核在数据接受完毕或一个完整的HTTP请求缓冲完成前不向服务器进程发送socket 。目前仅支持FreeBSD的接收过滤器(Accept Filter)和Linux的更原始的(more primitive)TCP_DEFER_ACCEPT
。
FreeBSD上的默认值是:
AcceptFilter http httpready
AcceptFilter https dataready
httpready
接收过滤器(Accept Filter)在内核级别缓冲整个HTTP请求。一旦一个请求体被完整接收,内核将把它发送给服务器。参见accf_http(9)手册页以获得更详细的信息。因为HTTPS请求已经被加密了,所以只使用了accf_data(9)过滤器。
Linux上的默认值是:
AcceptFilter http data
AcceptFilter https data
Linux的TCP_DEFER_ACCEPT
并不支持对http请求进行缓冲。除none
之外的任何值都将在监听程序上启用TCP_DEFER_ACCEPT
。参见tcp(7)手册页以获得更多详情。
使用none
将会为那个协议禁用接收过滤器(accept filter)。这对于像nntp
这样需要服务器先发送数据的协议很有用处:
AcceptFilter nttp none
AcceptPathInfo 指令
说明 | 是否接受附带多余路径名信息的请求 |
---|---|
语法 | AcceptPathInfo On|Off|Default |
默认值 | AcceptPathInfo Default |
作用域 | server config, virtual host, directory, .htaccess |
覆盖项 | FileInfo |
状态 | 核心(C) |
模块 | core |
兼容性 | 仅在 Apache 2.0.30 及以后的版本中可用 |
此指令决定是否接受在实际文件名(或实际目录中一个不存在的文件)后跟随多余路径名信息的请求。这个多余的路径名信息可以当作PATH_INFO
环境变量传递给脚本。
比如说,假设/test/
所指向的目录下只包括一个文件:here.html
,那么对/test/here.html/more
和/test/nothere.html/more
的请求都会将PATH_INFO
环境变量设为"/more
"。
AcceptPathInfo
指令的取值范围:
-
仅当一个请求映射到一个真实存在的路径时,才会被接受。这样,如上述
/test/here.html/more
这样在真实文件名后跟随一个路径名的请求将会返回一个"404 NOT FOUND"错误。 -
只要前导路径可以映射到一个真实存在的文件,就可以接受该请求。这样,只要上述
/test/here.html
能够映射到一个有效的文件,那么对/test/here.html/more
的请求就会被接收。 -
是否接收附带多余路径名信息的请求由其对应的
处理器来决定。对应普通文本的核心处理器默认会拒绝
PATH_INFO
。而用于伺服脚本的处理器,比如 cgi-script和 isapi-isa,默认会接受PATH_INFO
。
Off
On
Default
AcceptPathInfo
指令存在的首要目的就是允许您覆盖处理器关于是否接受PATH_INFO
的默认设置。这种覆盖是很必要的。比如说,当您使用了类似INCLUDES这样的过滤器来根据PATH_INFO
产生内容时。核心处理器通常会拒绝这样的请求,而您就可以用下述的配置使这样的脚本成为可能:
<Files "mypaths.shtml">
Options +Includes
SetOutputFilter INCLUDES
AcceptPathInfo On
</Files>