Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | ||||
4 | 5 | 6 | 7 | 8 | 9 | 10 |
11 | 12 | 13 | 14 | 15 | 16 | 17 |
18 | 19 | 20 | 21 | 22 | 23 | 24 |
25 | 26 | 27 | 28 | 29 | 30 | 31 |
Tags
- 부트캠프
- 싱글톤패턴
- 멀티시그
- 업그레이더블 컨트랙트
- 팀 프로젝트
- 프록시패턴
- 트러블슈팅
- 디자인 패턴
- solidity
- 블록체인
- RBAC
- 솔리디티
- 토큰노믹스
- 배팅
- 회로차단
- git commit
- 스테이트머신패턴
- 투표
- 일시정지
- 인센티브 기반 커뮤니티
- 옵저버패턴
- 팩토리패턴
- git add
- 코드리뷰
- github 에러
- 재진입
- 코드스테이츠
- 웹툰
- github
Archives
- Today
- Total
보다 더 생생한 기록
CORS / OPTIONS / preflight 본문
CORS
교차 출처 리소스 공유(Cross-Origin Resource Sharing, CORS)는 추가 HTTP 헤더를 사용하여, 한 출처에서 실행 중인 웹 애플리케이션이 다른 출처의 선택한 자원에 접근할 수 있는 권한을 부여하도록 브라우저에 알려주는 체제입니다. 웹 애플리케이션은 리소스가 자신의 출처(도메인, 프로토콜, 포트)와 다를 때 교차 출처 HTTP 요청을 실행합니다. (출처 mdn)
→ 앱을 이용하는 사용자를 보호하기 위한 보안조치
OPTIONS 메소드
OPTIONS 메소드는 target 리소스와 혹은 서버와 통신하기 위한 통신 옵션을 확인할 때 사용된다.
즉, 해당 타겟 서버나 리소스가 어떤 method, header, content type 를 지원하는지 알 수 있다.
통신을 할때 OPTIONS 를 지정해주지 않는다면 네트워크 탭에서 pending 상태로 존재하는 것을 확인할 수 있다.
→ 다른 오리진에서 접근을 했을때는 preflight를 진행해주어야 하는데 이때 OPTIONS가 필요함.
→ 그 이후에 CORS 오류가 나는것을 확인할 수 있다.
const defaultCorsHeader = {
'Access-Control-Allow-Origin': '*', // 어떤 포트를 허용할 것인가 // EX) 127.0.0.1:5500
'Access-Control-Allow-Methods': 'GET, POST, PUT, DELETE, OPTIONS',
'Access-Control-Allow-Headers': 'Content-Type, Accept',
'Access-Control-Max-Age': 10
};
Preflight
서버쪽에 뭔가를 하기전에, 서버쪽으로부터 허락을 받기 위해 모의로 진행하는 내용 ("서버야 나 이거해도 되니.")
(좌측의 그림부터보자)
- OPTIONS 메소드를 사용하여 통신옵션을 확인한다. (상세한 코드가 들어있는 xml은 보내지 않는다)
- 두번째 화살표를 보면 서버쪽에서 http://foo.example라는 도메인이면 허락하고, POST, GET, OPTIONS라는 메소드를 사용하게 허락하겠다 라는 내용을 볼 수 있음
- 허락을 받은 뒤 세번째 화살표에서 진짜로 내용을 POST하는 것임.
- 네번째는 허락해준대로 해왔으니 OK사인
(우측의 그림으로 넘어오자)
- js를 이용하여 xhr을 브라우저로 보낸다.
- 브라우저 측에서 자동으로 서버에 Preflight Request를 보낸다 (Simple Request가 아닐때)
- 서버에서 도메인, 옵션등을 확인하고 허락해도될시, 사용가능한 method, header, content type를 알려준다.
- 이제 진짜로 브라우저에서 실질적인 내용을 보낸다.
- 일전에 알려준 기준에 부합할때 OK 사인을 보낸다.
- 그 뒤 브라우저는 onload 또는 onerror로 표시해준다.
'블록체인' 카테고리의 다른 글
[Solidity] UniSwap v2 - 이론 정리 (0) | 2022.12.25 |
---|---|
[Solidity] Lazy Minting 코드 분석 (0) | 2022.11.16 |
[코드리뷰] Project 2 - 인센티브 기반 커뮤니티 (1) | 2022.11.10 |
[코드리뷰] Project 1 - Opensea.io 클론코딩 (1) | 2022.10.27 |
웹 개발 (0) | 2022.08.31 |