質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

Q&A

解決済

1回答

4584閲覧

CORBが発生してjsonが読み込めない。

chiba_kun

総合スコア16

Firebase

Firebaseは、Googleが提供するBasSサービスの一つ。リアルタイム通知可能、並びにアクセス制御ができるオブジェクトデータベース機能を備えます。さらに認証機能、アプリケーションのログ解析機能などの利用も可能です。

HTTP

HTTP(Hypertext Transfer Protocol)とはweb上でHTML等のコンテンツを交換するために使われるアプリケーション層の通信プロトコルです。

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Express

ExpressはNode.jsのWebアプリケーションフレームワークです。 マルチページを構築するための機能セットおよびハイブリッドのWebアプリケーションを提供します。

Ajax

Ajaxとは、Webブラウザ内で搭載されているJavaScriptのHTTP通信機能を使って非同期通信を利用し、インターフェイスの構築などを行う技術の総称です。XMLドキュメントを指定したURLから読み込み、画面描画やユーザの操作などと並行してサーバと非同期に通信するWebアプリケーションを実現することができます。

0グッド

0クリップ

投稿2020/01/19 08:14

編集2020/01/19 09:50

問題

cloud function for firebase に保存してあるHTTPリクエストトリガーにGETリクエストを送るとCORBが発生します。

経緯と試してみたこと

今までサーバー周りのことは殆ど勉強したことがなく、非同期通信を行いたい場合cloud firestoreのonSnapshot() メソッドを使っていました。

掲示板的なウェブサービスしか作ったことがなく、リアルタイムでの値の取得はonSnapshot()メソッドを使えば事足りていたので。

なのでAjaxなどの非同期通信周りの技術については先日まであまり知らない状態でした。

しかし、サードパーティAPIを使おうと思った時、Ajaxは覚えなければいけない技術ですし、JSONPに対応していないAPIはクライアント側ではなく、サーバ側で処理を行わなくてはいけません。そんな訳で2日前からcloud function とAjaxについて勉強をしています。

※勉強を始めたばかりで用語の使い方が間違っていると思うので、文脈から大体の意図を汲み取っていただけると助かります。

まず今実現したいことは、cloud function にリクエストを送り、そのレスポンスとして返ってきた値をconsoleに表示するということです。

下記のコードはcloud function にデプロイした関数です。

node.js

1 2const functions = require('firebase-functions'); 3 4const admin = require('firebase-admin'); 5admin.initializeApp(); 6 7 exports.test = functions.https.onRequest((request, response) => { 8 response.json({"test":"testdayo"}); 9 }); 10

デプロイした後にプロンプトに表示される、ファクションURL(エンドポイント)にブラウザから直接アクセスすると下記の画像のような結果が表示されます。

イメージ説明

これは上手くいきます。次にAjaxでリクエストを送り、返ってきた値をconsoleに表示する処理を行おうとしました。
下記はAjaxの記述と、エラー文の内容です。

javascript

1 function jsonCallback(json) { 2 console.log(json); 3 } 4 5 $.ajax({ 6 url: 'https://略', 7 type:'GET', 8 dataType: "jsonp" 9 });
jquery.min.js:2 Cross-Origin Read Blocking (CORB) blocked cross-origin response https://略?callback=jQuery34106754768778417868_1579419939152&_=1579419939153 with MIME type application/json. See https://www.chromestatus.com/feature/5629709824032768 for more details.

CORSではなくCORBというエラーが発生します。エラー文に読めと記載されているURLを参照したり、CORBという単語を検索すると、クロスオリジンから受け取った値を読み込まないというブロックが働いてるみたいでした。

しかし、解決方法を調べてもそれらしい記事はあまり見つからず。記事が見つかっても英語で書かれており、内容も私には難しく、google翻訳で大体のニュアンスを掴んで解決みたいなことも出来ませんでした。

またcloud functionもAjaxも勉強を始めたばかりで、CORBが発生する理由がどちらにあるのかもよく分からない状態です。

勉強を進めていけば自己解決するかもしれませんが、ここで躓いていると前に進んでいる感覚がなく、モチベーションが湧きそうになかったので、質問することにしました。

(受け取った値を読み込まないということは、リクエストを送りレスポンスが返ってくるという処理自体は成功してるということなんですかね。。。?)

質問

問題の解決方を全て教えてもらうとなると、回答者の方の負担になりますし、私自信の勉強にもなりません。

なので端的なアドバイス、例えば、cloud functionにデプロイした関数に問題はなく、原因はAjaxの記述にある、詳しくはこのQiitaの記事を見ると良い、というような回答をいただけたら幸いです。

宜しくお願い致します。

※もしかしたらアドバイスだけでは解決に至らなかった場合、返信機能を用いて質問をするかもしれません;;

追記

exports.test = functions.https.onRequest((request, response) => { response.jsonp({ message: 'changed' }) });

responseオブジェクトのjsonpメソッドを使うことで、解決することが出来ました。
関数にjsonpメソッドがないのに、datatypeにjsonpを指定してリクエストを送ると、CORBが発生するみたいです。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

自己解決

esponseオブジェクトのjsonpメソッドを使うことで、解決することが出来ました。
関数にjsonpメソッドがないのに、datatypeにjsonpを指定してリクエストを送ると、CORBが発生するみたいです。

投稿2020/01/19 09:51

chiba_kun

総合スコア16

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問