2018년 7월 29일

오늘 한 일:

내일 할 일:

회고

expressJS를 이용해서 아주 간단한 서버 어플리케이션을 만들어 봤다. 네트워크가 좀 더 잘 이해가 됐다.

nodeJS를 공부해보고 싶다.

express

라우터: 유뮤선을 통해 여러 컴퓨터의 네트워크를 하나라 묶어주는 역할. 네트워크 계층에 속함

routing

라우팅: 특정 uri나 메소드에 대한 클라이언트의 요청에 대해 앱이 어떻게 응답할지를 결정하는 것

app.METHOD(PATH, HANDLER)
app.get('/', function (req, res) {
  res.send('Hello World!')
}) // GET메소드를 이용한 응답처리

app.post('/', function (req, res) {
  res.send('Got a POST request')
}) // POST 메소드

serving static files

이미지나 css, js같은 static파일을 제공하는 방법

express.static(root, [options])

CORS

브라우저의 same origin policy때문에 다른 도메인의 리소스에 접근하는 것이 불가능

이걸 해결하는게 CORS

방법

request와 response에 적절한 헤더를 설정해서 리소스 접근권한을 제어하면 됨

일반적으로 OPTION메소드를 이용해 preflighted request라고 하는 사전준비를 위한 요청을 보내서 서버에게 승인을 받고 진짜 request를 보내는 방식. 진짜 request보낼때는 쿠키와같은 인증정보와 함께 보낸다

simple request

하지만 cors preflight가 필요없는 경우도 있는데 이를 simple request라고 함. request가 특정 조건을 만족할 경우 인증절차 없이 헤더만 설정하면 쉽게 cors를 구현할 수 있다.

simple request의 구현

response 헤더가 Access-Control-Allow-Origin: *인 경우 모든 도메인을 다 승인하기 때문에 Origin헤더는 없어도 상관없음

Q

  1. 이미지 태그를 이용해 cross-origin resourse를 요청하는 경우 cors 문제가 발생할까?

    A. 아니오. cross origin이 가능한 예외의 경우가 몇가지 있는데, <img>태그의 경우 예외에 속한다(참고)

  2. 어차피 모든 요청을 문자열로 받는데, content-type 헤더가 필요한 이유가 뭘까?

    A. 어플리케이션이 헤더를 보고 데이터를 어떻게 처리할 지 결정하기 때문. 전달받는 데이터를 모두 일일이 클라이언트가 다루는 것은 아니기 때문에 어플리케이션이 판단할 수 있는 헤더가 필요하다.