Are HTTP headers case-sensitive?
프론트엔드없이 api 테스트
Postman을 다운로드하지 않아서 MacBook의 기본 curl 명령을 사용하여 API를 테스트
메소드, 헤더 , 바디 넣어서 POST 요청
1. Content-Type application/x-www-form-urlencoded
테스트하기위해
-X (–request <GET,POST,PUT,PATH,DELETE> 요청시 사용할 메소드)
-d (–data) -H (--header <POST의 기본 Content-Type 은 application/x-www-form-urlencoded 이다 출처: https://inpa.tistory.com/entry/LINUX-📚-CURL-명령어-사용법-다양한-예제로-정리#curl_http_메서드 [Inpa Dev 👨💻:티스토리]>)
POST의 기본 타입 넣었더니 db에 Null이 찍힘
2. body에 넣을 데이터가 text/html 인줄알았는데 null이 찍힘
curl -I localhost:3000/register
HTTP/1.1 200 OK
X-Powered-By: Express
Content-Type: text/html; charset=utf-8
Content-Length: 1542
ETag: W/"606-Q85bpMcLB39mgcBvBduYykU274I"
Date: Wed, 24 Jan 2024 16:00:23 GMT
Connection: keep-alive
Keep-Alive: timeout=5
3. “Content-Type: application/json”
fetch 를 사용할때 서버로부터 json 데이터를 받기 위해서 res.json()을 사용
출처: https://haeguri.github.io/2018/12/30/compare-response-json-send-func/
바디에 “Content-Type: application/json” 헤더를 넣었더니 값이 제대로 저장되었다.
헤더는 대소문자를 구별하는가?
curl localhost:3000/register -X POST -d '{"id":"test","pw":"1234","name":"test"}' -H 'content-type: application/json'
{"success":true}%
curl localhost:3000/register -X post -d '{"id":"123","pw":"123","name":"123"}' -H 'content-type: text/html'
post 소문자로 실패
curl localhost:3000/register -d '{"id":"123","pw":"123","name":"123"}' -H 'content-type: text/html'
{"success":true}%
//데이터를 보내면 알아서 메소드 인식해줌
HTTP 프로토콜은 헤더 이름의 대소문자를 구별하지 않습니다. 따라서 “content-type”과 “Content-Type”은 동일하게 처리됩니다. 이는 HTTP/1.1 스펙에 명시되어 있습니다.
클라이언트가 서버로 HTTP 요청을 보낼 때, 헤더의 이름을 지정할 때에도 대소문자를 마음대로 사용할 수 있습니다. 서버는 이를 구분하지 않고 처리할 것이라 기대할 수 있습니다.
요약하자면, HTTP 표준에 따르면 헤더의 대소문자는 구별되지 않지만, 실제로는 구현체에 따라 다를 수 있으므로 주의가 필요합니다.