1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Office ScriptsからのリクエストがCORSエラーになる話

Posted at

似たようなQiita記事はあるのですが、ちょっと調べ物をしたので覚え書き。

TL;DR

Microsoft Office Scriptsからサーバーにfetchを送るときにCORSエラーが出るようになった。Access-Control-Allow-Origin*を設定すれば一応解消される。もうちょっといい方法ないかなあ。

事の発端

1、2年ほど前に、OneDriveに置いてあるExcelからバックエンドのサーバーにデータを送るOffice Scriptsを作って設置しました。設置した当初もCORSの設定は必要だったので、https://*.officescripts.microsoftusercontent.comのドメインに対してAccess-Control-Allow-Originを設定していました。参考:stackoverflow

このスクリプトは数ヶ月に一回程度しか使われていないのですが、今朝になって走らせたら以下のエラーが。

Access to fetch at [...] from origin 'null' has been blocked by CORS policy: No 'Access-Control-Allow-Origin' header is present on the requested resource.

2025-05-13頃にはこの件がすでに観測されている。

原因

どうやらOffice Scriptsから送られるHeaderが前述のofficescripts.microsoftusercontent.comからnullに変更されたそう。

じゃあAccess-Control-Allow-Originnullを設定したらよいかというとそうでもなく、MDNによるとAccess-Control-Allow-Originnullを設定するのは避けるよう記載されている。

null Originとは一体...?

見慣れないOriginなので、一応何者かを確認。

上記のMDNによると、data:file:などのリソースやサンドボックス化されたドキュメントから来るリクエストはブラウザがOriginをnullとシリアライズそう。

こちらのStackoverflowでsideshowbarker氏の回答を見ると、リソースがHTMLスタンダードで言うところの"opaque origin"(不透明なオリジン)に当たる場合はoriginがnullとしてシリアライズされる。

じゃあopaque originって何よ

上記のsideshowbarker氏の回答には、以下のケースがopaque originとして判断される:

このリストを眺めるに、なんかイレギュラーっぽいやつとか、cross-originのリソースとか、そういうケースがopaque originになるようす。

トラブルシュート

Access-Control-Allow-Origin*に設定すれば、問題自体はサクッと解決できる。

Office Scriptの公式ドキュメンテーションにも、Access-Control-Allow-Origin*に設定するように、とあるので一応これが公式の解決方法ということになる。

私の場合はこのOffice Scriptを走らせている処理は個人用のものなので、ワイルドカードに設定しておくのもなぁという気持ち。

ひとりごと

Microsoftに振り回されている。
公式ドキュメンテーションに『originはいきなり変わるかもしれないけどよろしく』的なことが書いてあるので、また同じようなエラーが出るかもしれない。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?