반응형
현재 스프링없이 바닐라 JAVA로 WAS를 구현하고 있다.
//404헤더를 보내준다
private void response404Header(DataOutputStream dos)
{
try {
String body = "<html><head><title>404 Not Found</title></head><body><h1>404 Not Found</h1></body></html>";
byte[] bodyBytes = body.getBytes("UTF-8");
dos.writeBytes("HTTP/1.1 200 OK \r\n");
dos.writeBytes("Content-Type: text/html ;charset=utf-8\r\n");
dos.writeBytes("Content-Length: " + bodyBytes.length + "\r\n");
dos.writeBytes("\r\n");
responseBody(dos,bodyBytes);
} catch (IOException e) {
logger.error(e.getMessage());
}
}
잘못된 url이 들어 왔을때 404헤더를 보내주는 코드이다.
보면 알겠지만 헤더에 HTTP/1.1 200 OK 를 보내주고 있다.
물론 body에다가는 404 Not Found를 넣어줬기에 브라우저에서는 404Not Found를 출력한다.
그럼 걍 body에다가만 내용 잘 넣어주면서 잘못된 url 요청이 오면 잘 매칭시켜주면 되지 왜 Status Code를 지켜주면서 header를 반환해야하는가?? 하는 근본적인 호기심이 생겼다.
역시 GPT에게 물어봤다.
정말 가슴에 와닿는 답변 하나가 왔다.
- HTTP 표준 준수:
- HTTP 프로토콜은 클라이언트와 서버 간의 통신을 정의하는 표준입니다. 상태 코드는 요청의 결과를 나타내며, 클라이언트가 요청에 어떻게 반응해야 하는지 알려줍니다.
- 404 상태 코드는 "Not Found"를 의미하며, 서버가 클라이언트의 요청을 이해했지만 요청한 리소스를 찾을 수 없다는 것을 나타냅니다.
- 클라이언트와의 명확한 커뮤니케이션:
- 브라우저나 다른 HTTP 클라이언트는 상태 코드를 기반으로 요청의 성공 또는 실패를 판단합니다. 200 OK는 요청이 성공적으로 처리되었음을 나타내고, 404 Not Found는 요청된 리소스를 찾을 수 없음을 명확히 나타냅니다.
- 200 OK로 모든 응답을 보내면 클라이언트는 요청이 성공한 것으로 착각할 수 있으며, 이는 클라이언트가 잘못된 결정을 내리게 할 수 있습니다.
- 디버깅과 문제 해결:
- 서버 로그와 클라이언트 로그에서 상태 코드를 통해 요청의 결과를 쉽게 파악할 수 있습니다. 예를 들어, 404 오류는 잘못된 URL을 요청했음을 빠르게 인식하게 도와줍니다.
- 상태 코드가 항상 200 OK라면, 실제 문제를 디버깅하는 데 어려움이 있을 수 있습니다.
- SEO(검색 엔진 최적화):
- 검색 엔진 크롤러는 상태 코드를 기반으로 웹사이트의 상태를 판단합니다. 404 Not Found를 올바르게 사용하면 검색 엔진이 해당 페이지가 존재하지 않음을 이해하고, 검색 결과에 잘못된 링크를 포함하지 않게 됩니다.
- 사용자 경험 개선:
- 올바른 상태 코드와 메시지를 사용하면 사용자에게 더 나은 피드백을 제공할 수 있습니다. 404 페이지를 커스터마이징하여 사용자가 잘못된 URL을 요청했을 때 도움이 되는 정보를 제공할 수 있습니다.
이 중에서 4번째 SEO 부분이 가장 가슴에 와닿고 이해가 쉽게 되었다.
여기 보면 분명 /index.html/abc 라는 파일은 서버에 존재하지 않기에 404 Not Found를 날렸어야 한다.
하지만 난 200 OK 를 날렸고, 그 결과 검색 엔진 크롤러(여기서는 크롬)에서 정상 url 로 판단하고 자동완성이 가능하게 했다.
이건 SEO(검색엔진최적화) 측면에서 매우매우 안좋다.
그리고 사실 지금은 내가 다루는 상태 코드가 200,404 두 개 밖에 없어서 아는거지 만약 모든 상태 코드를 다룬다고 가정할 시, 어떤 상태코드를 받았는지 알아야 디버깅하고 유지보수 하기 편하지 않겠는가
그리고 HTTP 표준이라니깐 걍 불만 갖지 말고 쓰도록 해야겠다.
반응형
'Spring boot' 카테고리의 다른 글
Spring boot 끄적끄적(3) (0) | 2024.07.16 |
---|---|
NoSQL vs SQL (0) | 2024.07.16 |
Spring boot 끄적 끄적(2) (1) | 2024.07.09 |
Spring boot 생성자 주입 vs 필드 주입 (0) | 2024.06.28 |
Spring boot 끄적 끄적(1) (0) | 2024.06.25 |