아무코딩

[네트워크] GET과 POST 본문

CS/네트워크

[네트워크] GET과 POST

동 코 2020. 4. 18. 23:31

HTTP의 GET과 POST

둘 다 HTTP 프로토콜을 이용해서 서버에 무엇인가를 요청할 때 사용하는 방식이다. 하지만 둘의 특징을 제대로 이해하여 기술의 목적에 맞게 알맞은 용도에 사용한다.

GET

입력한정보가 url에 노출되고, 정보를 보여줘도 상관없는 기능을 수행할때 get 메소드를 수행한다.

우선 GET방식은 요청하는 데이터가 HTTP Request MessageHeader 부분의 url에 담겨서 전송된다. url 상에 ? 와 함께 이름과 쌍을 이루는 요청 파라미터를 쿼리스트링이라고 한다. 요청 파라미터가 여러개이면 &로도 연결한다. 이러한 쿼리스트링을 url 뒤에 붙여서 request를 보낸다.

GET은 서버로부터 정보를 조회하기 위해 설계된 메소드이다. 그러므로 이 방식은 url 이라는 공간에 담겨가기 때문에 전송할 수 있는 데이터의 크기가 제한적이다. 또 보안이 필요한 데이터에 대해서는 데이터가 그대로 url에 노출되므로 GET 방식은 적절하지 않다.(ex. password)

정리하자면 GET 의 특징은 다음과 같이 정의할 수 있다.

  • URL에 변수(데이터)를 포함시켜 요청한다.

  • 데이터를 Header(헤더)에 포함하여 전송한다.

  • URL에 데이터가 노출되어 보안에 취약하다.

  • 전송하는 길이에 제한이 있다.

    • 왜냐하면 GET방식은 간단한데이터를 URL에 넣도록 설계된 방식으로 되어있기 때문.
  • 캐싱할 수 있다.

  • URL 형식에 맞지않는 파라미터 이름이나 값은 인코딩되어 전달해야 합니다.

  • URL에 그대로 query의 이름과 값이 같이 연결되어 표현된다.

    ex)http://사이트주소/블라블라?name=홍길동

POST

POST 방식의 request는 HTTP Message의 MessageBody 부분에 데이터가 담겨서 전송된다. 바이너리 데이터를 요청하는 경우 POST 방식으로 보내야 하는 것처럼 데이터 크기가 GET 방식보다 크고 보안면에서 낫다.(하지만, 보안적인 측면에서 암호화를 하지 않는 이상 큰 차이는 존재하지 않는다.)

POST는 리소스를 생성/변경하기 위해 설계되었다.

POST의 특징은 다음과 같다.

  • URL에 변수(데이터)를 노출하지 않고 요청한다.
  • 데이터를 Body(바디)에 포함시킨다.
  • URL에 데이터가 노출되지 않아서 기본적인 보안은 되어있다.
  • 전송하는 길이에 제한이 없다.
  • 캐싱할 수 없다.

Header와 Body는 무엇의 Header와 Body인가?

웹에서 get과 post방식으로 서버로 요청을 했을때, 보내는 데이터를 HTTP 패킷이라 표현한다. HTTP 프로토콜을 쓰므로, 앞에 HTTP가 붙고 인터넷을 통해 보내는 데이터를 패킷이라 표현하므로, HTTP패킷이라 부른다. HTTP패킷은 크게 헤더와 바디로 나뉘어진다.

  • GET방식에서는 패킷의 헤더에 지정된 형식으로 url을 통해 데이터를 보냈고 post방식은 패킷의 바디라고 불리는 것 안에 데이터르 담아서 보내게 됩니다.

GET과 POST 차이 구별하기

GET은 데이터를 가져올때 POST는 데이터의 값이나 상태를 바꿀때 사용한다.

  • 글목록 조회, 글조회 -> GET
  • 글쓰기, 글 수정 -> POST

이러한 특성을 이해한 후에는 어디에 적용되야지 그 차이를 이해할 수 있다. GET은 가져오는 것이다. 서버에서 어떤 데이터를 가져와서 보여준다거나 하는 용도이지 서버의 값이나 상태 등을 변경하지 않는다. 즉, 조회의 목적을 가지고 있다. (동일한 연산은 동일한 결과를 나타낸다는 것을 의미한다.)

반면에 POST는 서버의 값이나 상태를 변경하기 위해서 또가 추가하기 위해서 사용된다. 따라서 서버에게 동일한 요청을 여러 번 전송해도 응답은 항상 다를 수 있다.

부수적인 차이점을 좀 더 살펴보자면 GET 방식의 요청은 브라우저에서 Caching 할 수 있다. 때문에 POST 방식으로 요청해야 할 것을 보내는 데이터의 크기가 작고 보안적인 문제가 없다는 이유로 GET 방식을 요청한다면 기존에 caching 되었던 데이터가 응답될 가능성이 존재한다. 때문에 목적에 맞는 기술을 사용해야 한다.

관련 References

'CS > 네트워크' 카테고리의 다른 글

OSI 7 계층  (0) 2020.03.22
데이터 통신  (0) 2020.03.19
Comments