HTTP(하이퍼텍스트 전송 프로토콜)는 웹에서 데이터를 주고받기 위한 표준 프로토콜입니다.
HTTP 메서드는 클라이언트와 서버 간에 어떤 동작을 수행할지를 약속하는 메서드입니다.
(주)
GET: 리소스의 표시나 검색을 요청합니다. 클라이언트에서 서버로 정보를 요청할 때 사용됩니다. URL에 데이터를 첨부하여 전달하며, 주로 데이터를 요청하는 용도로 사용됩니다.
POST: 리소스에 엔터티를 제출하여 서버의 특정 처리를 요청합니다. 클라이언트에서 서버로 데이터를 전송하여 새로운 리소스를 생성하거나 기존 리소스를 업데이트하는 데 사용됩니다.
PUT: 리소스의 업데이트를 요청합니다. 클라이언트에서 서버로 데이터를 전송하여 해당 리소스를 대체하거나, 존재하지 않는 경우 새로운 리소스를 생성합니다.
상태코드 201 : PUT으로 새로운 리소스를 생성할 때
DELETE: 리소스의 삭제를 요청합니다. 클라이언트에서 서버로 삭제할 리소스의 식별자를 전송하여 해당 리소스를 삭제하도록 요청합니다.
PATCH: 리소스의 부분 업데이트를 요청합니다. PUT은 리소스 전체를 업데이트하지만, PATCH는 리소스의 일부분만 업데이트합니다.
(부)
HEAD: GET 메서드와 유사하지만, 서버는 응답 본문을 반환하지 않고 상태 줄과 헤더만 반환합니다. 주로 리소스의 메타데이터를 가져오기 위해 사용됩니다.
OPTIONS: 서버에서 지원하는 메서드들을 확인하기 위해 사용됩니다. 클라이언트는 이 메서드를 사용하여 서버가 어떤 메서드들을 지원하는지 확인할 수 있습니다.(주로 CORS에서 사용)
CONNECT : 목적 리소스로 식별되는 서버로의 터널을 맺습니다. 요청한 리소스에 대해 양방향 리소스를 시작하는 메서드.
TRACE: 클라이언트에서 서버까지의 경로를 따라 메시지를 테스트하기 위해 사용됩니다. 데이터의 변조 유무를 확인할 수 있다. 보안상의 이유로 거의 사용되지 않습니다.
이러한 HTTP 메서드들은 RESTful API 디자인에서 자주 사용되며, 각각의 메서드는 특정한 의미와 목적을 가지고 있습니다.
CORS(교차 출처 리소스 공유) :
기본적으로, 브라우저에서는 스크립트가 다른 도메인으로 HTTP 요청을 보낼 때 브라우저는 이를 차단합니다.
리소스를 제공한 도메인이 현재 요청하려는 도메인과 다르더라도 요청을 허락해 주는 웹 보안 방침
예시를 들자면
프론트엔드의 주소가 localhost:3000이고 백엔드 주소가 localhost:8080일 때 프론트엔드에서 요청을 보낸다고 해서 바로 접근이 불가능하다. 왜냐하면 CORS 정책을 위반했기 때문이다. 따라서 백엔드에서 추가적인 작업이 필요하다.
.
CORS는 웹 브라우저가 서버로부터 오는 HTTP 요청에 대한 권한 부여를 처리하도록 하는 메커니즘입니다. 이때, 서버는 요청이 허용된 출처에서 온 것인지를 확인하는 CORS 정책을 설정해야 합니다.
https://aaa.github.io:443/tech/svelte?page=1#Origin
https:// Protocol
aaa.github.io Host
:443 Port(생략가능)
/tech/svelte Path
?page=1 Query String
#Origin Fragment
위의 구성요소 중 Protocol + Host + Port 3가지가 같으면 동일 출처(Origin)라고 합니다.
CORS는 왜 필요한가요?
출처가 다른 두 개의 어플리케이션이 마음대로 소통하게 된다면, 사용자가 악의를 가지고 다른 사이트로 본 사이트를 모방하여 사용자의 정보가 탈취되기 쉬워진다.
CORS를 사용하려면 다음과 같은 메서드들이 있다.(라고 알아만 두자)
Access-Control-Allow-Origin: 이 헤더는 클라이언트 도메인의 목록이나 '*'(모든 도메인)을 포함하여, 어떤 도메인에서 요청이 허용되는지를 나타냅니다.
Access-Control-Allow-Methods: 이 헤더는 서버가 허용하는 HTTP 메서드(예: GET, POST)를 나타냅니다.
Access-Control-Allow-Headers: 이 헤더는 허용된 HTTP 헤더의 목록을 나타냅니다.
Access-Control-Allow-Credentials: 이 헤더는 자격 증명을 사용하는 요청에 대해 브라우저가 쿠키를 전송할 수 있는지 여부를 나타냅니다.
Access-Control-Expose-Headers: 이 헤더는 클라이언트에서 접근 가능한 추가 응답 헤더의 목록을 나타냅니다.