본문 바로가기

HTTP9

[네트워크] HTTP 질문 및 응답 질의응답 형식으로 면접하듯이 정리해봤습니다. 아무리 잘 아는 질문이라고 해도 막상 대답하려고 하면 어려운거 같습니다. 완벽히 아는게 아니라는걸 알려주는거 같기도합니다. 스스로 질문해보고 응답해보면 기억에 잘 남는거 같습니다. HTTP에 대한 자세한 내용은 HTTP라는 카테고리에 많이 있습니다. HTTP 가 무엇인가요? - 서버와 클라이언트 모델을 따르고 웹상에서 Request 와 Response 구조로 메세지를 주고받을 수 있는 프로토콜 입니다. TCP/IP를 기반으로 동작하며 가장 큰 특징은 Connectionless 와 StateLess 입니다. Request 구조는 어떻게 되어있나요? - Start line , Headers , Body 로 크게 3가지로 구성되어 있습니다. - Start line .. 2022. 6. 8.
[12] HTTP : cache-control - 캐시 캐시는 느린 사용자 경험때문에 조금더 빠른 사용자 경험을 위해 탄생한 개념이다. 만약 클라이언트에서 변경되지 않은 리소스에 대해 서버로 계속 요청한다면 네트워크를 통해서 요청할때마다 데이터를 다운로드 받게된다. 인터넷 네트워크는 비싸고 느리며 브라우저 로딩속도또한 느리기 때문에 비효율적이다. 따라서 변하지 않은 리소스를 미리 브라우저 캐시에 저장해두고 빠르게 로딩하여 사용자 경험을 개선한다. 1) 클라이언트는 서버에 메세지를 보낸다. GET /star.jpg 2) 서버는 응답 메세지를 보낸다. HTTP/1.1 200 OK Content-Type: image/jpeg cache-control: max-age=3600 content-length: 34012 ... max-age=3600 은 3600.. 2021. 3. 29.
[11] HTTP 쿠키 HTTP 는 Stateless 프로토콜이다. 그래서 클라이언트와 서버가 요청을 주고 받고 나면 더 이상 연결을 유지하지 않는다. 그리고 이전 요청에 대해 서버는 기억하지 않는다. 그래서 Login 서비스와 같이 이전상태를 기억해야하는 서비스는 HTTP 프로토콜을 이용할때 한계가 있다. 그래서 등장한 것이 쿠키다. - 쿠키 동작 방식 1) 클라이언트가 서버에게 요청을 보냄 POST /login HTTP/1.1 id=abc&password=1234 2) 서버는 HTTP 메세지 Set-Cookie 에 다음과 같은 정보를 포함 시켜서 클라이언트에게 보냄 HTTP/1.1 200 OK Set-Cookie: sessionId=abcde1234; expires=Sat,26-Dec-2020 00:00:00 GMT; pa.. 2021. 3. 29.
[10] HTTP 메세지 전송방법 (단순,압축,분할,범위) 1. 단순 전송 Content-length 를 통해 보낼 데이터의 길이를 명시하며 한번에 보내고 한번에 받는다. ex) 1) 웹 브라우저가 서버에 GET /orderList 요청 2) 서버는 200 OK 와 Content-length: 3042 를 담고 메세지 본문에 { .... ... .... } HTML 을 담아서 웹 브라우저로 보냄. 2. 압축 전송 단순 전송과 비슷함. 다만 Content-Length 와 함께 Content-Encoding: gzip 을 헤더에 명시하고 본문에 압축된 메세지를 응답으로서 웹브라우저에 보낸다. Content-Encoding: gzip 은 예시 이며 gzip 외에도 다양한 압축 방식이 있다. 3. 분할 전송 Content-length 가 없다. 대신에 Transfer-.. 2021. 3. 29.
[9] HTTP content Negotiation (협상) HTTP 프로토콜은 웹 브라우저가 선호하는 내용을 가져오기 위해 서버와 협상할 수 있다. 서버에서 제공하는 컨텐츠가 브라우저에 지원하지 않는다면 클라이언트 입장에서 불편할 수 밖에없다. 따라서 서버에서 클라이언트가 선호하는 컨텐츠를 바탕으로 협상할 수 있는 메커니즘을 지원한다. 대표적으로 Accept 라는 이름이 붙은 HTTP Request가 해당한다. 요청시에만 사용! 1) Accept : 클라이언트가 선호하는 미디어 타입 2) Accept-Charset : 클라이언트가 선호하는 문자 인코딩 3) Accept-Encoding : 클라이언트가 선호하는 압축 인코딩 4) Accept-Language : 클라이언트가 선호하는 언어 Accept-Language를 사용하여 요청헤더 예시 GET /event Ac.. 2021. 3. 29.
[8] HTTP Redirection (3xx) - 리다이렉션 HTTP 상태코드가 3XX인 응답을 웹 브라우저에서 받는다. 응답된 메세지 헤더에 Location이 존재한다면 Location 위치로 자동 이동한다. "이동한다"의 뜻은 Location 을 다시 서버에 요청하여 해당 페이지로 이동한다는 의미다. - 영구 리다이렉션 (Permanent Redirection) 301 Moved Permanently - 원래 쓰던 uri 가 아닌 새로운 uri로 영구적으로 바뀌었을 때 사용한다. 1) GET /event 요청 2) 서버에서 301 Moved Permanently 와 Location: /new-event 를 클라이언트로 전송 3) 클라리언트에서는 GET /new-event 로 다시 서버에 요청 ( 이때 만약 본문이 존재했다면 제거될 확률 높음) 4.. 2021. 3. 29.
[7] 클라이언트에서 서버로 HTTP 데이터 전송 4가지 1. 정적 데이터 조회 쿼리 파라미터를 사용하지 않고 단순히 정적 데이터를 GET 메서드를 통해 조회 할 수 있다. 보통 정적 데이터 조회는 캐시를 사용하여 좀 더 효율적으로 조회할 수 있다. ex) GET /index.html 2. 동적 데이터 조회 쿼리 파라미터를 사용하여 클라이언트에서 원하는 정보를 조회할 수 있다. 주로 검색할 때 정렬필터를 쿼리파라미터로 사용한다. POST로 조회한다면 바디에 정렬필터를 포함하여 요청할 수 있으나 주로 GET을 사용한다. ex) GET /search?q=hello&hl=ko 3. HTML Form 을 통한 데이터 전송 Enter your name: Enter your email: 만약 POST로 데이터를 전송한다면 아래와 같은 HTTP 메세지가 생성된다. POST.. 2021. 3. 29.
[5] HTTP 구조 위 그림은 클라이언트나 서버에서 HTTP/1.x 메세지로 생성하고 1.1 버전을 2버전으로 이진 바이너리 프레임으로 나뉘는 과정을 보여준다. 웹개발자가 손수 HTTP 메세지를 작성하지는 않기 때문에 브라우저나 서버 설정파일이 알아서 HTTP메세지를 작성해 준다. HTTP 요청과 응답의 구조는 서로 매우 닮았다. 그리고 엄청 심플해서 확장성도 좋다. 1. 시작라인 -요청 HTTP 메서드가 온다 ( GET, POST , PUT , .... ) HTTP 버전을 명시한다. 요청 대상의 URL을 명시한다. -응답 HTTP 버전 HTTP 상태코드 (200, 400, 500 등) 간단한 이유문구가 온다. 2. 헤더 헤더에 들어가는 내용은 아래의 템플릿을 따른다. field-name: OWS field-value OW.. 2021. 3. 20.
[1] http메세지가 서버로 가는 과정 소켓라이브러리 = C언어 네트워크 표준 라이브러리로 여기서는 도메인이름(ex. naver.com)을 아이피주소로 바꾸기 위한 용도로 쓴다는 정도만 알면 될듯하다. 1. http 메세지를 어플리케이션 계층에서 만든다. 2. 메세지를 소켓라이브러리를 통과시킨다. 3. TCP 패킷으로 감싼다. ( 출발지 port 번호 -> 목적지 port 번호) 4. ip 패킷으로 감싼다. ( 출발지 ip -> 목적지 ip) 5. ethernet frame으로 감싼다 (자세히 알필요 X) 6. 서버로 전송함. 참조: webdir.tistory.com/264 TCP/IP, Socket 라이브러리, 리졸버 HTTP의 메시지를 만들고 웹 서버에 송신할때 이를 OS에 의뢰하여 송신하게 되는데, 이때 URL 안에 쓰여있는 서버의 도메.. 2021. 3. 14.