swift Kitura 사용 중 CORS 설정 삽질기

서버용 Swift 웹 프레임 워크인 Kitura를 사용중이다.
이중 CORS 를 설정해야 하는 상황인데

일단 Kitura-CORS 라는 미들웨어가 있다.
이를 문서에 있는 대로 설정했으나....
역시나 안된다.

다른 애들은 어떻게 되었다는 거지?

Package.swift 에 해당 패키지를 추가하였다.
.package(url: "https://github.com/IBM-Swift/Kitura-CORS.git", form: "2.1.1")

아래 target 에도 추가해야 한다.
.target(name: "app_name", dependencies: ["KituraCORS"])

이제 main.swift 에 임포트 부터 한다
import KituraCORS

let options = Options(allowedOrigin: .all, methods: ["GET", "POST"], allowedHeaders: ["Content-Type"], maxAge: 5)
let kors = CORS(options: options)

let router = Router()
router.all("/cors", middleware: cors)

컴파일을 하고 앱을 실행한 다음 웹서버를 테스트하면 오류가 난다.
Access-Control-Allow-Origin 어쩌고 저쩌고...블라블라

설정이 잘못 되었는지 각종 설정을 다 바꾸어 보아도 되지 않는다.
이놈들은 되지도 않는 모듈을 왜 올려 놓은거야...
아님 최신 파일과 맞지 않는건가?

그리하여 CORS 에 대한 문서를 다시 처음부터 읽기 시작하였다.
CORS란 Cross-Origin Resource Sharing 으로 클라이언트인 브라우저에서 막는다는 내용이며
응답 헤더에 Access-Control-Allow-Origin 에 들어 있는 URL과 비교하여 현재 요청하는 URL과 맞는다면 허용하는 방식이라는 것이다.

이러면 서버단에서는 response 헤더를 작성할 때 문자열만 추가해주면 되는 것이었다.
일단 강제로 추가해 보았다.
response.heasers["Access-Control-Allow-Origin"] = "접속하는 주소"
컴파일 해보니 오!!!! 된다.
이런 젠장 이렇게 쉬운 걸
괜한 미들웨어 프레임워크 설치하고 설정하느라 이틀을 잡아 먹었다.

그럼 요청하는 클라이언트의 URL 만 알아내면 서버단에서 처리가 가능하다.
let request_origin = request.headers["Origin"]
컴파일 해보니 요청하는 쪽도 알아 내었다.

이제 접속하는 주소들을 배열로 만들어서 요청하는 주소가 맞으면 헤더에 추가해주기만 하면 된다.

항상 기본에 충실하자.

댓글

이 블로그의 인기 게시물

한글 2010 에서 Ctrl + F10 누르면 특수문자 안뜰 때

아이폰에서 RFID 사용하는 방법

VCC 와 GND 는 무엇일까?