목록분류 전체보기 (74)
과거의 내가 미래의 나에게
엔티티 헤더 필드는 리퀘스트 메시지와 리스폰스 메시지에 포함된 엔티티에 사용되는 헤더로 콘텐츠의 갱신 시간 같은 엔티티에 관한 정보를 포함한다. 1. Allow 리소스가 지원하는 메소드의 집합을 나열한다. 만약 서버가 받을 수 없는 메소드를 수신한 경우, 상태 코드 405 Method Not Allowed로 리스폰스 하되 반드시 Allow 헤더필드를 붙여 수신 가능한 메소드 목록을 클라이언트에 전달하도록 해야한다. 2. Content-Encoding 서버가 엔티티 바디에 대해서 실시한 콘텐츠 코딩 형식을 전달한다. Transfer-Encoding은 서버에 의해 적용되는 콘텐츠 전송 방식이고 Content-Encoding은 전달하는 콘텐츠의 형식을 나타낸다. 3. Content-Language 엔티티 바디..
* HTTP/1.1을 기준으로 작성되었습니다. 응답 헤더 필드는 서버에서 클라이언트로 송신하는 리스폰스 메시지에 쓰이는 헤더로, 리스폰스의 부가 정보와 서버의 정보 그리고 클라이언트에 부가 정보 요구 등을 나타낸다. 1. Accept-Ranges 클라이언트가 Range 헤더 필드를 통해 서버에게 리소스의 일부만을 요청할 수 있었는데, 이 때 서버가 부분 요청에 대해 응할 수 있는지 여부를 확인할 때 Accept-Ranges 헤더 필드를 사용한다. 서버가 리소스의 일부만을 줄 수 있는지 여부를 알려주는 헤더 필드이다. 클라이언트는 해당 헤더를 보고 가능하다면 Range 헤더 필드로 리소스의 일부를 받아올 수 있다. 값으로는 bytes와 none이 있는데, bytes는 일부 요청이 가능하다는 것이고 none..
배열에 대한 가공을 할 때 사실 for문과 if문이면 모든 것을 할 수 있다. 그럼에도 JS에서는 많은 배열함수가 존재한다. 이 배열함수들은 심지어 for문보다 퍼포먼스가 약간 떨어진다고 알고 있는데, 그렇다면 왜 배열함수들은 이렇게나 많고 사람들은 for문보다 배열함수를 더 자주 쓸까? 그 이유는 사람끼리 소통할 때 더 원활히 하기 위함이다. for문을 코드에 잔뜩 써놓게되면 읽는 사람들은 그 코드가 무엇인지 해석하기 위해 힘을 들여야한다. 하지만 배열 함수를 쓰면 이 함수가 어떤 목적으로 쓰이는 것인지 좀 더 수월하게 알 수 있고 그 의미에 따라 함수를 작성하기에 코드의 길이도 줄일 수 있는 것이다. 배열함수가 코드의 의미를 분명히 하기 위해 쓰인다하면, 이미 배열함수를 자주 쓰고 익숙하지만 한 번 ..
* HTTP/1.1을 기준으로 작성되었습니다. 리퀘스트 헤더 필드는 클라이언트에서 서버로 송신하는 리퀘스트 메시지에 쓰이는 헤더로, 리퀘스트의 부가 정보와 클라이언트 정보 그리고 리스폰스 콘텐츠에 관한 우선 순위 등을 추가한다. 1. Accept 클라이언트에서 서버에게 자신이 원하는 미디어 타입과 미디어 타입의 우선순위를 전달하기 위해 사용된다. 왼쪽은 주 타입이고, 오른쪽은 보조 타입이다. 텍스트 파일: text/html, text/plain, text/css, application/xml... 이미지 파일: image/png, image/gif... 동영상 파일: video/mpeg, video/quicktime... 애플리케이션 바이너리 파일: application/zip... ..
원인된 상황 페이지를 띄운 후 웹소켓으로 데이터가 들어올 때마다 화면에 알람을 띄워주는 기능을 작업했으나 아래와 같은 에러가 뜨며 작동이 되지 않았다. DOMException: play() failed because the user didn't interact with the document first. 원인 브라우저마다 정책은 조금씩 다르지만, 기본적으로 자동 재생 기능을 차단하는 편이다. 여기서 자동 재생이란, HTML 속성("autoplay)을 통해 재생하거나 JS 코드(.play())를 통해 소리를 재생하게끔 하는 것이다. 브라우저에서 자동 재생을 제한하는 이유는 사용자 경험을 위함인데, 웹 페이지를 방문한 사용자들이 자신의 의사에 반해 소리가 재생된다면 불편을 느낄 수가 있으며, 또한 자동으로 ..
* HTTP/1.1을 기준으로 작성되었습니다. 일반 헤더 필드 1. Cache-Control HTTP 요청 시 매번 서버에게 보내지 않고 받았던 HTTP 응답을 재활용할 수가 있다. 즉 HTTP 요청/응답과 관련하여 캐싱을 할 수 있다는 것인데, 이와 관련된 헤더가 Cache-Control이다. Cache-Control은 캐싱과 관련된 여러 명령(Directive)을 할 수 있는 헤더 필드이다. Cache-Control의 값에다 명령을 나열하여 캐싱을 어떻게 할 지를 결정하는데, HTTP 요청과 응답 모두 사용할 수 있지만 각각 나열할 수 있는 명령들이 조금씩 다르다. Cache-Control과 관련된 더 자세한 내용은 지금 이론으로 공부해봤자 결국 도루묵이 될 것 같아서 일단은 해당 블로그를 통해 간단..
HTTP 프로토콜의 동작 원리에서 클라이언트가 HTTP 요청(리퀘스트) 메시지를 먼저 보내고, 서버가 그에 따른 결과(리스폰스)메시지를 보내준다고 했다. 이 때, 클라이언트와 서버는 서로 어떤 내용이 담긴 메시지를 보내주는 것일까? 오늘은 HTTP 메시지에 대해서 공부해보겠다. 0. 메시지 헤더 원문을 보기 위한 여정: 와이어샤크 HTTP 메시지를 살펴보기 앞서, 책이나 각종 글에 나와있는 HTTP 헤더 메시지 원문을 보고 싶었는데 개발자 도구로는 원문이 아니라 일부 요약된 듯한 내용만 있어서 이 원문을 찾느라 방황했다. 원래라면 이런 내용은 글의 주제에 벗어날 수 있으니 생략해야했지만 싸돌아다닌 시간이 억울해서 기록 겸 적어놓는다. 언급했 듯 개발자 도구에서는 대부분의 웹사이트에서는 헤더 메시지 원문을..
HTTP 동작 과정 클라이언트가 서버에 리소스를 요청하고 서버가 해당 요청을 처리한 후 클라이언트에 응답을 보내는 과정을 정리해본다. 1. 클라이언트의 요청 준비 사용자가 원하는 페이지를 받기 위해 웹 브라우저에 URL을 입력할 것이다. 웹 브라우저는 URL을 입력받으면 DNS 서버로부터 URL에 해당하는 IP 주소를 받아오는 등 사용자가 원한 웹 페이지를 특정하기 위한 정보를 준비한다. 2. TCP 연결 설정 정보를 다 모았다면 이제 해당 웹페이지가 들어있는 웹 서버를 찾아나서야 할 것이다. 전 세계에는 수많은 웹서버가 있으므로 이를 찾기 위해서는 먼저 전 세계의 웹 서버를 찾을 수 있는 인터넷에 접속해야할 것이다. 이를 TCP 연결 설정이라 하며, TCP 연결 설정을 통해 원하는 웹 서버를 찾은 후 ..