이는 서버에서 Access-Control-Request-Headers: content-type 헤더를 받는 cors가 구성되지 않아 발생한다. 현재 OPTIONS 요청을 거부하는 경우의 에러 상황을 처리하지 않으므로 return_error 핸들러에서 기본적으로 404 Not Found 메시지를 사용한다.2 Warp에는 CorsForbidden 거부 타입이 포함되어 있으므로 에러 핸들러에서 임포트하여 사용한다.
코드 3-19 CORS가 허용되지 않을 때 의미 있는 에러를 추가하기
use warp::{Filter, reject::Reject, Rejection, Reply, http::StatusCode, http::Method, filters::{
cors::CorsForbidden,
}
};
...
async fn return_error(r: Rejection) -> Result<impl Reply, Rejection> {
if let Some(error) = r.find::<CorsForbidden>() {
Ok(warp::reply::with_status(
error.to_string(),
StatusCode::FORBIDDEN,
))