백엔드 Back-end/네트워크 Network 8

Q. NGINX에서 CORS(Cross-Origin Resource Sharing)처리할 경우 설정 방법은?

A. 요청 메소드 OPTIONS에 대한 설정을 추가하면 된다. CORS 관련 확인을 위해서 사전요청preflight이 발생한다. 이 사전요청은 OPTIONS 요청 메소드로 이루어진다. 그래서 NGINX에서 OPTIONS 요청 메소드 처리를 추가하면 된다. server { ... location / { if ($request_method = 'OPTIONS') { add_header 'Access-Control-Allow-Origin' $http_origin; add_header 'Access-Control-Allow-Methods' 'GET, POST, PATCH, DELETE, OPTIONS'; add_header 'Access-Control-Allow-Credentials' 'true'; add_he..

Q. CORS(Cross-Origin Resource Sharing) 사전요청preflight을 하지 않는 경우는?

A. 브라우저는 다음 조건을 모두 충족하는 요청일 경우에는 CORS 사전요청을 하지 않는다. 1. 메소드Method가 GET, HEAD, POST 중 하나이면서 2. 헤더Headers에 유저 에이전트User Agent가 자동으로 설정한 헤더(User-Agent, Connection)만 있거나, Accept, Accpet-Language, Content-Language만 있거나 Content-Type은 application/x-www-form-urlencoded, multipart/form-data, text/plain 중 하나이거나 조합인 경우다. 더 자세한 설명은 아래 출처를 참고하자. 출처: MDN: Cross-Origin Resource Sharing (CORS) 예를 들어서 요청 메소드를 POST..

Q. CORS(Cross-Origin Resource Sharing)이란?

A. 보통 '교차 출처 리소스 공유'로 번역되며, 브라우저로 웹 애플리케이션에 접속했을 때 리소스(이미지, JSON 등)가 자신의 출처(Origin)와 다름에도 가져오는 경우를 뜻한다. 여기서 출처(Origin)는 도메인, 프로토콜, 포트를 뜻한다. 도메인, 프로토콜, 포트 중 하나라도 다르면 출처가 다른 것이다. 브라우저가 CORS 허용 여부를 확인하며, 확인된 경우 출처가 다른 곳에서 리소스를 가져와서 보여준다. 허용되지 않은 경우는 CORS 에러가 발생한다. 어디서 이슈가 발생할까? 브라우저에서만 발생한다. 브라우저가 CORS 허용 여부를 확인하기 때문이다. Android 앱이나 iOS 앱과는 관계 없다. 언제 이슈가 발생할까? 예를 들어 https://www.taptorestart.com 에 브라..

Q. 쿠키cookie에서 HttpOnly 속성의 기능은?

A. 자바스크립트로 document.cookie로 쿠키에 접근할 수 없게 된다. Set-Cookie: =; HttpOnly 위 예처럼 Cookie를 설정했다면 자바스크립트로는 접근이 안 된다. 실제 사례 아래 예(소스코드)를 보면 sessionid의 경우 HttpOnly인 상태인 것을 알 수 있다. document.cookie로 sessionid를 얻으려고 확인해보면 값이 없는 것을 확인할 수 있다. MDN 설명을 보자. A cookie with the HttpOnly attribute is inaccessible to the JavaScript Document.cookie API; it's only sent to the server. For example, cookies that persist in s..

Q. HTTP/0.9에서 사용한 HTTP 요청 메소드는?

A. GET이다. GET밖에 없었다. This request consists of the word "GET", a space, the document address , omitting the "http:, host and port parts when they are the coordinates just used to make the connection. (If a gateway is being used, then a full document address may be given specifying a different naming scheme). 출처: The Original HTTP as defined in 1991 요청과 응답 예가 아래와 같았다고 한다. 출처: HTTP/0.9 – 원-라인 프로토콜 ..

Q. HTTP GET 메소드로 Body에 데이터를 실어서 보내면 데이터가 갈까?

A. 간다. 패킷을 보면 전송되는 것을 확인할 수 있다! GET의 경우 Body에 데이터를 실어서 보내도 안 갈거라고 생각했는데 간다는 얘기를 듣고 직접 해보게 되었다. 같은 네트워크 상에 두 컴퓨터를 켜서 요청을 받는 컴퓨터에 WireShark를 설치했다. 192.168.1.23 컴퓨터에서 PostMan으로 메소드는 GET 요청 바디(Request Body)에 Content-Type: application/x-www-form-urlencded로 userId=1이란 값을 입력하고 전송 버튼을 눌렀다. 따라서 192.168.1.23 컴퓨터가 Source 출발지, 192.168.1.2가 Destination 도착지이다. 192.168.1.2에서 WireShark를 실행해서 패킷을 확인했다. userId=1을..

Q. JWT(JSON Web Token)란?

A. JSON 웹 토큰은 양 당사자 간에 전송되는 속성 정보(Claim)를 표현하는 단순하고, URL 안전한(URL로 이용할 수 있는 문자로만 구성된) 수단이다."JSON Web Token (JWT) is a compact, URL-safe means of representing claims to be transferred between two parties." (출처: IETF JSON Web Token (JWT)) 위 설명으로는 잘 이해가 되지 않는다. 실제 어떻게 구성되어 있는지 살펴보자.JWT 구성JWT 예 eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpZCI6InRhcHRvcmVzdGFydCIsInJvbGUiOiJhZG1pbiIsInN0YXJ0X2F0IjoxNjQ0MT..