Heroku에 CORS Anywhere 설계 방법

13613 단어 Node.jsCORStech
웹에는 한 자원에서 다른 자원에 쉽게 접근할 수 없도록 하는 메커니즘이 있다.
다만, 웹 개발과 다양한 오리온자리 간 통신이 필요한 경우는 있다.이 경우 필요한 지식은 CORS입니다.
CORS는 오리온 간 자원 공유를 통해 서로 다른 오리온 간 통신을 가능하게 하는 구조다.
https://developer.mozilla.org/ja/docs/Web/HTTP/CORS
CORS의 오류 대응에는 몇 가지 방법이 있는데, 이 글에서 Heroku에게 CORS Anywhere의 프록시 서버를 사용하는 방법을 소개한다.
CORS Anywhere 가 에이전트에 CORS 헤더 Node 를 추가하도록 요청합니다.js 에이전트
CORS Anywhere를 시도하기 전에 공개 서버를 준비했으나 2021년 1월 31일 한정된 사용만 받았다.
https://github.com/Rob--W/cors-anywhere/issues/301
CORS Anywhere를 사용하여 프록시 서버를 구축할 때 사용하는 서비스, 애플리케이션, 언어 등은 다음과 같습니다.
  • https://www.npmjs.com/
  • https://yarnpkg.com/
  • https://github.co.jp/
  • https://git-scm.com/
  • https://nodejs.org/ja/
  • https://www.typescriptlang.org/
  • https://www.npmjs.com/package/cors-anywhere
  • https://www.npmjs.com/package/@types/node
  • https://www.npmjs.com/package/typescript
  • https://jp.heroku.com/home
  • 환경 준비


    최종 프로젝트의 문서 구성은 다음과 같다.
    project-name
    ├── package.json
    ├── Procfile
    ├── .gitignore
    ├── src
    │   └── server.ts
    ├── tsconfig.json
    └── yarn.lock
    
    yarn을 통해 포장의 초기화.아직 설치하지 않은 사람은 아래 링크를 참고하세요.
    https://classic.yarnpkg.com/en/docs/install#mac-stable
    yarn init
    
    빨리 CORS Anywhere를 설치하세요.CORS Anywhere는 유형 정의 파일@types을 제공하지 않아서 설치하지 않습니다.
    다음 노드.Type Script를 사용하여 js를 처리해 보십시오.
    yarn add cors-anywhere
    
    Node.js의 형식 정의 파일을 설치합니다.
    yarn add typescript -D
    
    프로젝트의 루트 디렉터리에 폴더src를 만들고 파일server.ts을 만듭니다.originWhitelist에는 요청이 가능한 올리브유를 기재할 수 있다.
    빈 배열이라면 모든 사냥꾼자리의 요구를 받아들일 수 있다.
    server.ts
    yarn add @types/node
    
    서버에 대한 설명은 다음과 같습니다.
    그런 다음 Type Script의 구축 및 노드가 표시됩니다.js 서버의 시작 명령을 기술합니다.
    package.json
    const host = process.env.HOST || '0.0.0.0';
    const port = process.env.PORT || 8080;
    
    import * as cors_proxy from 'cors-anywhere';
    cors_proxy.createServer({
        // 許可するオリジンを記載
        originWhitelist: ['https://example.com'],
        requireHeader: ['origin', 'x-requested-with'],
        removeHeaders: ['cookie', 'cookie2']
    }).listen(port, host, function() {
        console.log('OHTAM CORS Anywhere起動中 ' + host + ':' + port);
    });
    
    package.json 명령에서 Heroku 패키지 설치 처리가 끝난 후에 실행된 처리를 명확하게 기술할 수 있다.
    https://devcenter.heroku.com/ja/articles/nodejs-support heroku-postbuild 프로젝트의 루트 디렉터리에 파일을 만듭니다. 다음과 같습니다.tsconfig.json에서 컴파일에 필요한 옵션을 지정합니다.
    tsconfig.json
    {
      "name": "typescript-cors-anywhere",
      "version": "1.0.0",
      "main": "server.js",
      "license": "MIT",
      "scripts": {
        "build": "tsc",
        "watch": "tsc --watch",
        "start": "node server.js",
        "heroku-postbuild": "tsc"
      },
      "dependencies": {
        "@types/node": "^14.14.31",
        "cors-anywhere": "^0.4.3"
      },
      "devDependencies": {
        "typescript": "^4.1.5"
      }
    }
    
    https://www.typescriptlang.org/docs/handbook/tsconfig-json.html
    준비가 됐으면 구축 명령을 실행해 보세요!
    {
      "compilerOptions": {
        "module": "commonjs",
        "target": "es2020",
        "sourceMap": true,
        "types": [
          "node"
        ],
        "rootDir": "./src",
        "outDir": "./",
      },
      "exclude": [
        "node_modules"
      ]
    }
    
    루트 디렉터리에 tsconfig.json를 만들면 됩니다.
    다음 노드.js 서버를 시작해 보세요.
    yarn build
    

    Heroku를 위한 디자인.


    로컬 서버의 시작에 문제가 없음을 확인하면, 마지막으로 루트 디렉터리에 Procefile을 만듭니다.
    Procefile에서 응용 프로그램을 시작할 때 실행되는 명령을 명시적으로 선언합니다.여기에는 아래와 같이 서술한다.server.jshttps://devcenter.heroku.com/ja/articles/getting-started-with-nodejs#procfile
    이곳에서 일하는 것이 바로 이것들이다.로컬에서 준비한 프로젝트 파일은 GiitHub에 창고를 만들고 누르십시오.
    Heroku로 새 프로그램을 만들고 방금 만든 GiitHub의 창고와 연결합니다.
    GiitHub과 병합하여 소스 코드를 자동으로 생성할 수 있는 프로그램입니다.
    https://devcenter.heroku.com/ja/articles/github-integration
    https://qiita.com/sho7650/items/ebd87c5dc2c4c7abb8f0
    수동 디버깅을 실행하여 서버가 정상적으로 시작되었는지 확인하십시오.

    프론트 데스크의 요구 방법


    요청할 때 프록시 서버의 URL과 요청 주소의 URL을 연결하면 다음과 같습니다.web: node server.jsCORS Anywhere를 사용하여 안내 데스크에서 요청한 샘플을 다음과 같이 처리합니다.
    yarn start
    
    jQuery를 사용한 샘플 처리 등도 아래 공식 문서에 기재되었으니 참고하시기 바랍니다.
    https://github.com/Rob--W/cors-anywhere#readme

    총결산


    이번 CORS 오류는 프록시 서버를 사용해야 하며 가능하면 요청을 받은 서버에서 처리하는 것이 좋습니다.

    좋은 웹페이지 즐겨찾기