웹 프로토콜 HTTP에 대해서 알아보자.
장점
단점
또한 HTTP는 TCP/IP 구조를 따르게 된다. 여기서 TCP/IP는 도청 가능한 네트워크로 통신 경로 상에서 엿보기가 가능해진다. 패킷을 수집하는것으로 도청이 가능한데 HTTP처럼 평문으로 전송하게 된다면 메시지의 의미를 해커가 파악할 수 있게 된다.
보완방법
1. 통신 자체를 암호화
- SSL(Secure Socket Layer) 또는 TLS(Transport Layer Security)라는 다른 프로토콜을 조합하여 HTTP 통신 내용을 암호화 할 수 있다. SSL의 껍데기를 쓴 HTTP를 HTTPS 라고 함
- 콘텐츠 암호화를 통해 HTTP 메시지에 포함되는 콘텐츠를 암호화 하는 방법
HTTP 메서드란 클라이언트와 서버 사이에 이뤄지는 요청과 응답 데이터를 전송하는 방식이다. 해당 메서드를 활용하여 서버가 수행해야 할 동작을 지정하게 된다.
대표적인 메서드로 5가지가 있다
위의 메서드의 속성들을 크게 3가지로 나누게 된다.
Get 요청을 제외한 다른 메서드들은 안전하지 않다.
여기서 안전
이란 호출해도 리소스가 변경되지 않는 성질을 의미한다.
GET 요청은 단순히 데이터를 가져오는 역할을 하기에 리소스가 변경되지 않는다.
반면에 POST, PUT, PATCH, DELETE는 리소스를 변경하기 때문에 안전하지 않다.
GET, PUT, DELETE는 멱등
을 충족한다.
멱등
이란 연산을 여러번 적용하더라도 결과값이 달라지지 않는 일을 뜻한다.
더 자세하게 설명하자면 동일한 요청을 한번 보내는 것과 여러번 연속으로 보내는 것이 같은 효과를 가지고, 서버의 상태도 동일해야 한다
이다.
위의 대표메서드 5가지의 특징을 보도록 하자
GET은 리소스를 조회만 해오기 때문에 결과값이 달라질 일이 없다
DELETE는 리소스를 단순 삭제하기 때문에 DELETE를 한번 요청 한 후 그 다음번부터 DELETE 요청을 하더라도 해당 리소스는 이미 삭제되었기 때문에 서버의 상태는 변하지 않는다.
PUT 또한 마찬가지로 전체 리소스를 덮어쓰기 때문에 여러번 요청해도 상태의 변화는 없다.
그러나 PATCH의 경우 멱등을 보장할수 있고 보장하지 않을 수 도 있다.
캐시 가능성이란 응답 결과 리소스를 캐싱해서 효율적으로 사용할 수 있는가에 대한 여부이다.
브라우저도 소프트웨어이기 때문에 캐시 공간이 있다. 클라이언트가 서버에 한 번 요청했던 데이터에 대해 요청마다 다시 전송할 필요가 없도록 브라우저에서 임시로 데이터를 갖게 된다.
GET, POST, PATCH메소드는 스펙상으로 캐시가 가능하지만 실제로 GET이나 HEAD 정도만 캐시로 이용이 가능하다고 한다.
그 이유로 POST, PATCH 같은 경우 기본적으로 리소스가 변경되는 메서드다. 만약 호출이 발생해서 리소스가 변경된다면 캐시와 데이터불일치 문제가 발생하게 됨.
그러나 GET은 데이터를 가져오는 역할만 하기 때문에 캐시를 이용할 수 있다.
나머지 메서드는 복잡성이나 유지의 어려움 때문에 캐시를 사용하지 않는다고 함
References
https://inpa.tistory.com/entry/WEB-%F0%9F%8C%90-HTTP%EC%9D%98-%EB%A9%B1%EB%93%B1%EC%84%B1-%C2%B7-%EC%95%88%EC%A0%95%EC%84%B1-%C2%B7-%EC%BA%90%EC%8B%9C%EC%84%B1-%F0%9F%92%AF-%EC%99%84%EB%B2%BD-%EC%9D%B4%ED%95%B4%ED%95%98%EA%B8%B0?category=980052
https://velog.io/@wiostz98kr/HTTP1.1%EA%B3%BC-HTTP2.0%EC%9D%98-%EC%B0%A8%EC%9D%B4-e2v4x4t1
https://github.com/JaeYeopHan/Interview_Question_for_Beginner/tree/main/Network#http%EC%99%80-https
https://medium.com/@shlee1353/http1-1-vs-http2-0-%EC%B0%A8%EC%9D%B4%EC%A0%90-%EA%B0%84%EB%8B%A8%ED%9E%88-%EC%82%B4%ED%8E%B4%EB%B3%B4%EA%B8%B0-5727b7499b78