programing

오리진 'localhost:3000'에서 '...'의 XMLHttpRequest에 대한 액세스가 CORS 정책에 의해 차단되었습니다.

muds 2023. 3. 27. 21:42
반응형

오리진 'localhost:3000'에서 '...'의 XMLHttpRequest에 대한 액세스가 CORS 정책에 의해 차단되었습니다.

편집

, 이 는 금, 이, 는, 이, 는, 는, 는, 는, 는, 는, 는, 는, 는, 는, 는, 는, 는, 는, a, 는, 는, 는, 는, a, a, a, a, a, a, a, a, a,credentials: true 집에서는cors설정을 실시합니다.

완전히 우연한 기회에 깨달은 것은 만약 내가 이 모든 것을credentials: false 집에서는axios프런트엔드의 고객, 모든 것이 잘 작동했습니다. 「」, 「」로 합니다.true츠미야그리고 나서 이것저것 종합해서credentials: true모든 것이 예상대로 작동했습니다.

내 앱은 쿠키를 사용했기 때문에 이렇게 해야 했다.


이것은 중복일 수 있지만, 특히 제 문제와 관련된 스레드를 찾을 수 없었습니다.

아래 API 호출을 합니다.

const config = {
  headers: {
    "Access-Control-Allow-Origin": "*",
    "Access-Control-Allow-Methods": "GET,PUT,POST,DELETE,PATCH,OPTIONS"
  }
};

const {
  data: { ip }
} = await axios.get("https://api.ipify.org?format=json", config);

그러면 오류가 발생합니다.

Access to XMLHttpRequest at 'https://api.ipify.org/?format=json' from origin 'http://localhost:3000' has been blocked by CORS policy: Response to preflight request doesn't pass access control check: No 'Access-Control-Allow-Origin' header is present on the requested resource.

Heroku에 앱을 도입하면 API 호출이 정상적으로 동작합니다.단, 로컬 머신으로 개발할 때는 동작하지 않습니다.내가 뭘 놓쳤는지 모르겠어

rest api를 nodejs로 빌드하는 경우.다음과 같은 간단한 단계를 따르십시오.

Node.js 서버를 중지합니다.

npm install cors --save

server.js 또는 index.js에 다음 행을 추가합니다.

var cors = require('cors')

app.use(cors()) // Use this after the variable declaration

이제 클라이언트 측에서 API 호출을 시도하면 동작할 것입니다.

많은 날들 후에 마침내 나는 해결책을 얻었다.이렇게 간단하게 CORS를 사용하는 대신

const cors = require('cors');

app.use(cors());

CORS 옵션을 사용하면 문제가 해결되어 쿠키 또는 기타 자격 정보를 전달할 수 있습니다.

const cors = require('cors');
const corsOptions ={
    origin:'http://localhost:3000', 
    credentials:true,            //access-control-allow-credentials:true
    optionSuccessStatus:200
}
app.use(cors(corsOptions));

도메인에서 요청을 허용하는 CORS 정책이 없는 다른 호스트 이름을 가진 서버에서는 실제로 데이터를 가져올 수 없습니다.

한마디로 말하면localhost할 수 없다ipify.org허락하지 않는 한요그렇지 않은 것 같고, 그 서버는 당신이 관리하고 있지 않은 것 같습니다.따라서 유일한 옵션은 역방향 프록시를 사용하는 것입니다.노드를 사용하여 http 프록시를 작성하는 방법은 여기를 참조하십시오.

필요한 것은 로컬 호스트가 아닌 가짜/스텁된 호스트에서 앱을 제공하는 것입니다.

local.development.ipify.org -> の - - - 。localhost:3000

API 콜을 때 api api api api api api api api 。ipify.orgCORS ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★」

글은 나의 문제를 순식간에 해결했다.

가장 빠른 수정은 moesif CORS 확장을 설치하는 것입니다.설치가 완료되면 브라우저에서 클릭하여 확장을 활성화합니다.아이콘 레이블이 "Off"에서 "On"으로 변경되었는지 확인합니다.

우선 익스프레스 앱과 같은 백엔드 앱에서는 코르스를 활성화해야 합니다.

예를 들어 다음과 같습니다.

  1. 를 실행하여 합니다.npm i cors
  2. 그런 다음 server.filename, app.filename 또는 index.filename 파일로 이동하여 추가합니다.
  • var cors = require('cors');
  • app.use(cors())

3.120은 클라이언트 또는 프런트엔드 앱이 백엔드 경로에 액세스할 수 있도록 합니다.마지막으로 루트로 이동하여 내부에 다음 행을 붙여 넣습니다.

  • router.get("/", (req, res) => {
  • res.setHeader("Access-Control-Allow-Origin", "*")
  • res.setHeader("Access-Control-Allow-Credentials", "true");
  • res.setHeader("Access-Control-Max-Age", "1800");
  • res.setHeader("Access-Control-Allow-Headers", "content-type");
  • res.setHeader( "Access-Control-Allow-Methods", "PUT, POST, GET, DELETE, PATCH, OPTIONS" );
  • });

저도 이 문제로 2시간 동안 고생했고 이렇게 문제를 해결했습니다.이게 도움이 되길 바라

패키지로 이동합니다.json file and add: "your-api-url"은 시작/베이스뿐입니다. 예를 들어 포켓몬 api를 사용하는 경우 "filen" : "https://pokeapi.co/api/v2"을 설정하면 서비스 파일에서 필요한 경로를 가진 Axi를 사용할 수 있습니다.

axios.get("/pokemon?limit=1000")
  .then(response => {
    resolve(response.data.results);
  })

악시오스 CORS.이것은 단순히 동작방법이 아닙니다.서버는 독자적인 CORS 정책을 정의하기 때문에 사용자는 그 정책을 따라야 합니다.가 를 하지 않는 http://localhost:3000해당 CORS 정책에서는 API에서 해당 오리진을 사용할 수 없습니다.

서버가 사용자 소유의 서버인 경우 cors 패키지를 조사하여 다음과 같이 설정합니다.localhost:3000 않은 할 수 없습니다서버를 소유하고 있지 않은 경우 서버 소유자에게 문의하지 않고서는 CORS 정책을 변경할 수 없습니다.

이것은, 다음의 이유로 생각할 수 있습니다.POST .development개발 모드에서 CORS 정책을 우회하려면 , 「」파일에 다음의 코드 행을 추가합니다.

{
    ...
    "proxy": "http://localhost:3000",
    ...
}

의 시퀀스에 문제가 있을 수 있습니다.

app.use(corse())

루트를 정의하기 전에 사용해야 합니다.

Use below codes in your server.js or app.js or index.js file of your backend

import cors from "cors";
const corsOrigin ={
    origin:'http://localhost:3000', //or whatever port your frontend is using
    credentials:true,            
    optionSuccessStatus:200
}
app.use(cors(corsOrigin));

이 문제는 crome 브라우저에서만 발생했으며 crome 브라우저에서는 multilogin 확장 기능을 가지고 있었습니다.이 확장을 삭제하면 이 문제는 해결됩니다.

항상 재확인하여 프런트 엔드의 후행 슬래시 "/"가 누락되지 않았는지 확인합니다.

그래도 문제가 해결되지 않으면 먼저 CORS를 설치해 보는 것이 좋습니다.

pipenv install django-cors-headers

다음 설정 에 ''를 추가합니다.corsheaders되어 및 ★★★★★★★★★★★★★★★★★★★★★」corsheaders.middleware.CorsMiddleware미들웨어

것은 '''를 해 주세요.CORS_ORIGIN_ALLOW_ALL = True[ALLOWED_]호스트

이게 도움이 됐으면 좋겠다(첫 번째 질문에 대한 답변은 btw)

사용하셔야 합니다.res.setHeader회답으로

res.setHeader("Access-Control-Allow-Origin", "*")
res.setHeader("Access-Control-Allow-Credentials", "true");
res.setHeader("Access-Control-Max-Age", "1800");
res.setHeader("Access-Control-Allow-Headers", "content-type");

내가 관리하는 django api에 reactjs 앱에서 투고 요청을 보낼 때 이 문제가 발생하였습니다.django-cors-headers 설치, 설치된 앱에 코어 헤더 추가, 코어 헤더 미들웨어 추가, 마지막으로 리액트 호스트 도메인 'http://localhost:3000'을 django 설정 파일 내의 CORS_ORIGIN_WHITelist에 추가하여 해결했습니다.

그 후 리액트 앱은 django api에서 응답을 얻을 수 있었습니다.

Axios 대신 fetch를 사용하려고 합니다.

return fetch(
  url +
    "?" +
    new URLSearchParams({
      email: email,
    }),
  {
    method: "GET",
    headers: {
      Authorization: `Bearer ${token}`,
    },
    mode: "no-cors",
  }
);

Axios를 사용하는 경우 패키지 버전을 확인하십시오.

버전 1.1.x 사용 시 동일한 문제가 발생하였습니다. 1.2.x로 변경 후 문제가 해결되었습니다.

"notos" : "^1.2.3",

언급URL : https://stackoverflow.com/questions/57009371/access-to-xmlhttprequest-at-from-origin-localhost3000-has-been-blocked

반응형