HTML 요청 메서드
HTTP이란 무엇인가요?
하이텍스트 전송 프로토콜(Hypertext Transfer Protocol, 줄여서 HTTP)은 클라이언트와 서버 간의 통신을 가능하게 하기 위해 목표로 합니다.
HTTP은 클라이언트와 서버 간의 요청-응답 프로토콜로서 작동합니다.
예시: 클라이언트(브라우저)가 서버에 HTTP 요청을 보냅니다. 그런 다음 서버가 응답을 클라이언트에게 반환합니다. 응답은 요청 상태 정보를 포함하고, 요청한 내용도 포함할 수 있습니다.
HTTP 메서드
- GET
- POST
- PUT
- HEAD
- DELETE
- PATCH
- OPTIONS
가장 일반적으로 사용되는 두 가지 메서드는 GET과 POST입니다。
GET 메서드
GET은 지정된 자원에서 데이터를 요청하는 데 사용됩니다。
GET은 가장 일반적인 HTTP 메서드 중 하나입니다.
주의하세요, 쿼리 문자열(이름/값 쌍)은 GET 요청의 URL에서 전송됩니다:
/test/demo_form.php?name1=value1&name2=value2
GET 요청에 대한 다른 몇 가지 주의사항:
- GET 요청은 캐시될 수 있습니다
- GET 요청은 브라우저의 이력 기록에 저장됩니다
- GET 요청은 북마크로 저장할 수 있습니다
- 감쪽 데이터를 처리할 때는 GET 요청을 사용하지 않아야 합니다
- GET 요청은 길이 제한이 있습니다
- GET 요청은 데이터를 가져오기(수정하지 않음)에만 사용되어야 합니다
POST 메서드
POST은 데이터를 서버로 보내서 자원을 생성/갱신하는 데 사용됩니다.
POST로 서버로 보내는 데이터는 HTTP 요청의 본문에 저장됩니다:
POST /test/demo_form.php HTTP/1.1 Host: codew3c.com name1=value1&name2=value2
POST는 가장 일반적인 HTTP 메서드 중 하나입니다.
POST 요청에 대한 다른 몇 가지 주의사항:
- POST 요청은 캐시되지 않습니다
- POST 요청은 브라우저의 이력 기록에 저장되지 않습니다
- POST는 북마크로 저장할 수 없습니다
- POST 요청은 데이터 길이에 대한 제한이 없습니다
PUT 메서드
PUT은 데이터를 서버로 보내서 자원을 생성/갱신하는 데 사용됩니다.
POST와 PUT 간의 차이는 PUT 요청이 동일성 있음(idempotent)이므로, 동일한 PUT 요청을 여러 번 호출하면 항상 동일한 결과를 얻습니다. 반대로, POST 요청을 여러 번 호출하면 동일한 자원을 여러 번 생성하는 부작용이 있습니다.
HEAD 메서드
HEAD과 GET은 거의 같지만, 응답 본문이 없습니다.
다시 말해, GET /users가 사용자 목록을 반환하면 HEAD /users는 동일한 요청을 발행하지만 사용자 목록을 반환하지 않습니다.
HEAD 요청은 실제 GET 요청을 발행하기 전에(예: 대형 파일 다운로드나 응답 본문 전에) GET 요청이 반환할 내용을 확인하는 데 매우 유용합니다.
DELETE 메서드
DELETE 메서드는 지정된 자원을 제거합니다.
OPTIONS 메서드
OPTIONS 메서드는 목표 자원의 통신 옵션을 설명합니다.
GET과 POST를 비교합니다
아래 표는 두 가지 HTTP 메서드: GET과 POST를 비교합니다.
GET | POST | |
---|---|---|
뒤로 가기 버튼/새로 고침 | 위험 없음 | 데이터가 다시 제출됩니다(브라우저는 사용자에게 데이터가 다시 제출될 것을 알려야 합니다). |
북마크 | 북마크로 저장할 수 있습니다 | 북마크로 저장할 수 없습니다 |
캐시 | 캐시될 수 있습니다 | 캐시할 수 없습니다. |
인코딩 유형 | application/x-www-form-urlencoded | application/x-www-form-urlencoded 또는 multipart/form-data. 이진 데이터는 복잡한 인코딩을 사용합니다. |
역사 | 파라미터는 브라우저의 역사에 저장됩니다. | 파라미터는 브라우저의 역사에 저장되지 않습니다. |
데이터 길이 제한 | 네. 데이터를 전송할 때 GET 메서드는 URL에 데이터를 추가합니다. URL의 길이는 제한됩니다. (URL 최대 길이는 2048 문자입니다). | 제한이 없습니다. |
데이터 유형 제한 | ASCII 문자만 허용됩니다. | 제한이 없습니다. 이진 데이터도 허용됩니다. |
보안성 | POST에 비해 GET의 보안성이 낮습니다. 왜냐하면 전송된 데이터가 URL의 일부로 저장됩니다. 암호나 다른 민감한 정보를 전송할 때 GET을 사용하지 마세요! |
POST는 GET보다 안전합니다. 왜냐하면 파라미터가 브라우저의 역사나 웹 서버의 로그에 저장되지 않기 때문입니다. |
보이지 않음 | 데이터는 URL에 모든 사람에게 공개됩니다. | 데이터는 URL에 표시되지 않습니다. |