일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
31 |
- 알고리즘
- 구현
- 스택
- 수학
- 에라토스테네스의 체
- 투 포인터
- 동적계획법
- JUnit 5
- dfs
- 위상정렬
- Kotlin
- 프로그래머스
- Network
- swea
- 백준
- 후니의 쉽게 쓴 시스코 네트워킹
- java
- 시뮬레이션
- 플로이드-와샬
- 유니온 파인드
- mst
- 이분탐색
- 완전탐색
- CS
- Effective Java
- 그리디
- 문자열
- 세그먼트 트리
- BFS
- 백트래킹
반갑습니다!
[Network] GET과 POST 본문
HTTP
HTTP란 인터넷에서, 웹 서버와 사용자의 인터넷 브라우저 사이에 문서를 전송하기 위해 사용되는 통신 규약을 말한다. (출처: NAVER 지식백과)
GET
GET은 서버로부터 정보를 조회하기 위해 설계된 메소드이다. GET은 요청을 전송할 때 필요한 데이터들을 HTTP Request Header부분의 URL에 담아서 전송한다. URL의 끝에 ?와 함께 이름과 값으로 쌍을 이루는 요청 파라미터를 쿼리스트링이라고 부르는데, 이 때 요청 파라미터가 여러 개라면 &로 연결하여 URL을 구성한다.
ex) name1으로 value1을, name2에 value2라는 값을 넣어 서버에 요청을 보내는 URL
www.dev-mb.tistory.com/resource?name1=value1&name2=value2
GET 방식은 불필요한 요청이 반복될 경우를 방지하기 위해 요청이 캐시된다. 이미지, js, css 등의 정적 컨텐츠는 변경될 일이 적고, 상대적으로 데이터가 크기 때문에 한 번 컨텐츠를 요청하고 다시 컨텐츠를 요청하지 않아도 된다. 따라서 브라우저에서는 요청을 캐시해두어 동일한 요청이 다시 발생하게 되면 서버에 요청을 보내지 않고 캐시에 저장된 데이터를 사용함으로써 서버에 불필요한 요청이 반복되는 것을 방지한다.
POST
POST는 리소스를 생성 / 변경하기 위해 설계된 메소드이다. POST는 GET과는 달리 전송할 데이터를 Body에 담아서 전송한다. HTTP 메세지의 Body는 길이의 제한이 없기 때문에, POST 방식은 GET 방식에 비해서 대용량의 데이터를 전송할 수 있다. 또한 데이터를 Body에 담기때문에 URL상으로 내용이 보이지 않는다. 하지만 패킷을 확인함으로써 Body를 볼 수 있으므로 별도의 보안처리를 해줘야 보안적인 측면에서 안전하다고 할 수 있다.
GET과 POST의 차이
GET은 Idempotent, POST는 Non-idempotent하게 설계되었다. Idempotent(멱등)은 연산을 여러 번 적용하더라도 결과가 달라지지 않는 성질을 말한다.
GET이 Idempotent하다는 것은 GET으로 서버에게 동일한 요청을 여러 번 전송하더라도 항상 동일한 응답이 돌아와야 한다는 것을 의미한다. 따라서 GET은 설계원칙에 따라 서버의 데이터나 상태를 변경시키지 않아야하기 때문에 주로 조회를 할 때에 사용해야 올바르게 사용했다고 볼 수 있다. 따라서 일반적으로 브라우저에서 웹페이지를 열어보거나 게시글을 읽는 등의 조회에 GET을 사용한다.
POST는 Non-idempotent하기 때문에 서버에게 동일한 요청을 여러 번 전송해도 응답이 다를 수 있다. 따라서 POST는 서버의 상태나 데이터를 변경시킬 때 사용된다. 게시글을 쓰면 서버에 게시글이 저장이 되고, 게시글을 삭제하면 해당 데이터가 없어지는 등 POST로 요청을 하게 되면 서버의 무언가가 변경되도록 사용된다. 하지만 POST는 생성, 수정, 삭제에 사용할 수 있지만, 생성에는 POST, 수정은 PUT 또는 PATCH, 삭제는 DELETE가 더 용도에 맞는 메소드라고 할 수 있다.
웹페이지를 조회할 때, 링크를 통해 특정 페이지로 바로 이동하려면 해당 링크와 관련된 정보가 필요한데 POST는 요청 데이터가 Body에 담겨 있기 때문에 링크 정보를 가져져올 수 없지만, GET은 URL에 요청 파라미터를 가지고 있기 때문에 링크를 걸 때, URL에 파라미터를 사용해 더 디테일하게 페이지를 링크할 수 있다.
참고
https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Network
https://hongsii.github.io/2017/08/02/what-is-the-difference-get-and-post/
'CS' 카테고리의 다른 글
[Network] URL, URN, URI (0) | 2020.05.12 |
---|---|
[Network] 쿠키와 세션 (0) | 2020.05.12 |
[Network] TCP와 UDP (0) | 2020.05.05 |
[알고리즘] 투 포인터 (0) | 2020.04.17 |
[알고리즘] 에라토스테네스의 체 (0) | 2020.04.08 |