[解決済み] fetch() がヘッダを送信しない?
質問
ブラウザからこのようなPOSTリクエストを送信しています。
fetch(serverEndpoint, {
method: 'POST',
mode: 'no-cors', // this is to prevent browser from sending 'OPTIONS' method request first
redirect: 'follow',
headers: new Headers({
'Content-Type': 'text/plain',
'X-My-Custom-Header': 'value-v',
'Authorization': 'Bearer ' + token,
}),
body: companyName
})
リクエストがバックエンドに到達するまでに、このリクエストには
X-My-Custom-Header
また
Authorization
ヘッダを生成します。
私のバックエンドはGoogle Cloud function for Firebase(基本的にNode.jsのエンドポイントだけ)で、以下のような感じです。
exports.createCompany = functions.https.onRequest((req, res) => {
let headers = ['Headers: ']
for (let header in req.headers) {
headers.push(`${header} : ${req.headers[header]}`)
}
console.log(headers)
...
}
そのGoogle Cloud for Firebaseの関数のコンソールログには
X-My-Custom-Header
もなく
Authorization
ヘッダを生成します。
何が間違っているのでしょうか?
編集1
Chromeの開発ツールで確認したところ、どちらも
X-My-Custom-Header
でも
Authorization
ヘッダがブラウザから送信される... ここで疑問が生じます。なぜ、どのようにそれを修正するのですか?
編集 2
私のアプリについての詳細です。Reactアプリです。サービス ワーカーを無効にしています。私は
Request
を作成し、具体的にヘッダを追加するには
req.headers.append()
. それでもヘッダは送信されません。
どのように解決するのですか?
この セイムオリジンポリシー は、Web ページが他のオリジンからのリソースに送ることができるリクエストの種類を制限します。
では
no-cors
モード
の場合、ブラウザは「単純な」リクエストの送信に制限されます。
セーフリストに載ったメソッド
と
セーフリストに載ったヘッダ
のみです。
のようなヘッダを持つクロスオリジンリクエストを送信するには、次のようにします。
Authorization
と
X-My-Custom-Header
を削除する必要があります。
no-cors
モードを廃止し、プリフライトリクエストをサポートする (
OPTIONS
).
単純な」リクエストと「単純でない」リクエストの区別は、歴史的な理由によるものです。Web ページはさまざまな手段 (フォームを作成して送信するなど) で常にいくつかのクロスオリジンリクエストを実行できたので、Web ブラウザがクロスオリジンリクエストを送信する原則的な手段を導入したとき (
クロスオリジンリソース共有
や CORS) を導入したとき、そのような「単純な」リクエストはプリフライトの対象外であると決定されました。
OPTIONS
のチェックを免除することにしました。
関連
-
[解決済み] Access-Control-Allow-Originヘッダーはどのように機能するのですか?
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] なぜGoogleはJSONレスポンスにwhile(1);を前置するのでしょうか?
-
[解決済み] とは何ですか! (not not)演算子とは何ですか?
-
[解決済み] 私のJavaScriptコードは "No 'Access-Control-Allow-Origin' header is present on requested resource "というエラーを受け取りますが、Postmanはそうならないのはなぜですか?
-
[解決済み] カスタムHTTPヘッダー:命名規則
-
[解決済み] HTTPヘッダーの大文字と小文字は区別されますか?
-
[解決済み] フェッチする JSONデータをPOSTする
-
[解決済み] CORSです。資格情報フラグが true の場合、Access-Control-Allow-Origin でワイルドカードを使用できない。
-
[解決済み] Javascript / jQueryでAndroid端末を検出する。
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み】FirebaseのクラウドファンクションでCORSを有効にする
-
[解決済み] AngularJSのエラーです。Cross Origin リクエストはプロトコルスキーム http, data, chrome-extension, https に対してのみサポートされています。
-
[解決済み] ジェスト あるクラスの特定のメソッドをモックする方法
-
[解決済み] JavaScript で範囲を作成する - 奇妙な構文
-
[解決済み] 上級者向けJavaScript。この関数はなぜ括弧でくくられるのですか?重複
-
[解決済み] jqueryでdivの要素がオーバーフローしていないかチェックする
-
[解決済み] JavaScriptでの大文字小文字を区別しない正規表現
-
[解決済み] JavaScriptでjson-objectのキーを取得する [重複].
-
[解決済み] jQueryを使用して、すべてのクリックイベントハンドラを削除するにはどうすればよいですか?
-
[解決済み] JavaScriptデータフォーマット/プリティプリンタ