HugoではGetRemoteという関数を使ってビルド時にインターネット上のリソースを取得することができます。
本サイトでもリンクカード(ブログカード)の生成時に利用していたりします。
Hugoでシンプルなリンクカード(ブログカード)を作った
rkd3.dev
そんなGetRemoteですが、使っていると謎のエラーが出て困ったためその対処を書いておきます。
発生した環境
- バージョン: v0.121.2 (extended)
- OS: macOS
発生したエラー
ビルド時に以下のようなエラーが出ました。
error calling resources.GetRemote: failed to resolve media type for remote resource "https://example.com/"
media type が resolve できなかったということです。どういうことだ…?
原因調査
調べてみると、公式のフォーラムで質問および回答がされていました。
getRemote: Handle cases when media type can't be determined from content - feature - HUGO
discourse.gohugo.io
GetRemote関数ではセキュリティ上の観点から、事前定義されたmedia typeのみを受け付ける設計になっているようです。恐らくXSS攻撃のような意図しないスクリプトの実行などを防ぐためではないかと思います。
解決策
許可するMediaTypeを追加することで解決が可能です。この機能はv0.112.0以降で利用可能です。
Security model | Hugo
gohugo.io
私はfaviconを取得したいと思っていたため、hugo.tomlに以下の記載を追加しました。
[security.http]
mediaTypes = ['image/vnd.microsoft.icon', 'image/x-icon']
これで無事GetRemoteを実行することができました。