Apache
Basic認証
Digest認証
Manifest
ウェブアプリ

マニフェストファイルは Basic / Digest 認証を通過できない

Basic 認証や Digest 認証で保護されたマニフェストファイルを取得できないとき

ウェブアプリ マニフェスト (Web App Manifest) についての公的な説明
* W3C Working Draft
* MDN web docs
* Google Developers

事象

Apache 2.4 に Digest 認証を設定し、ドキュメントルート以下、すべてのファイルを保護した。ドキュメントルート直下には site.webmanifest ファイルを置き、index.html から参照させている。

しかし、何度パスワードを正しく入れても、Apache 2.4 が AH01797: client denied by server configuration エラーをログに残す。ほかのファイルは問題なく読みこめている。

ウェブで検索しても、Deny from All が Apache 2.2 以前の古い書き方だとか、MIME Types に .webmanifest が登録されていないからだとか(ファイル名を manifest.json に変えても状況は変わらない)、そういう情報ばかりで解決につながるものがない。

さんざん検索して、ようやく辿りついたのがこのページだった。

SUUMOスマホサイトへのService Worker導入 ① - リクルート住まいカンパニー Tech Blog
WebAppManifestのBasic認証について
開発環境でBasic認証などをかけている場合、通常は認証のためのダイアログが表示されます。
しかし、WebAppManifest (manifest.json) に対しては、Basic認証がかかっていてもクライアントに入力ダイアログが表示されず、「ホーム画面に追加」のボタンが出ないことがあります。
これを回避するために、manifest.json にはBasic認証を掛けないといった対応が必要です。

Oh...

解決

httpd.conf に以下を追加。ファイル名のマッチングはもっと工夫して汎用化した方がいいかもしれないが、主に使われているのはこの2つくらいなようだ(W3C では拡張子を .webmanifest としている)。

httpd.conf
<Files ~ "^(manifest\.json|site\.webmanifest)$">
    Require all granted
</Files>