GET
: 특정 리소스를 가져오도록 요청 (데이터 받기만 함)HEAD
: 특정 리소스를 GET
으로 요청했을 때, 돌아올 헤더를 요청 (본문을 가져서는 안 되며, 존재하더라도 무시해야 함)POST
: 서버로 데이터 전송 (서버에 변경 사항을 만듦)PUT
: 요청 페이로드를 사용해 새로운 리소스를 생성하거나, 대상 리소스를 나타내는 데이터를 대체DELETE
: 지정한 리소스 삭제CONNECT
: 요청한 리소스에 대해 양방향 연결을 시작하는 메소드OPTIONS
: 주어진 URL 또는 서버에 대해 허용된 통신 옵션을 요청 (어떤 메서드들이 허용되는지 헤더로 받아 볼 수 있음)TRACE
: 대상 리소스에 대한 경로를 따라 메시지 루프백 테스트 수행PATCH
: 리소스의 부분적인 수정을 할 때에 사용PATCH
와 PUT
의 차이PATCH
: 자원의 일부만 수정PUT
: 자원의 전체 교체 (그래서 자원의 아이디를 알아야 함)POST
와 PUT
의 차이동일한 요청을 '한 번 보내는 것'과 '여러 번 연속으로 보내는 것'이 같은 효과를 지니고, 서버의 상태도 동일하게 남을 때, 해당 HTTP 메서드가 "멱등성"을 가졌다고 말함
POST
: 멱등성을 가지지 않음PUT
: 멱등성을 가짐 (부수 효과 없음)⭐ "멱등성"을 따질 때 중요한 것은 실제 서버의 백엔드 상태!
각 요청에서 반환하는 응답 코드는 다를 수 있음.
첫 번째DELETE
요청이 200을 반환하면, 그 이후에는 아마 404를 반환할 것 (하지만 해당 리소스가 서버에서 지워졌고 존재하지 않는다는 상태는 동일)
(이미지 출처: CORS(교차 출처 리소스 공유))
💡 브라우저가 자신의 출처가 아닌 다른 어떤 출처로부터 자원을 로딩하는 것을 허용하도록, 서버가 허가해주는 HTTP 헤더 기반 매커니즘
SOP(Same Origin Policy)
가 서로 다른 출처일 때 리소스 요청과 응답을 차단하는 정책이라면,CORS(Cross-Origin Resource Sharing)
은 반대로 서로 다른 출처라도 리소스 요청, 응답을 허용할 수 있도록 하는 정책배경
⭐ 사전 요청(Preflighted requests)
: 실제 요청을 보내는 것이 안전한지 판단하기 위해 브라우저가 먼저OPTIONS
메서드를 사용해 다른 출처 리소스에 HTTP 요청을 보냄
1. 서버에서 Access-Control-Allow-Origin
응답 헤더 세팅하기
'Access-Control-Allow-Origin': <origin> | *
*
를 설정하면 출처 상관없이 리소스에 접근할 수 있는 와일드카드라서 보안에 취약해짐2. 프록시 서버 사용하기
⭐ CORS 정책은 '브라우저'가 '클라이언트'에서 요청을 보낼 때만 적용됨!
즉, 브라우저가 직접 다른 출처의 서버에 요청을 보낼 때!
ex) 브라우저가http://localhost:3000
에서 실행 중인데, API 요청을http://api.example.com
으로 보낸 경우
서버 간 요청이나 브라우저를 통하지 않는 요청은 CORS 정책의 대상이 아님
프론트 뿐 아니라, 백엔드 개발자들에게도 HTTP 통신 흐름은 중요하다고,
데보션 프로 KIDO님께서도 엄청 강하게 강조했던 부분이에요... 정리하시는거 넘 좋습니다!!
이번에 그래도 뒷풀이까지 가서 인사도 해서 너무 좋았어요 !!!