Cross Origin Resource Sharing
웹 서버에거 보안 cross-domain 데이터 전송을 활성화하는 cross-domain 접근 제어권을 부여한다.
과정 :
CORS 요청 시에는 미리 OPTIONS 주소로 서버가 CORS를 허용하는지 물어본다. 이때 Access-Control-Request-Method로 실제로 보내고자 하는 메서드를 알리고,Access-Control-Request-Header로 실제로 보내고자 하는 헤더들을 알린다. Allow 항목들은 Request에 대응되는 것으로, 서버가 허용하는 메서드와 헤더를 응답하는데 사용된다. Request랑 Allow가 일치하면 CORS 요청이 이루어진다.
요처하는 데이터가 HTTP Request Message의 Header 부분에 url이 담겨서 전송된다. 때문에 url 상에 ? 뒤에 데이터가 붙어 request를 보내게 되는 것이다. 이러한 방식은 url 이라는 공간에 담겨가기 때문에 전송할 수 있는 데이터의 크기가 제한적이다. 또 보안이 필요한 데이터에 대해서는 데이터가 그대로 url에 노출되므로 GET방식은 적절하지 않다.(ex. password)
요청하는 데이터가 HTTP Request Message의 Body 부분에 데이터가 담겨서 전송된다. 때문에 바이너리 데이터를 요청하는 경우 POST 방식으로 보내야 하는 것 처럼 데이터 크기가 GET 방식보다 크고 보안면에서 낫다.
둘다 HTTP 프로토콜을 이용해서 서버에서 요청한 데이터를 전달할 때 사용하는 방식이다.
우선 GET은 가져오는 것이다. 서버에서 어떤 데이터를 가져와서 보여준다거나 하는 용도이지 서버의 값이나 상태 등을 변경하지 않는다. 즉, SELECT 적인 성향을 가지고 있다고 볼 수 있다.
반면에 POST 는 서버의 값이나 상태를 변경하기 위해서 또는 추가하기 위해서 사용된다.
또한 GET 방식의 요청은 브라우저에서 Caching 할 수 있다. 때문에 POST 방식으로 요청해야 할 것을 보내는 데이터의 크기가 작고 보안적인 문제가 없다는 이유로 GET 방식으로 요청한다면 기존에 caching 되었던 데이터가 응답될 가능성이 존재한다. 때문에 목적에 맞는 기술을 사용해야 하는 것이다.
쿠키와 세션을 사용하는 이유
HTTP 통신방식은 기본적으로 Stateless, Connectionless 프로토콜이다.
즉, 서버와 클라이언트가 통신을 할 때 통신이 연속적으로 이어지지 않고 한 번 통신이 되면 끊어진다. 따라서 서버는 클라이언트가 누구인지 계속 인증을 해줘야 한다. 이것은 웹페이지의 로딩을 느리게 만드는 요인이 되기도한다. 따라서 이러한 번거로움을 해결하는 방법이 바로 쿠키와 세션이다. 정리하면 클라이언트와 정보 유지를 하기 위해 사용하는 것이 쿠키와 세션이다.
HTTP의 일종으로 사용자가 어떠한 웹 사이트를 방문할 경우, 그 사이트가 사용하고 있는 서버에서 사용자의 컴퓨터에 저장하는 작은 기록 정보 파일이다.
HTTP에서 클라이언트의 상태 정보를 클라이언트의 PC에 저장하였다가 필요시 정보를 참조하거나 재사용할 수 있다.
일정 시간동안 같은 사용자(브라우저)로부터 들어오는 일련의 요구를 하나의 상태로 보고, 그 상태를 일정하게 유지시키는 기술이다. 여기서 일정 시간은 방문자가 웹 브라우저를 통해 웹 서버에 접속한 시점으로부터 웹 브라우저를 종료하여 연결을 끝내는 시점을 말한다. 즉, 방문자가 웹 서버에 접속해 있는 상태를 하나의 단위로 보고 그것을 세션이라고 한다.
참고
https://hahahoho5915.tistory.com/32
https://github.com/WeareSoft/tech-interview/blob/master/contents/network.md
https://github.com/jjuyeon/Tech-Interview-Study/tree/main/network
https://inpa.tistory.com/entry/HTTP-%F0%9F%8C%90-%EC%9B%B9-%EB%B8%8C%EB%9D%BC%EC%9A%B0%EC%A0%80%EC%9D%98-%EC%BA%90%EC%8B%9C-%EC%A0%84%EB%9E%B5-Cache-Headers-%EB%8B%A4%EB%A3%A8%EA%B8%B0