# HTTP ## 의미 HyperText Transfer Protocol 웹 상에서 정보를 교환할 때 주로 쓰이는 프로토콜이다. ## 특징 - TCP/IP 기반 - 패킷 단위 통신 - 클라이언트 - 서버 모델을 따름 - 80번 포트 사용 ### Connectionless 비연결지향 - 서버에 가는 부담을 줄이기 위해 응답 받은 후 연결 해제 - 요청 시마다 연결하면 오버헤드가 발생하므로 `connection:keep-alive` 속성을 사용해 지속적 연결 상태를 유지(기존 연결을 재사용) ### Stateless 무상태성 - 서버가 클라이언트의 정보를 저장하지 않고 각 요청을 독립적으로 처리 - 클라이언트에 맞춰 응답이 불가능하므로 이를 해결하기 위해 쿠키, 세션 등을 사용 ## 메서드 - GET - POST - PUT - DELETE ... ### 멱등성 같은 요청을 여러 번 보내도 같은 효과를 지님 GET,PUT,DELETE 등 ### 안전성 서버의 상태를 바꾸지 않음(읽기) 모든 안전한 메서드는 멱등성을 가짐 GET 등 ### 캐시 사설 캐시/공유 캐시 ## 상태 코드 - 2xx 성공 - 3xx 리다이렉션 - 4xx 클라이언트 오류 - 5xx 서버 오류 ### 문제점 - 평문 통신이어서 가로챌 수 있다 - 통신 상대를 확인하지 않아 위장 가능 - 응답해도 되는 요청인지 알 수 없다 - 누가 요청했는지 알 수 없다 - 변조 가능 ## HTTPS - 위와 같은 문제로 인해 암호화하여 전송하는 프로토콜 - 443번 포트 사용 - SSL을 한번 더 거쳐 통신(HTTP↔SSL↔TCP) - 공개키 암호화 방식 - CA 기업에게 돈을 지불하고 인증서 발급 ### 단점 - HTTP에 비해 많은 리소스 필요 - 인증서 유지보수 비용 필요 ## 요청과 응답 <!-- ![](https://i.imgur.com/XdSRb1n.png) --> ![](https://i.imgur.com/ITUzHNt.png) ### 요청 #### 요청 `<request_method><URL><HTTP_Ver>` #### 헤더 - host : 서버 도메인+포트번호 - Content-Type : body type - If-Modified-Since : 명시 날짜 이후 변경된 리소스만 획득 - Cookie : Set-cookie 설정된 쿠키값 ### 응답 #### 응답 헤더 - Access-Control-Allow-Origin: : CORS를 허용하기 위한 주소 명시 - Set-cookie : 클라이언트에 쿠키 설정 - Location : 3xx 상태일 때 리다이렉션 되는 주소 - Allow : 허용 메서드