Apache 与 lighthttpd:mime 类型的不同行为

Apache 与 lighthttpd:mime 类型的不同行为

我用 python 编写了一个应用程序,一个适用于 Apple 设备的自动 VPN 配置门​​户网站。

让我烦恼的是测试服务器和生产服务器之间的行为差​​异;前者是使用Apache,后者是使用lighthttpd

lighhttpd文件.mobileconfig被打开并“执行”时,例如它会自动打开 SysPrefs,而在 Apache 中则不会发生这种情况。

我已经注意到lighhtpd关于正确的定义要宽松得多Content-Type,但当前的问题是 Safari 会正确加载和“自动执行”.mobileconfig文件,lighthttpdApache.

更让我烦恼的是,在两台服务器中我都正确定义了相应的内容mime.type,如下所示:

lighthttpd.conf

$HTTP["url"] =~ "\.mobileconfig$" {
    setenv.add-response-header = ( "Content-Disposition" => "attachment" )
    mimetype.assign = (".mobileconfig" => "application/x-apple-aspen-config",
                    "" => "application/octet-stream")
}

就像在 Apache 中一样:

dovpn.conf(虚拟主机)

AddType application/x-apple-aspen-config .mobileconfig

差异的第一个线索实际上似乎源于add-response-header中的指令lighthttpd

在生成的 HTML 中,我有:

a download="profile.mobileconfig" href="../upload/8bd16b26-1473-4994-9803-8268a372cd0d.mobileconfig" type="application/octet-stream">Download automatic profile/a

我通过 Javascript 自动下载该文件

//If in Safari - download via virtual link click
if (window.downloadFile.isSafari) {
    //Creating new link node.
    var link = document.createElement('a');
    link.href = sUrl;
    if (link.download !== undefined) {
        //Set HTML5 download attribute. This will prevent file from opening if supported.
        var fileName = sUrl.substring(sUrl.lastIndexOf('/') + 1, sUrl.length);
        link.download = fileName;
    }
    //Dispatching click event.
    if (document.createEvent) {
        var e = document.createEvent('MouseEvents');
        e.initEvent('click', true, true);
        link.dispatchEvent(e);
        return true;
    }
}

生成页面的内容也只有Content-Type:

Content-Type: text/html\n\n

在 Apache 和 lighthttpd 中都是如此。我通过网络嗅探,发现通过 .NET 对 Content-Type 没有明显的更改lighthttpd

我能用setenv.add-response-headerApache 复制类似的功能吗?

我已经尝试添加到 Apache 主机:

<Files "*.mobileconfig">
      Header set Content-Disposition attachment
</Files>

SetEnvIf Request_URI "\.mobileconfig$" change_header
Header set Content-Disposition attachment env=change_header

SetEnvIf Request_URI "\.mobileconfig$" change_header
Header always add "Content-Disposition" "attachment" env=change_header

<Files "*.mobileconfig">
    Header append Content-Disposition attachment
</Files>

我还尝试在实际目录中.htaccess使用以下命令创建文件:

<IfModule mod_headers.c>
    <FilesMatch "\.mobileconfig$">
        ForceType application/octet-stream
        Header append Content-Disposition "attachment"
        Allow from all
    </FilesMatch>
</IfModule>

<IfModule mod_headers.c>
    <FilesMatch "\.mobileconfig$">
        ForceType application/octet-stream
        Header add Content-Disposition "attachment"
        Allow from all
    </FilesMatch>
</IfModule>

除此之外,在这两种情况下attachment,我还使用了"attachment".

请注意,mod_headers 在 Apache/Debian 9 中默认处于活动状态,并且这些替代方案均无效。

实际上,我只记得lighthttpd是使用 HTTP 和ApacheHTTPS。我使用 HTTPS 对 lighthttpd 进行了测试,它也可以通过 HTTPS 运行,而 Apache 则不能。

curl -k -I https://localhost/cgi-bin/vpn.pylighthttpd 服务器的输出:

HTTP/1.1 200 OK
Content type: text/html
Content-Length: 331
Date: Thu, 01 Jun 2017 09:03:26 GMT
Server: lighttpd/1.4.45

curl -k -I https://localhost/cgi-bin/vpn.pyApache 服务器中的输出:

HTTP/1.1 200 OK
Date: Thu, 01 Jun 2017 09:05:25 GMT
Server: Apache
Vary: Accept-Encoding
X-Frame-Options: sameorigin
Content-Type: text/html; charset=UTF-8

此外,在 Apache 中也是如此:

$curl -k -I https://localhost/download/xxx.mobileconfig
HTTP/1.1 200 OK
Date: Thu, 01 Jun 2017 09:13:35 GMT
Server: Apache
Last-Modified: Thu, 01 Jun 2017 03:08:57 GMT
ETag: "1f3b-550dd5b89d8df"
Accept-Ranges: bytes
Content-Length: 7995
X-Frame-Options: sameorigin
Content-Disposition: attachment
Content-Type: application/x-apple-aspen-config

使用Safari->开发->显示Web检查器->调试器->单击主页->复制为curl仅返回“curl 'https://xxxx/cgi-bin/vpn.py粘贴时“-Xnull”。

我也尝试过禁用X-Frame-Options: "sameorigin",但没有什么区别(我知道这是一个不可能的事情)

答案1

看来使用该.htaccess文件解决了向标头添加 Content-Disposition 的问题。

然而,复制功能的问题以及调试和测试中增加的复杂性——似乎有另一种解释。

出于安全原因,最新的测试版和当前版本的 Sierra 更新文件似乎都.mobileconfig从 Safari 的“安全”文件打开列表中删除。

我昨天(或前天)在工作时更新了 MacOS,今天在家里更新了,我不再能够.mobileconfig自动打开生产或预生产系统上的文件。

.mobileconfig我刚刚将我的 iPhone 更新到了 iOS 10.3.3 beta,这似乎也证实了苹果将配置文件视为潜在危险的倾向。现在,当单击此类文件时,您会看到一个新警告:

该网站正在尝试打开“设置”以向您显示配置文件。您想允许这样做吗?
忽略 - 允许

相关内容