![사용자가 요청을 제출하기 전에 크롬이 요청을 보내는 것으로 의심됩니다. 이것이 가능합니까?](https://rvso.com/image/1595492/%EC%82%AC%EC%9A%A9%EC%9E%90%EA%B0%80%20%EC%9A%94%EC%B2%AD%EC%9D%84%20%EC%A0%9C%EC%B6%9C%ED%95%98%EA%B8%B0%20%EC%A0%84%EC%97%90%20%ED%81%AC%EB%A1%AC%EC%9D%B4%20%EC%9A%94%EC%B2%AD%EC%9D%84%20%EB%B3%B4%EB%82%B4%EB%8A%94%20%EA%B2%83%EC%9C%BC%EB%A1%9C%20%EC%9D%98%EC%8B%AC%EB%90%A9%EB%8B%88%EB%8B%A4.%20%EC%9D%B4%EA%B2%83%EC%9D%B4%20%EA%B0%80%EB%8A%A5%ED%95%A9%EB%8B%88%EA%B9%8C%3F.png)
저는 이 웹사이트를 개발하고 있는데 크롬에서 이상한 동작을 발견했습니다. Tomcat을 다시 시작하면 데이터베이스가 다시 생성되고(porpuses 테스트용) 이로 인해 데이터베이스를 채우는 URL이 생성됩니다.
문제는 가끔 이 URL을 입력할 때 Tomcat 액세스 로그를 확인했는데 제출하지 않은 요청이 어떻게든 자동으로 제출되었다는 것입니다. 서버 출력 로그는 이 "Ghost 요청"이 전송되었음을 확인합니다.
입력한 URL을 제출하면 요청이 반복되고 데이터베이스에 일부 제약 조건이 있고 값이 반복되기 때문에 오류 페이지가 표시됩니다.
이 동작이 어떻게든 예상되었거나 어디에서나 문서화되어 있습니까(만약 그렇다면 왜 일관성이 없습니까?)? 누군가 비슷한 일을 경험한 적이 있나요?
답변1
크롬이 일찍 요청을 하는지는 모르겠지만 문제가 될 수도 있고 문제가 되어서도 안 됩니다.
HTTP GET 요청은 다음과 같이 간주됩니다.멱등성, 이는 기본적으로 여러 번 요청하는 것이 한 번만 요청하는 것과 다르지 않아야 함을 의미합니다. 따라서 Chrome(또는 다른 브라우저)이 GET 요청을 조기에 만들어 페이지를 미리 로드하여 사용자가 실제로 Enter 키를 눌렀을 때 더 빠르게 로드되는 것처럼 보이도록 하려는 경우 그렇게 하면 부정적인 영향이 있어서는 안 됩니다.
데이터베이스를 채우는 스크립트는 GET 요청으로 생성될 때 데이터베이스에 아무 작업도 수행해서는 안 되며 대신 POST 요청을 기다려야 합니다. GET 요청의 경우 클릭하면 데이터베이스를 채우는 POST 요청이 가능한 제출 버튼이 있는 양식을 출력하게 됩니다.