Topics 프로젝트 에서 크로스 도 메 인 쿠키 가 발생 한 문제

3333 단어 corscookie
최근 에 책 갈피 수집 을 위 한 페이지 를 완 성 했 습 니 다. 화면 은 다음 과 같 습 니 다. 실제 구 조 는 3 개 부분 으로 나 뉘 었 고 Cookie 를 통 해 3 개 를 연결 시 켰 습 니 다.
  • API 서버
  • http://topics-api.tiye.mehttps://github.com/tiye/topics- server 서버 는 Express + Mongoose 를 사용 합 니 다. 데이터 베 이 스 를 잘 모 르 고 연습 으로 삼 아 기본 적 인 CURD 기능 을 실현 하고 쿠키 의 token 을 검증 합 니 다.
  • Chrome Extension

  • https://github.com/tiye/topics-crx 서버 POST 책 갈피, 웹 페이지 에서 로그 인 한 Cookie 사용
  • 홈 페이지 인터페이스
  • http://topics.tiye.me/https://github.com/tiye/topics.tiye.me Vue 를 통 해 이 루어 진 인터페이스 입 니 다. 책 갈 피 는 목록 이기 때문에 목록 관 리 를 합 니 다. 서버 처럼 도 메 인 연결 을 합 니 다.
    크로스 필드
    이러한 구조 에 문제 가 있 을 수 있 습 니 다. 주로 도 메 인 을 넘 어 쿠키 를 공유 하 는 문제 입 니 다.
  • 서버 에서 크로스 도 메 인 지원
  • 일반적으로 간단 한 크로스 도 메 인, Express 를 기반 으로 하면 cors 모듈 로 생 성 된 크로스 도 메 인 Headers 를 직접 사용 하면 됩 니 다.https://github.com/troygoode/node-cors
    express = require 'express'
    cors = require 'cors'
    app = express()
    
    app.use cors()
    

    그러나 여기 서 문제 가 발생 할 수 있 습 니 다. cors 예 에서 origin 은 길 을 정의 할 때 죽 었 습 니 다. 제 개인 적 인 책 갈 피 는 안전성 에 대한 요구 가 높 지 않 고 개발 이 편리 하지 않 아서 유연성 이 부족 합 니 다.
    또한, Access-Control-Allow-Credentialstrue 일 때 origin 은 * 여러 origin 과 쿠키 를 동시에 만족 시 키 기 위해 요청 헤드 를 스스로 처리 하 는 데 오래 걸 렸 습 니 다. 하지만 회사 에서 이 필요 한 코드 를 보 았 기 때문에 마지막 방안 은 이 렇 습 니 다.
    모든 요청 은 미들웨어 를 한 번 걸 어서 headers 의 도 메 인 이름 을 꺼 내 CORS 머리 에 씁 니 다.
    app = express()
    
    app.all '*', (req, res, next) ->
      if req.headers.origin?
        res.header("Access-Control-Allow-Origin", req.headers.origin)
        res.header("Access-Control-Allow-Credentials", true)
        res.header('Access-Control-Allow-Methods', 'PUT, GET, POST, DELETE, OPTIONS')
        #          ...
        res.header("Access-Control-Allow-Headers", "X-Requested-With, AUTHORIZATION")
      next()
    

    클 라 이언 트 가 시작 하 는 모든 도 메 인 요청 은 코드 가 자발적으로 쿠키 를 추가 하도록 설정 해 야 합 니 다.
    $.ajax
      url: "#{apiHost}#{url}"
      type: type
      data: data
      xhrFields:
        withCredentials: true
    
  • OPTIONS 쿠키 요청
  • 또 다른 문 제 는 OPTIONS 요청 은 브 라 우 저 에서 도 메 인 을 넘 어 요청 할 때 자동 으로 보 내 는 것 입 니 다. Chrome Canary 테스트 에서 쿠키 를 관찰 한 결과 정상 인 줄 알 았 습 니 다. 나중에 dev 버 전 (34) 에서 문제 가 발견 되 었 습 니 다. OPTIONS 요청 은 쿠키 를 가 져 오지 않 았 습 니 다. 제 데이터 요청 이 검증 되 어야 하기 때문에 OPTIONS 에 메 시 지 를 가지 고 있 지 않 으 면 잘못 가 져 왔 습 니 다.
    비교적 거 친 방법 을 찾 았 습 니 다. 모든 OPTIONS 는 데 이 터 를 직접 되 돌려 달라 고 요 청 했 습 니 다. 그러면 미들웨어 가 headers 에 적 힌 CORS 정 보 는 클 라 이언 트 로 돌아 갑 니 다.
    app.options '*', (req, res) ->
      res.json status: yes
    
  • 디 버 깅 과정 Cookie domain
  • 또 다른 문 제 는 Cookie domain 입 니 다. 문제 가 없 을 텐 데 로 컬 디 버 깅 을 통 해 로 컬 에서 hosts 모 의 온라인 환경 을 수정 한 후에 DNS 캐 시 로 추정 되 므 로 바로 자 를 수 없습니다. 어 쩔 수 없 이 로 컬 설정 topics-api.tiye.dev 을 모 의 했 기 때문에 Cookie domain 을 고려 해 야 합 니 다.
    코드 를 추가 하여 req.headers.origin 쿠키 를 생 성 하 는 domain 입 니 다.
  • Chrome 확장 전송 요청 에 쿠키
  • 이것 은 비교적 간단 합 니 다. manifest.jsonpermissions 설정 이 잘 되면 Chrome 확장 에서 일부 url 을 실행 하면 플러그 인 에 접근 할 수 있 고 안전성 을 고려 하지 않 습 니 다. 저 는 http://*/ 을 사 용 했 지만 효력 이 발생 하지 않 으 면 chrome.cookies.get 방법 도 쿠키 를 얻 을 수 있 습 니 다.
    이상 은 제 가 Topics 프로젝트 에서 만난 쿠키 에 관 한 질문 입 니 다.
    블 로그 홈 페이지 로 돌아 가기:http://blog.tiye.me

    좋은 웹페이지 즐겨찾기