#author("2022-01-18T07:57:03+00:00","default:admin","admin") #author("2022-01-18T08:00:12+00:00","default:admin","admin") -[[オリジン間リソース共有 (CORS):https://developer.mozilla.org/ja/docs/Web/HTTP/CORS]] -[[CORS とは?:https://javascript.keicode.com/newjs/what-is-cors.php]] -[[CORSの仕様はなぜ複雑なのか:https://zenn.dev/qnighy/articles/6ff23c47018380]] -[[CORSプロトコル:https://wiki.suikawiki.org/n/CORS%E3%83%97%E3%83%AD%E3%83%88%E3%82%B3%E3%83%AB$16576]] -[[CORS & Same Origin Policy 入門:https://yamory.io/blog/about-cors/]] -[[【翻訳記事】CORSを理解する:https://career.levtech.jp/guide/knowhow/article/400/]] -[[なんとなく CORS がわかる...はもう終わりにする。:https://qiita.com/att55/items/2154a8aad8bf1409db2b]] -[[【CORS】クロスドメインによるエラーについて:https://qiita.com/tarch710/items/f4caa1eac918e1824293]] -[[Cross-Origin Resource Sharing(CORS)を使用したHTTPリクエスト:https://blog.kazu69.net/2017/03/23/http-request-using-cors/]] -[[ReactからLaravelのAPIサーバーを叩く + CORS概説:https://qiita.com/10mi8o/items/2221134f9001d8d107d6]] -[[CORS未対応APIに、PROXYを中継して通信を行う:https://zenn.dev/sohhakasaka/articles/41aa0fd95d3c0c]] -[[JSONPは危険なので禁止:https://blog.ohgaki.net/stop-using-jsonp]] -[[【JSONとJSONP】Ajaxで CORS policyにひっかかってデータ取得できない時【JavaScript】:https://tom2rd.sakura.ne.jp/wp/2020/12/27/post-11871/]] *基本情報 [#f1f315c4] **同一オリジンポリシーが適用されるケース [#f633bf32] -JavaScript での非同期通信(Ajax, いわゆる XMLHttpRequest や Fetch API を使った通信) -CSS での @font-face を使った Web フォントの読み込み -WebGL テクスチャの読み込み -canvas の drawImage() を用いた画像やビデオフレームの描画 -画像から CSS シェイプの生成 **同一オリジンポリシーが適用されないケース [#t54657cc] -<img> タグの src 属性で読み込んだ画像 -<link> タグの href 属性で読み込んだ CSS -<script> タグの src 属性で読み込んだ JavaScript -<form> タグの action 属性で設定した送信先 URL -<video>, <audio> タグの src 属性で読み込んだマルチメディアファイル -<iframe>, <frame> タグの src 属性での別サイトコンテンツの読み込み **リクエストの種類 [#r67328cf] -同一オリジンポリシーによって制限が発生するかは、通常「シンプルリクエスト」であるかどうかで決まる -シンプルリクエストでなかった場合、ブラウザのセキュリティチェックフローに則って、プレフライトリクエストを交えたリクエストフローが実施される ***シンプルリクエスト [#x50716db] 以下の条件すべてに合致するリクエスト。 -リクエストのメソッドが GET, POST, HEAD のいずれかに設定されている場合 -Content-Type ヘッダーが application / x-www-form-urlencoded , multipart / form-data , text / plain のいずれかに設定されている場合 -以下の一般的なヘッダのみで、特殊なヘッダが存在しない場合 --Accept --Accept-Language --Content-Language --DPR --Downlink --Save-Data --Viewport-Width --Width ***プリフライトリクエスト [#l36d1d1d] 以下の条件のいずれかに合致するリクエスト。 -リクエストのメソッドがGET, POST, HEAD でない場合 -Content-Type ヘッダーが application / x-www-form-urlencoded , multipart / form-data , text / plain のいずれでもない場合 -シンプルリクエストで許可されたリクエストヘッダ以外が付与されている場合 *解決策 [#ne4fee95] **Proxy経由 [#x5eae0da] ***[[cors-anywhere:https://github.com/Rob--W/cors-anywhere]] [#ndbba6b9] -[[CORS未対応APIに、PROXYを中継して通信を行う:https://zenn.dev/sohhakasaka/articles/41aa0fd95d3c0c]] -[[Missing required request header. Must specify one of: origin,x-requested-with:https://github.com/Rob--W/cors-anywhere/issues/39]] -[[403 Forbidden on CORS request from local:https://stackoverflow.com/questions/55121944/403-forbidden-on-cors-request-from-local]] -[[cors-anywhereが使えなくなって困った話:https://note.com/soma_ch/n/n5fdd8d0fbdfb]] **抜け道 [#c1561510] -[[Allow CORS: Access-Control-Allow-Origin:https://chrome.google.com/webstore/detail/allow-cors-access-control/lhobafahddgcelffkeicbaginigeejlf]] ... Chromeの拡張機能