CS지식/네트워크

[네트워크] HTTP/HTTPS 와 GET/POST방식 (feat. URI, Cookie)

hellosonic 2023. 2. 22. 12:08

🤔 HTTP (Hypertext Transfer Protocol)

HTML 문서와 같은 리소스들을 가져올 수 있게 해주는 프로토콜.

인터넷 상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜입니다.

사용자가 URL을 브라우저 주소창에 작성하고 엔터를 누르면 원하는 웹페이지가 나오게 됩니다. 사용자는 웹페이지를 보기 위해 단순한 일을 한 것이지만, 특정 웹페이지를 사용자 웹브라우저에 보여주기 위해서는 내부적인 처리들이 있습니다.

이 내부적인 처리에서, 클라이언트가 서버에게 웹페이지를 보여달라고 말하는 것을 요청(Request), 서버가 클라이언트에게 요청받은 것에 대한 대답으로 웹페이지 내용을 표현하기 위해 HTML문서로 주는 것을 응답(Respose)라고 부릅니다.

📌 HTTP의 특징 

  • Stateless(무상태성)
    HTTP는 특정 상태를 유지하지 않습니다.
  • Connectionless(비연결성)
    HTTP는 실제로 요청을 주고 받을 때만 연결을 유지하고 응답을 주고나면 서버와의 연결을 끊게 됩니다.

⭕️ HTTP의 장점 

  • 불특정 다수를 대상으로 하는 서비스에 적합한 방식입니다.(확장성)

❌ HTTP의 단점

  • 연결을 끊어버리기 때문에, 클라이언트의 이전 상태를 알 수 없습니다. (Cookie 사용)

📌 Cookie 의 사용

Cookie는 클라이언트와 서버의 상태 정보를 담고 있는 정보조각입니다.

로그인을 예로 들자면, 클라이언트가 로그인에 성공하면 서버는 로그인 정보를 자신의 데이터베이스에 저장하고 동일한 값을 Cookie 형태로 클라이언트에 보냅니다.

  • First Request
    클라이언트 로그인 성공 -> 서버 로그인 정보를 자신의 DB에 저장 -> Cookie 형태로 클라이언트에 리턴
  • Second Request
    클라이언트가 Cookie를 서버에 보냄(요청) -> 서버는 Cookie 값으로 자신의 DB를 조회해서 로그인 여부를 확인

📌 GET 방식 (Select 적 성향)

요청하는 데이터가 HTTP Request Message 의 Header 부분에 url이 담겨서 전송됩니다. 때문에 url tkddp "?" 뒤에 데이터가 붙어 Request를 보내게 되는 것입니다. 

ex) www.example.com?id=mommoo&pass=1234 & 

      => "?" 뒤에 데이터(Key = Value 쌍)가 붙음. 

  • 전송할 수 있는 데이터의 크기가 제한적입니다.
  • 보안이 필요한 데이터(ex. PassWord)에 대해서는 데이터가 그대로 url에 노출되므로 GET 방식은 적절하지 않습니다.
  • 브라우저에서 Caching이 가능합니다.
    cf) Caching : 데이터에 한번 접근 후, 또 다시 요청할 시 빠르게 접근하기 위해 데이터를 저장시켜 놓는다.

📌 POST 방식 (서버의 값이나 상태를 변경/추가 하기 위해 사용)

HTTP Request Message의 Body 부분에 데이터가 담겨서 전송됩니다.

  • 데이터들을 Body에 담기 때문에 서버로 보내는 데이터의 양은 제한이 없습니다.
  • URL에 데이터가 노출되지 않으므로 Caching이 불가합니다.
  • 데이터들이 URL에 노출되지 않기 때문에 GET 방식보다 상대적으로 보안적입니다.

📌 GET 방식 / POST 방식 비교 상식

  • POST 방식이 GET 방식보다 보안 측면에서 더 좋다?
    POST / GET 방식 모두 보내는 데이터는 전부 클라이언트 측에서 볼 수 있습니다. 두 방식 모두 보안을 생각한다면 암호화를 해야 합니다.
  • GET 방식이 POST 방식보다 속도가 빠르다?
    빠른 것은 맞지만, 왜 빠른지에 대하여 알아야 합니다.
    GET 방식의 요청은 Caching(한번 접근 후, 또 요청할 시 빠르게 접근하기 위해 데이터를 저장시켜 놓음.)때문에 빠른 것입니다.

🤔 HTTPS(Hypertext Transfer Protocol Secure)

HTTP의 보안 문제를 해결해주기 위한 프로토콜입니다.

인터넷 상에서 정보를 암호화하는 SSL(Secure Sockets Layer) 프로토콜을 사용해 클라이언트와 서버가 자원을 주고 받을 때 (HTTP의 통신 내용을 암호화) 사용하는 프로토콜. HTTPS는 텍스트를 암호화하게 됩니다.(공개키 암호화 방식으로)

😨 HTTP의 문제점

HTTP는 텍스트 교환이므로, 누군가 네트워크에서 신호를 가로채면 내용이 노출되는 보안 이슈가 존재합니다.

  • HTTP는 평문 통신이기 때문에 도청이 가능합니다.
  • 통신 상대를 확인하지 않기 때문에 위장이 가능합니다. (Request를 보낸 대상이 누군지 확인할 수 없음에도 Response하게 됩니다.)
    => 상대를 확인하는 수단으로 증명서를 제공하는 SSL로 상대를 확인할 수 있습니다.
  • 완전성(정보의 정확성)을 증명할 수 없기 때문에 변조(중간자공격)가 가능합니다. (수신한 내용이 송신측(서버/클라이언트)에서 보낸 내용과 일치한다라는 것을 보장할 수 없습니다.)
    => 메시지 다이제스트 기능을 제공하는 SSL로 변조를 방지합니다.

🤔 URI (Uniform Resource Identifiers)

클라이언트 소프트웨어(IE,Chrome,Firefox,Safari...)는 URI를 이용하여 자원의 위치를 찾습니다.

즉, HTTP는 전송 프로토콜이고, URI는 자원의 위치를 알려주기 위한 프로토콜입니다. 여기서 자원은 HTML문서, 이미지, 동영상, 오디오, 텍스트 문서 등 모든 것이 될 수 있습니다.

ex) https://www.dcinside.com/index.php 를 분해하여 분석해보면,

1. https : 자원에 접근하기 위해서 https 프로토콜을 사용합니다.

2. www.dcinside.com  : 자원의 인터넷 상에서의 위치는 www.dcinside.com  입니다.

                                       도메인은 ip주소로 변환되므로, ip주소로 서버의 위치를 찾을 수 있습니다.

3. index.php : 요청할 자원의 이름입니다.

>> 이렇게 "프로토콜", "위치", "자원명"으로 어디에 있던지 자원에 접근할 수 있습니다.

      즉, 위의 예시에서 https 프로토콜을 사용할 것이고, 도메인(ip주소) 는 무엇이고, 그 ip주소에 있는 index.php 를 요청

 

 

📚 정리

 

 

 

출처 : https://cocoon1787.tistory.com/723

https://shlee0882.tistory.com/107

https://mommoo.tistory.com/60

https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/master/Network

https://gyoogle.dev/blog/computer-science/network/HTTP%20&%20HTTPS.html