通过HTTP服务器处理文件


0

据我了解,当服务器(例如Apache)收到请求时,它会寻找文件扩展名来查找相关的mime类型。然后,它会寻找处理此地雷类型的处理程序(我基于将PHP支持添加到Apache进行说明)。这是我的问题:

  1. 以上说法正确吗?
  2. 如果是这样,那么当没有给定mime-type的处理程序时,这是否意味着默认行为-就是将文件发送给客户端?
  3. 如果甚至没有明确的扩展名-定义了mime-type关联(例如.html),默认操作还是只是将文件发送给客户端?
  4. 根据一些向Apache添加PHP支持的消息来源,我们必须使用 addType伪指令:AddType application/x-httpd-php .php而其他人则说使用addHandler伪指令:AddHandler application/x-httpd-php .php在我看来,这是唯一正确的方法addType,因为它仅应用于静态文档。那么为什么addType版本仍然正确?
  5. 我发现某处这样的行:

AddType文本/ html .php .phps
AddHandler应用程序/ x-httpd-php .php
AddHandler应用程序/ x-httpd-php-source .phps

这是否意味着如果服务器找不到application / x-httpd-php mime-type的处理程序,并且将仅使用text / html mime-将.php源文件发送到客户端,则将使用AddType指令。输入回应?


我们已撤消您的修改,请不要这样做。如果您得到的答案有误,请改进您的问题及其标题。
Arjan

请注意,该站点主要用于需要解决的具体问题。诸如“我试图在Apache上安装PHP,但无法正常工作!”之类的内容。我在这个问题上看到的只是“哲学上的”。它也完全特定于Apache。
丹尼尔·B

Answers:


3
  1. 是的,没有。总是有一个类型和一个处理程序。如果查看处理程序文档,它会指出:

    通常,文件具有基于文件类型的隐式处理程序。通常,所有文件仅由服务器提供服务,但是某些文件类型将单独“处理”。

因此,很可能您可以将处理程序与类型分开配置。就像我最初的回答一样,到目前为止,这似乎是PHP INSTALL文件所建议的。

  1. 如果您查看上面的链接,它将被称为默认处理程序,该处理程序可能仅发送文件,因为它是Web服务器的最常用用法。

  2. 我不明白你的意思。如果文件具有扩展名,但该扩展名没有关联的mime类型,则使用默认的mime类型。如果您查看这篇文章, 如何在Apache2中将所有无法识别的文件类型设置为二进制?根据有关核心模块的文档,默认的mime类型应为text / plain 。

  3. /原始答案:如果您正在寻找有关如何向Apache添加PHP支持的源代码,为什么不只参考PHP下载中随附的INSTALL文件呢?

根据它与PHP 5.6.25的Apache 2.x一起使用SetHandler

现在,看看您的示例:

AddType文本/ html .php .phps
AddHandler应用程序/ x-httpd-php .php
AddHandler应用程序/ x-httpd-php-source .phps

您是正确的,根据Apache文档,AddType它应该用于静态文件。另一方面,使用AddHandler可能会带来安全风险。至少从PHP的INSTALL文件不推荐这样做,它特别提到纯AddType可能导致执行的文件实际上不是真正的PHP文件。从安装文件指向Apache 2.x的第8点:

告诉Apache将某些扩展解析为PHP。例如,让Apache将.php文件解析为PHP。我们不仅要避免使用Apache AddType指令,还希望避免潜在危险的上载和创建的文件(例如exploit.php.jpg)作为PHP执行。使用此示例,您可以通过简单地添加扩展将其解析为PHP。我们将添加.php进行演示。
<FilesMatch \.php$> SetHandler application/x-httpd-php </FilesMatch>

如果你看一下文档大约AddHandler/ SetHandler可以清楚地看到的AddHandler和SetHandler将成为稍有不同的目的,是从安装文件中的建议,将“鼓励”您发送自己的头作为内部,核心处理器为PHP文件会改变。

  1. 不,这意味着发送到客户端的默认mime类型为text / html,因为php文件很可能生成html输出。

抱歉,如果我没用,您的回答是。它没有回答我的任何问题。此外,它给我带来了更多的问题和困惑;-(您能这么高兴并尝试清楚地回答我所有的问题吗?
Mulligan

您能这么好回答我的最新评论吗?
Mulligan '18

因此,@ Mulligan能否告诉我这是更好的方法还是告诉我您的问题是什么?
赛斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.