LLM注意
Claude Opus 4.6のチャットさんとの雑談まとめです。
OGP的なやつを取得して埋め込むことの難しさ
かつて手打ちサイトをHTMLとCSSだけで頑張っていた時に、どうしても実現できなくて泣いたのが、「SNSみたいに、埋め込んだサイトのOGP的なやつを表示する」機能。
確か当時は、それを取得して一定の形式の不変なコードとして吐いてくれるサイトを見つけて何度かしたのだけれど、都度都度の取得ではなくてその瞬間のOGPを取得するだけだから、当時のOGP魚拓をサイトで表示しているということに……。
というのをクロードさんに伝えてみたら、
OGP取得、メモアプリやブックマーク系で「あったら最高」だけど実装すると地味に厄介な機能の代表格。
って返ってきました。
やっぱり地味に実装が面倒な機能なんだ……!
CORS(Cross-Origin Resource Sharing)の壁
現在勉強中のJavaScript、大変に便利で万能な言語らしいのですが、万能すぎて悪用されたときが恐ろしくヤバいとのこと。
ブラウザ内にあるクッキーやログイン情報を、別のサイトから無断でくすねて、閲覧者の意図しない形で勝手に利用して悪さをする、これがCSRF(クロスサイトリクエストフォージェリ)と呼ばれる攻撃の基本構造。
なので、サーバーではなくクライアント(ブラウザ)から接続しているとき、そのクライアントはJavaScriptの動きを見張っているのだそう。
具体的には、「お前、どこの所属? 勝手に他のお宅に情報盗みに行ってない?」ってやつを。
JavaScriptの所属
オリジン と呼ぶらしいJavaScriptの所属確認は、 プロトコル+ドメイン+ポートが完全一致 しているかどうか。
で、このオリジンの外(別ドメイン、別ポートなど)に影響を及ぼそうとすると、クライアントから「余計なこと禁止」とエラーを出されるのだそう。
1つのドメインの背後で複数のサーバーに分業していても大丈夫ではあるけれど、サブドメインは別ドメイン。
Fediverseで自鯖立ててたらよく分かるかもしれない、この感覚。
オブジェクトストレージと本体が物理的に別鯖で動いていても同じサービス、でもサブドメインでは別サービスやってる場合があるね!というやつですね。
別のオリジンだけど、指定したこのオリジンから来たJavaScriptには情報共有をしても良いよ!と許可を見せること、これがCORS(Cross-Origin Resource Sharing)の仕組み。
なお、 別ポートも別オリジン扱い なのがバグの原因になりやすいポイントなのだとか。
クロードさん曰く、
ローカル開発でフロントとバックエンドを別ポートで動かしてる時にCORSエラーが出るやつ、ほぼこれが原因です。
まだ実感湧かないけれど、よく見る可能性のあるバグとして記憶の片隅に放り込めたら良い、な……!
OGP取得関連のよくある流れ
たとえクライアントから動かすとCORSエラーになったとしても、サーバー同士だと比較的スムーズに情報のやり取りができることが多いため、サーバー(自前サーバーかOGP取得を代行してくれるAPIサービス)を間に仲介人として挟むのが、よくあるOGP取得のギミックだそうな。
これだから好奇心ってやつは!
というわけで、本来まだまだ先で学ぶ可能性のあった話について、メモが爆誕しました。
OGP取得って実はJavaScriptの中でもちょっと応用入る話だったのかもしれません。