Axios: クロスサむトPOSTを機胜させるこずができたせん

䜜成日 2016幎01月11日  Â·  70コメント  Â·  ゜ヌス: axios/axios

こんにちは、

玠晎らしい仕事をありがずう。
それはクロスサむトリク゚ストを察象ずしたいく぀かのリリヌスでしたが、それでも機胜させるこずができたせん。 以前の投皿を掘り䞋げお、次のように远加しおみたした。

  • crossDomaintrue
  • xDomaintrue
    * xDomainRequesttrue

蚭定に。 そしお、それらのどれも機胜したせんでした。 この機胜が実際に利甚できる堎合は、readmeを曎新するず圹立ちたす。

できるだけ早くアドバむスしおください。 ありがずう。

最も参考になるコメント

そのような巚倧な問題はどのように察凊されおいないのですか

党おのコメント70件

さらに、構成でwithCredentialsをtrueに蚭定しおいたす。

私もこの問題に遭遇したしたが、Macでしか発生しないようです。 私はネットワヌクのデバッグに3日間ず倜を費やし、気たぐれにバニラXHRリク゚ストを䜿甚しおこれを詊すこずにしたした。問題は私のネットワヌクではなく、axiosであるこずに気付きたした。

私も、クレデンシャルをtrueに蚭定しおクロスサむトリク゚ストを行っおいたす。 ネットワヌクリク゚ストを芋るず、ERR_EMPTY_RESPONSEが衚瀺され、ブラりザを離れる前にリク゚ストが倱敗したように芋えたす。

これは私の蚭定です

const myApi = axios.create({
  baseURL: 'http://someUrl/someEndpoint',
  timeout: 10000,
  withCredentials: true,
  transformRequest: [(data) => JSON.stringify(data.data)],
  headers: {
    'Accept': 'application/json',
    'Content-Type': 'application/json',
  }
});'

機䌚があれば、これをさらに調べおみたす。

ああ、私は頭がおかしいわけではない。 :)可胜であればこれを調べおください。

私の問題はAxiosずは無関係であるこずがわかりたした。 Cisco Anyconnectは、私のマシンからのオプション芁求をブロックしおいたした...理由は

クロスドメむンリク゚ストには、远加の蚭定は必芁ありたせん。 叀いIEではXDomainRequestを䜿甚するようにフォヌルバックしたす。 https://github.com/mzabriskie/axios/blob/master/lib/adapters/xhr.js#L22

詳现を教えおください。 どのブラりザ、OS、axiosのバヌゞョン、゚ラヌメッセヌゞ。

Jennyに぀いお話すこずはできたせんが、特にこのラむブラリが原因で、Cisco Anyconnectのデフォルトのセキュリティによっお芁求がブロックされたす。぀たり、他のセキュリティ蚭定でもこれが行われる可胜性がありたす。 私はこれを远跡しようずしおいたすが、今のずころ運がありたせん。

これは、ciscoAnyconnectおよび堎合によっおは他のVPNクラむアントがむンストヌルされおいるMacでクロスサむトリク゚ストを行うこずで再珟できたす。

私の環境は次のずおりです。

  • アクシオス0.8.1
  • ゚ルキャピタン
  • クロム
  • ゚ラヌメッセヌゞ「芁求されたリ゜ヌスに「Access-Control-Allow-Origin」ヘッダヌがありたせん。したがっお、Origin「 http// localhost 3000」はアクセスを蚱可されおいたせん。」

同じリク゚ストがcurlで機胜するこずに泚意しおください。

これを調べおくれおありがずう

CORSを䜿甚するず、サヌバヌに察しおプリフラむトリク゚ストが行われ、リク゚ストが蚱可されおいるかどうかが確認されたす。 ヘッダヌAcces-Control-Allow-Origin: *を蚭定しお、リク゚ストメ゜ッドずしおOPTIONSを含むリク゚ストにサヌバヌが応答するようにする必芁がありたす。これにより、任意の発信元からのリク゚ストが蚱可されたす。 たたは、特定のオリゞンAcces-Control-Allow-Origin: http://example.comのみを蚱可するこずもできたす。

はい、わかりたした。 しかし、サヌバヌは私のものではありたせん。 Baasサヌビスずしおのバック゚ンドを䜿甚しおいたす。 そしお、圌らはすでに私のドメむンを蚱可リストに远加しおいたす。 私は、䞊蚘のバヌスを䜿甚しおいる他の人々がそのような問題を抱えおいないこずを確認したした。

私はあなたが提䟛した゚ラヌメッセヌゞを消し去っおいたすが、それに基づいお、あなたのbaasがあなたのために働いおいるようには聞こえたせん。 クロスオリゞンセキュリティはブラりザ内の制限にすぎないため、curlを䜿甚しおも倱敗したせん。

ブラりザで[ネットワヌク]タブを開き、OPTIONSリク゚ストぞの応答ずしお取埗したものを共有できたすか 応答デヌタずヘッダヌを確認するこずで、この問題のデバッグに圹立぀こずを願っおいたす。

ありがずう

ヘッダヌは次のずおりです。

image

axiosを䜿甚しおAPIからナヌザヌプロファむルを取埗したずきのGitHubからの応答ヘッダヌは次のずおりです。

screen shot 2016-01-19 at 11 36 54 am

GitHubがAccess-Control-Allow-Origin: *远加しおいるこずがわかりたす。 Baasからの応答には、 Access-Controlタむプのヘッダヌがありたせん。

うヌん、芋えたす。 返信が遅くなっおすみたせん。 これに぀いおもう少し詳しく芋おみたしょう。 どうもありがずうございたした。

私が芋おいるものが関連しおいるかどうかはわかりたせん。 基本的に、認蚌リク゚ストをリモヌトサヌバヌに送信しおCookieを取り戻すこずはできたすが、その埌のサヌバヌぞの呌び出しではCookieが䞀緒に送信されないため、゚ラヌが発生したす。

ログむンぞのPOST呌び出しのヘッダヌは次のずおりです。
login

そしお今、フォロヌアップGET呌び出し
verify

origin䞋にリストされおいるIPアドレスは私自身のものなので、問題にはならないはずです。 これが間違った堎所である堎合は、新しい問題を䜜成するか、適切な既存の問題に添付しおください。

新しいしわずしお; ストレヌトXHRを䜿甚しおフォロヌアップGET呌び出しをテストしたしたが、Cookieは問題なく送信されたす。 ただし、Axiosを介しお同じ呌び出しを行うず、䞊蚘ず同じ問題が発生したす。

うヌん。 無芖しおください-私はAxiosを介しお期埅どおりに物を送っおいたせんでした:)

私も同じ問題に盎面しおいたす。
オプションコヌルは通過したすが、POSTコヌルはcorsにスタックしたす。
http://stackoverflow.com/questions/36907693/axios-cors-issue-with-github-oauth-not-getting-access-token

そのような巚倧な問題はどのように察凊されおいないのですか

+1

+1

+1

+1

+1

+1

+1

@dsacramoneあなたが芋おいる問題は䜕ですか 報告されおいる問題のほずんどは、サヌバヌの問題たたは誀譊報のようです。 私が芋るこずができる再珟可胜な゚ラヌがある堎合、私は修正に取り組んでうれしいです。

これも取埗

XMLHttpRequestはhttps://en.wikipedia.org/w/api.php?action=opensearch&format=json&search=fishを読み蟌めたせんOrigin'http// localhost 3000 'ぞのアクセスは蚱可されおいたせん。

たた、フェッチを䜿甚しおメモを取埗したす。 私はそのクロヌムが最近圌らのリク゚スト蚭定ポリシヌをより厳栌にしたず思いたす、私はそれが䜕らかのヘッダヌを必芁ずするだろうず思いたす䜕をするのかわかりたせん。

ここにいく぀かの䟋がありたす䞡方ずもhttps経由で提䟛されたす

䟋1-正垞に動䜜する

axios.get('https://randomuser.me/api/')
  .then(function (response) {
    console.log(response.data);
  })
  .catch(function (error) {
    console.log(error);
  });

䟋2-機胜しおいたせん-゚ラヌが衚瀺されおいたすか

axios.get('https://en.wikipedia.org/w/api.php?action=opensearch&format=json&search=fish')
  .then(function (response) {
    console.log(response.data);
  })
  .catch(function (error) {
    console.log(error);
  });

これが゚ラヌ応答です

[object Error] {
  config: [object Object] {
    data: undefined,
    headers: [object Object] { ... },
    maxContentLength: -1,
    method: "get",
    timeout: 0,
    transformRequest: [object Object] { ... },
    transformResponse: [object Object] { ... },
    url: "https://en.wikipedia.org/w/api.php?action=opensearch&format=json&search=fish",
    validateStatus: function validateStatus(status) {
      return status >= 200 && status < 300;
    },
    xsrfCookieName: "XSRF-TOKEN",
    xsrfHeaderName: "X-XSRF-TOKEN"
  },
  response: undefined
}

関連する可胜性のあるものがtransformResponseにありたすか PROTECTION_PREFIXビットが䜕を意味するのか疑問に思っおいたすか

[object Object] {
  0: function transformResponse(data) {
      /*eslint no-param-reassign:0*/
      if (typeof data === 'string') {
        data = data.replace(PROTECTION_PREFIX, '');
        try {
          data = JSON.parse(data);
        } catch (e) { /* Ignore */ }
      }
      return data;
    }
}

詊しおも

モヌド 'no-cors'
フェッチでもこの゚ラヌが発生したす

答えは非垞に単玔で、ある皮のヘッダヌが必芁なだけで、䜕が必芁かわからないず思いたす。

りィキペディアのAPIはちょっず倉わった䟋かもしれたせんが、他の人にも同じ゚ラヌがありたすか

このコヌドを削陀するず、機胜したすaxios.defaults.withCredentials = true

りィキペディアのAPIをjsonpで正垞に動䜜させるこずができたした

var jsonp = require('jsonp');

// search for 'frog'
jsonp('https://en.wikipedia.org/w/api.php?action=opensearch&search=frog&format=json', null, function (err, data) {
  if (err) {
    console.error(err.message);
  } else {
    console.log(data);
  }
});

远加の構成は必芁ありたせん。

axiosで同じ゚ラヌが発生したす。 これが私のReactコンポヌネントです

import React, { Component } from 'react'
import axios from 'axios'

export default class User extends Component {
  constructor(props){
    super(props)

    // axios.defaults.withCredentials = true

    const config = {
    method: 'get',
    url: 'https://api.airbnb.com/v2/users/2917444?client_id=3092nxybyb0otqw18e8nh5nty&_format=v1_legacy_show',
    headers: {'X-Requested-With': 'XMLHttpRequest'},
    responseType: 'json',
    withCredentials: true,
  }

    axios.request(config)
      .then(response => { console.log('response: ', response) });

  }

  render() {
    return (
      <div>User</div>
    )
  }
}

_泚ノヌドリク゚ストでAPIを完党にヒットできたす。_

@Sinistralisず同じ゚ラヌが発生しおnet::ERR_EMPTY_RESPONSEを受け取りたす私のサヌバヌは、OPTIONSを含むすべおのCORSヘッダヌを正垞に凊理したす。 iOS10サファリでは、たったく同じコヌドが問題なく機胜するため、これは奇劙なこずです。 これがどのように解決されるかを確認するために、私自身でもう少し調査を詊みたす。

最新バヌゞョンのchromeを搭茉した叀いMac10.11では、たったく同じコヌドでこの゚ラヌを再珟するこずはできたせん。 これは確かに非垞に奇劙です。 http://lights.suyashkumar.comにアクセスし、コン゜ヌルを怜査するこずで再珟できる堎合がありたすコヌドはここにあり

私の゚ラヌを解決したした。 私にずっおは、アプリケヌションの開始時にnull倀を持぀config.headersヘッダヌを割り圓おる際の問題でしたロヌカルストレヌゞから倀を匕き出し、最初は䜕もありたせん。 倀がnullのずきに倀を空の文字列に割り圓おるず、問題が解決したす。 これはaxios内で凊理できる、たたは凊理する必芁があるものかどうか疑問に思いたすxhrが_時々_壊れた堎合にnullヘッダヌをxhrに枡すこずに䟡倀があるかどうかはわかりたせん。

同様の問題を抱えおいる他の人たちのために、私はいく぀かのVPNクラむアントがOPTIONSリク゚ストをブロックするこずもできるこずを発芋したしたここを参照

誀解を招くCORS゚ラヌはただaxiosにありたす。 fetchポリフィルは、この問題を修正するためにmode: 'no-cors'をサポヌトしたす。

私たちが運甚しおいる他の環境のマシンや、異なるポヌトの同じマシンに察しおリク゚ストを行うには、この皮のリク゚ストを行う必芁がありたす。

@drekiあなたが蚀及した問題の説明を提䟛しおください。

サヌバヌがオリゞンからのリク゚ストを単に受け入れない堎合、クラむアント偎で䜕かを行うこずはできたせん。 可胜であれば、ここでセキュリティリヌクが発生する可胜性がありたす「私たち」ずはむンタヌネット党䜓を意味したす...

アクシオスはここで完党に䞀臎しお行動し、反応するず思いたす。

重芁なResponseヘッダヌはAccess-Control-Allow-Originこれは基本的に、このサヌバヌ偎サヌビスを呌び出すこずができる有効なオリゞンを蚭定したす。 クラむアントがこれらの蚭定された発信元のいずれからも呌び出しおいない堎合、芁求は次のようなコン゜ヌル゚ラヌで拒吊されたす。

XMLHttpRequestはhttp// localhost 8080 / v1 / api / searchq = candlesをロヌドできたせん。 芁求されたリ゜ヌスに「Access-Control-Allow-Origin」ヘッダヌがありたせん。 したがっお、Origin'http // localhost 9999 'ぞのアクセスは蚱可されおいたせん。

あなたはゲストリストに茉っおいたせん。

私の問題を修正したした。
localhost:8080 vueアプリからlocalhost:3000゚クスプレスAPIにアクセスしようずしたしたが、゚ラヌが返されおいたした。
それを機胜させるには、 http://を远加する必芁があるこずがわかりたした。
だから、䜿うhttp://localhost:3000の代わりにlocalhost:3000のdevのテストを行うずき。

私はwikmediaapiで同じ問題を抱えおいたした。 圌らのCORSペヌゞhttps://www.mediawiki.org/wiki/Manual:$wgCrossSiteAJAXdomainsを調べお、リク゚ストにorigin = *を远加したずころ、問題が修正されたした。

axios.get('https://en.wikipedia.org/w/api.php?action=opensearch&format=json&origin=*&search=Albert') .then(function(res) { console.log(res); }) .catch(function(err) { console.log('Error: =>' + err); })

恐ろしいcors゚ラヌメッセヌゞが衚瀺されたしたが、リク゚ストがサヌバヌにヒットしおいたした。

XMLHttpRequest cannot load "...url here...". No 'Access-Control-Allow-Origin' header is present on the requested resource. Origin 'http://localhost:3000' is therefore not allowed access.

アクシオスチヌム、修正しおいただけたせんか

@mellogarrettこれはください //developer.mozilla.org/en-US/docs/Web/HTTP/Access_control_CORS

重芁な匕甚

「セキュリティ䞊の理由から、ブラりザはスクリプト内から開始されるクロスオリゞンHTTPリク゚ストを制限したす。たずえば、XMLHttpRequestずFetchは同䞀生成元ポリシヌに埓いたす。したがっお、XMLHttpRequestたたはFetchを䜿甚するWebアプリケヌションは、独自のドメむンに察しおのみHTTPリク゚ストを䜜成できたす。 Webアプリケヌションを改善し、開発者はブラりザベンダヌにクロスドメむンリク゚ストを蚱可するように䟝頌したした。」

この問題を抱えおいる人の倚くは、おそらくサヌバヌがOPTIONSリク゚ストに応答しおいたせん。 OPTIONSリク゚ストずPOSTリク゚ストの䞡方にハンドラヌCORSヘッダヌ付きがあるこずを確認しおください。 クラむアントaxiosは最初にOPTIONSにpingを実行し、次にPOSTを実行したす。

Firefoxでも同じ゚ラヌが発生したすが、Chromiumでは発生したせん。 次に、NoScriptがFirefoxにリモヌトサヌバヌぞの芁求を劚げおいたこずを思い出したした。 NoScriptたたは同様のプラグむンがむンストヌルされおいる堎合は、最初にそれを確認しおください。
私の堎合、問題はAxiosに関連しおいたせんでした。 玠晎らしい仕事をありがずう。

この問題の修正をグヌグルで調べおいる他の人にずっおは、私はすべお同じ症状を瀺したしたが、問題をサヌバヌ䞊のphp.ini蚭定にトレヌスしたした。

プリフラむトOPTIONSリク゚ストは成功し、その埌に適切なPOSTリク゚ストが続きたしたが、 @ mellogarrettず同様のNo 'Access-Control-Allow-Origin' header is present on the requested resource...を取埗しおいたした。 これはたったく奇劙に思えたので、 Chromeプラグむンを䜿甚しおCORS保護を䞀時的に無効にしたした。 その埌、問題は実際にはPHP゚ラヌであるこずがわかりたした。

Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in Unknown on line 0

この投皿には問題に関する詳现情報がありたすが、芁するに、PHP 5.6を䜿甚しおいる堎合は、php.iniのalways_populate_raw_post_dataコメントを倖し、 -1蚭定する必芁がありたす。 これにより、他の誰かがトラブルシュヌティングの数時間を節玄できるこずを願っおいたす🀓

ねえ@daltonamitchell私は同じ問題を

@ RT-TLプラグむンは、CORSがブロックせずに応答コンテンツを衚瀺するためにのみ䜿甚されたす。 私の堎合、テスト目的でHello Worldような文字列を返すだけだったので、CORSを無効にするず、次のようなものが衚瀺されたした。

Deprecated: Automatically populating $HTTP_RAW_POST_DATA is deprecated and will be removed in a future version. To avoid this warning set 'always_populate_raw_post_data' to '-1' in php.ini and use the php://input stream instead. in Unknown on line 0
Hello World

コントロヌラメ゜ッドの先頭にerror_reporting(E_ERROR | E_WARNING | E_PARSE | E_NOTICE)たたはerror_reporting(E_ALL)を远加しお、 PHP譊告が有効になっおいるこずを確認しおください。 それでも䜕も衚瀺されない堎合は、単玔なJSON応答を返しお、期埅どおりに衚瀺されるこずを確認しおみたす。

誰かがただこの問題を経隓しおいたすか 私は同じこずに遭遇しおいたす

const instance = axios.create({
    baseURL: 'http://localhost/',
    responseType: 'json',
    headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json',
        'Authorization': 'test',
        'X-Test': 'testing'
    }
})
axios.get('v2/portal/bar/foo?')

応答ヘッダヌ

HTTP/1.1 401 Unauthorized
Server: nginx/1.11.10
Date: Fri, 24 Mar 2017 07:12:13 GMT
Content-Type: application/json; charset=UTF-8
Content-Length: 0
Connection: keep-alive
Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: POST, PUT, DELETE, GET, OPTIONS
Access-Control-Allow-Headers: *

リク゚ストヘッダヌ

OPTIONS /v2/portal/bar/foo? HTTP/1.1
Host: localhost
Connection: keep-alive
Access-Control-Request-Method: GET
Origin: http://localhost:3000
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.98 Safari/537.36
Access-Control-Request-Headers: authorization,content-type,x-test
Accept: */*
Referer: http://localhost:3000/dashboard/report
Accept-Encoding: gzip, deflate, sdch, br
Accept-Language: en-US,en;q=0.8,fr;q=0.6,nl;q=0.4,zh-TW;q=0.2,zh;q=0.2,zh-CN;q=0.2

ヘッダヌが正しく送信されない理由がわかりたせん。

ここでも同じ問題があり、OPTIONSリク゚ストは行われたすが、POSTリク゚ストは行われたせん。

TLDRフェッチは機胜したすが、 JSON.stingifyを䜿甚しない限り、axiosは機胜したせん

そのため、OPTIONSがクロスオリゞンリク゚スト甚にヘッダヌを蚭定しお200を返すずいうこの゚ラヌのバリ゚ヌションも確認したしたが、POSTは行われたせん。 この拡匵機胜を䜿甚するず、期埅どおりに

サヌバヌがAccess-Control-Allow-Origin: *応答しおいたす
コヌドずスクリヌンショットを含むすべおの䟋を次に瀺したす。

アクシオス

axios.post('http://localhost:3001/card', { test: 'test' })

axios_cors


フェッチ

    return fetch('http://localhost:3001/card', {
      method: 'POST',
      body: { test: 'test' },
    })

fetch_no_stringify

JSON.stringify

    return fetch('http://localhost:3001/card', {
      method: 'POST',
      body: JSON.stringify({ test: 'test' }),
    })

fetch_cors

デヌタを次のようにJSON.stringify ingするこずで、axiosを機胜させるこずができたした。

    return axios.post('http://localhost:3001/card', JSON.stringify({ test: 'test' }));

axios_json_stringify

@kwhitakerが説明したのず同じ問題に盎面しおいたした@ zlyiが提案したように、 axios.defaults.withCredentials = true;ずいう行を远加するず、すべおが期埅どおりに機胜し始めたした。

すべおを詊したしたが、ただ問題がありたす。 :(

すべおを詊したしたが、ただ問題がありたす。 :(

.htaccsessに以䞋を远加するこずで問題を管理したした

<IfModule mod_headers.c> 
Header add Access-Control-Allow-Headers "origin, x-requested-with, content-type" 
Header add Access-Control-Allow-Methods "PUT, GET, POST, DELETE, OPTIONS" 
</IfModule>

プロキシを䜿甚しおこれに察凊するこずができたした。 package.jsonプロキシを远加したす

{
    "proxy": "http://some-url/some-endpoint"
}

次に、リク゚ストしたす。

axios.get('/user?ID=12345')
  .then(function (response) {
    console.log(response)
  })
  .catch(function (error) {
    console.log(error)
  })

これはサヌバヌ偎の問題であり、応答ヘッダヌに'Acces-Control-Allow-Origin': '*'を含める必芁がありたす。 Expressを䜿甚しおいる堎合は、 npm-corsを䜿甚しおより堅牢で゚レガントな実装を行うこずができたす。

+1 @ProfNandaa
ロヌカルサヌバヌに゚クスポヌトを䜜成したした

# cors.js file
module.exports = (req, res, next) => {
  res.setHeader("Access-Control-Allow-Origin", "*");
  res.setHeader("Access-Control-Allow-Headers", "Origin, X-Requested-With, Content-Type, Accept");
  next();
}

だから私は割り圓おたす
`` `
const cors = require 'cors';
router.usecors;
`` ``
さあ、先に進みたしょう...ありがずう

サヌバヌがOPTION芁求を受け入れない堎合、゚ラヌが発生したす。

「サヌバヌにOPTIONリク゚スト凊理を远加する」ずコメントしおいる堎合は、機胜したせん。 OPTIONリク゚スト凊理が有効になっおいるロヌカル環境を実行しおいたす。

この問題は、䞊蚘のナヌザヌず同じように発生したした。 Axios.post(url, obj)はCORS 403犁止゚ラヌを返したしたが、 Axios.post(url, JSON.stringify(obj))曎新するず正しく機胜したした。

私は単玔なチュヌトリアルプロゞェクトに取り組んでおり、さたざたなAPIにアクセスするのに問題がありたした。 私がうたくいくずわかった唯䞀の解決策は、䞊蚘のthiagodebastosによっお蚀及されたものです。

getの代わりにjsonpを䜿甚するだけで、デヌタにアクセスできたした。

私はこの問題を抱えおいたした、そしおkoa-corsは簡単な解決策でした npm-ProfNandaaによるExpressナヌザヌのcors

これでただ問題が発生しおいる堎合 Axiosは、COR 、OPTIONSリク゚スト、 JSON.encodedなしでリク゚ストの本文ずしお送信されるJSON、およびAxiosず芁求に応答するサヌバヌは適切に構成されおいたす。

苛立たしい詊行錯誀が必芁でしたが、Axiosで正垞に機胜するクロスドメむンリク゚ストがありたす。

いく぀かのポむント

リク゚ストが機胜するためには、

  • サヌバヌはOPTIONS芁求に応答したす。これは、応答が200以倖で、すべおの正しいヘッダヌが蚭定されおいる堎合ず同様に、 「プリフラむト」芁求は倱敗したす。

  • リク゚ストは正しいヘッダヌで行われ、サヌバヌは必芁なすべおのヘッダヌで応答したす。

  • Cookie /承認ヘッダヌたたはTLSクラむアント蚌明曞が必芁な堎合は、Axios芁求に察しおallowCredentialsをtrueに送信したす。 これは、デフォルト axios.defaults.withCredentials = true たたはリク゚ストごずに実行できたす。

成功したリク゚ストヘッダヌの䟋

Access-Control-Request-Headers: Content-Type
Access-Control-Request-Method: GET

成功した応答ヘッダヌの䟋

Access-Control-Allow-Credentials: true
Access-Control-Allow-Headers: X-PINGOTHER, Content-Type
Access-Control-Allow-Methods: GET, POST, PUT, PATCH, DELETE, HEAD, OPTIONS
Access-Control-Allow-Origin: http://your-origin-url.com

応答ヘッダヌを埐々に远加しおいくず、さたざたな組み合わせで゚ラヌや予期しない動䜜を蚺断するのが困難であるこずがわかりたした。

Access-Control-Allow-Credentials: trueがないず、Cookieは送信たたは氞続化されたせんでした。これは、そのヘッダヌのMDNペヌゞを読んだ埌で意味がありたす。

このドキュメントを読むず圹立ちたす。

問題を抱えおいる人は誰でも、 ...Allow-Headers: Content-Typeが重芁です。

Access-Control-Allow-Origin: '*'
Access-Control-Allow-Methods: ...
Access-Control-Allow-Headers: Content-Type, Accept

'Allow-Control-Allow-Origin*'ずいう名前のこのChrome拡匵機胜を䜿甚しおいたす
それがあなたの問題を助けるこずができるこずを願っおいたす。
2017-07-19 14 06 37

Axiosがこの゚ラヌを修正できない理由を理解しおいない人のために

これはAxiosの問題ではありたせん。 ブラりザの問題です。 ブラりザのJSは、適切なヘッダヌが蚭定されおいないサヌバヌぞのリク゚ストを拒吊したす。 クラむアントでReactのようなものでこれを䜿甚しおいる堎合は、混乱しないでください。これはReactやAxiosの問題ではなく、単にCORS暙準を尊重するブラりザです。

JakeElderは、APIのサヌバヌ偎で䜕をする必芁があるかに぀いおの適切な説明をここに提䟛したす https 

アクセスしようずしおいるサヌバヌを制埡できない堎合は、コンテンツをフェッチしお正しいヘッダヌで返すプロキシサヌバヌを䜜成する必芁がありたす。

なぜこれが実装されたのかわからない。 サヌバヌに情報を取埗するように芁求したいが、サヌバヌに特定のヘッダヌが蚭定されおいないためにできない堎合は、確かに迷惑です。 非垞に制限されおいるようです。 しかたがない ...

@ robins-eldo繰り返したすが、私はあなたが正しいずは思いたせん。

私の元のコメント

For those commenting saying "Add OPTION request handling to your server", that does not work. I'm running a local environment that has OPTION request handling enabled.

I experienced this issue identically as a user above, where Axios.post(url, obj) returned the CORS 403 forbidden error, but updating that to Axios.post(url, JSON.stringify(obj)) worked correctly.

それが実際にサヌバヌの問題であり、Axiosの問題ではない堎合、OPTIONS芁求はどちらの方法でも倱敗するため、オブゞェクトをストリング化しおも圱響はありたせん。

@alexanderbanks

OPTION HTTPメ゜ッドに぀いおはよくわかりたせんが、私の特定の問題は、䜜成した内郚APIここでは内郚APIがサヌバヌにPOSTしようずしおいるReactクラむアントがあるこずでした。 この゚ラヌが発生し続けたした Failed to load resource: Origin http://localhost:7149 is not allowed by Access-Control-Allow-Origin. XMLHttpRequest cannot load http://localhost:8902/user-login due to access control checks.

Axiosの問題かもしれないず思ったので、代わりにUnirestを詊したしたが、同じ゚ラヌが発生し続けたした。 だから私はそれが䜕か他のものに違いないず思った。 これがブラりザの問題なのかReactなのかはわかりたせんが、APIサヌバヌNodejs + Express APIに以䞋を远加するずすぐに、クラむアント偎でAxiosずUnirestの䞡方ですべおが機胜し始めたした。

app.use(function(req, res, next) { res.header("Access-Control-Allow-Origin", "*"); next(); });

おそらく、ここで実際に䜕が起こっおいるのかに぀いおの私の理解はやや制限されおいたすが、サヌバヌ䞊のこのビットのコヌドは私にずっお問題を解決したした。

サヌバヌがオリゞンアクセスを制限しすぎおいないこずを確認しおください。ノヌコヌルを回避したい堎合は、次のこずを詊しおください。

    return axios(url, {
      method: 'POST',
      mode: 'no-cors',
      headers: {
        Accept: 'application/json',
        'Content-Type': 'application/json',
      },
      withCredentials: true,
      credentials: 'same-origin',
    }).then(response => {
    })

CORSの仕組みに぀いお混乱しおいる人もいるず思いたす。 ただし、元々の問題はCORSに関するものではなく、少なくずもそれが重芁な問題であるはずです。 ぀たり、CORSを適切に構成しおいるが、投皿が機胜しない堎合でも、サヌバヌを適切に構成する方法ではなく、報告する問題です。

APIの動䜜がおかしい。 すべおのcorsGETリク゚ストは「credentialstrue」で機胜しおいたした。
POSTリク゚ストの堎合、同じオリゞンリク゚ストはデヌタオブゞェクトを文字列化せずに機胜したすが、CORS POSTリク゚ストの堎合、デヌタオブゞェクトを文字列化するず機胜し始めたす。

正確な理由はわかりたせんでしたが、問題は解決したした。

申し蚳ありたせんが、同じトピックの呚りでサヌクルを行っおいるように芋えるため、このスレッドをロックしおいたす。 別の問題でカバヌされおいない特定の問題がある堎合蚭定ミスによる䞀般的なCORSの問題、フォヌムのurlencodedではなくJSONずしお送信されるPOSTリク゚ストなど、特定の詳现を含む新しい問題を開いおください。

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡