Debian

Apache vs lighthttpd:mime 類型的不同行為

  • June 19, 2017

我已經為 Apple 設備編寫了一個應用程序,一個使用 python 的自動 VPN 配置 Web 門戶。

讓我感到困擾的是測試伺服器和生產伺服器之間的行為差異;前者正在使用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 中。我嗅了嗅電線,並沒有對通過lighthttpd.

我能否複製setenv.add-response-header與 Apache 類似的功能?

我已經嘗試添加到 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.py在 lighthttpd 伺服器中的輸出:

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.py在 Apache 伺服器中的輸出:

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->Develop->Show web Inspector->Debugger->clicking on main page->Copy as curl 粘貼時只返回“curl ’ https://xxxx/cgi-bin/vpn.py ’ -Xnull”。

我也嘗試禁用X-Frame-Options: "sameorigin"它並沒有任何區別(我知道這是一個很長的鏡頭)

似乎使用該.htaccess文件解決了將 Content-Disposition 添加到標題的問題。

然而,複製功能的問題以及調試和測試中增加的複雜性——似乎有另一種解釋。

.mobileconfig出於安全原因,似乎在最新測試版和目前版本的 Sierra 更新文件中都已從 Safari 的“安全”文件列表中刪除。

我昨天(或前天)在工作中更新了 MacOS,今天在家裡,我再也無法讓.mobileconfig生產或預生產系統上的文件自動打開。

我剛剛將我的 iPhone 更新到 iOS 10.3.3 beta,這似乎也證實了 Apple 將.mobileconfig配置文件視為潛在危險的趨勢。現在,當點擊此類文件時,您會看到一個新警告:

該網站正在嘗試打開“設置”以向您顯示配置文件。你想允許這個嗎?

忽略 - 允許

引用自:https://unix.stackexchange.com/questions/368466