Fairy ' s
[22. March] HTTP #1 / TIL 본문
Runtime (런타임)
- 프로그램을 실행하는 환경
- JavaScript의 런타임은 node.js이다.
NPM (Node Package Manager)
- 필요한 모듈을 다운로드 할 수 있는 모듈 스토어
- 리눅스의 패키지 매니저가 apt이고 macOS의 패키지가 brew이듯, node.js 생태계의 패키지 매니저는 npm이다.
- package.json : 프로그램을 실행시키기 위해 필요한 모듈의 이름, 실행 방법, 테스트 방법 등이 명시되어 있다.
프로그램을 실행시키기 위해 필요한 실제 모듈은 따로 'node_modules'라는 폴더에 저장되어 있다.
- package.json 에서 필요하다고 하는 모듈은 npm install 명령어를 입력하면 node_modules 라는 디렉토리가 생기며 자동 다운로드 된다.
Cookie
- 서버에서 클라이언트에 데이터를 저장하는 방법이며, 무상태성(stateless)인 HTTP에서 정보가 유지되게 한다.
- 쿠키는 오랜 시간 유지될 수 있고, 자바스크립트를 이용해 접근할 수 있기 때문에 쿠키에 민감한 정보를 담는 것은 위험하다.
- Cookie Options
옵션 | 설명 |
Domain | 서버와 요청의 도메인이 일치하는 경우 쿠키 전송 |
Path | 서버와 요청의 세부경로가 일치하는 경우 쿠키 전송 |
MaxAge or Expires | 쿠키의 유효기간 설정 |
HttpOnly | 스크립트의 쿠키 접근 가능 여부 결정 |
Secure | HTTPS 프로토콜에서만 쿠키 전송 여부 결정 |
SameSite | CORS 요청의 경우 옵션 및 메서드에 따라 쿠키 전송 여부 결정 Lax : Cross-Origin 요청이면 'GET' 메소드에 대해서만 쿠키 전송 Strict : same-site 경우에만 쿠키 전송 None : 항상 쿠키를 보낼 수 있지만, Secure 옵션이 필요하다. |
HTTP 헤더
요청 헤더 옵션
- From : 유저 에이전트의 이메일 정보 / 일반적으로 검색 엔진에서 주로 사용하며, 잘 사용하지 않는다.
- Referer : 현재 요청된 페이지의 이전 웹 페이지 주소 / 유입 경로 수집 가능
- User-Agent : 클라이언트의 애플리케이션 정보 / 어떤 종류의 브라우저에서 장애가 발생하는지 파악 가능
- Host : 필수 헤더, 요청한 호스트 정보 / 하나의 서버가 여러 도메인을 처리하거나, 하나의 IP 주소에 여러 도메인이 적용되어 있을 때 호스트 정보를 명시하기 위해 사용
- Origin : 서버로 POST 요청을 보낼 때, 요청을 시작한 주소를 나타냄 / 요청 주소와 받는 주소가 다르면 CORS 에러가 발생
- Authorization : 인증 토큰(e.g. JWT)을 서버로 보낼 때 사용하는 헤더 / 토큰의 종류(ex. Basic) + 실제 토큰 문자 를 전송
응답 헤더 옵션
- Server : 요청을 처리하는 ORIGIN 서버의 소프트웨어 정보 / ex. Server : Apache/2.2.22(Debian), nginx
- Date : 메시지가 발생한 날짜와 시간 / ex. Date : Wed, 22 Mar 2023 13:00:00 GMT
- Location : 페이지 리디렉션 / 웹 브라우저는 3xx 응답의 결과에 Location 헤더가 있으면, 그 위치로 리다이렉트 함
- 201 (Created) : Location 값은 요청에 의해 생성된 리소스 URI
- 3xx (Redirection) : Location 값은 요청을 자동으로 리디렉션 하기 위한 대상 리소스를 가리킴 - Allow : 허용 가능한 HTTP 메서드 / 405(Method Not Allowed) 응답에 포함 / ex. Allow:GET, HEAD, PUT
- Retry-After : 유저 에이전트가 다음 요청을 하기까지 기다려야 하는 시간 / 503(Service Unavailable): 서비스가 언제까지 불능인지 알려줄 수 있음 / ex. Retry-After : Fri, 31 Dec 2024 23:59:59 GMT , Retry-After : 120(초 단위 표기)
표현 헤더 (Representation Headers)
- 표현 데이터를 해석할 수 있는 정보를 제공한다. / 데이터 유형, 길이, 압축 정보 등
- HTTP 메시지
- header : HTTP 전송에 필요한 모든 부가정보를 담기 위해 사용하며, 필요 시 임의의 헤더 추가가 가능하다.
부가 정보 : 메시지 바디 내용, 크기, 압축, 인증, 요청 클라이언트 서버 정보, 캐시 관리 정보 등
형식 : <field-name> : <field-value>
- body : 메시지 본문(Message body)을 통해 표현 데이터를 전달한다.
- payload : 데이터를 실어 나르는 부분
Field-name | 설명 |
Content-Type | 표현 데이터의 형식 / 미디어 타입, 문자 인코딩 ex. Content-Type: text/html;charset=UTF8 Content-Type: application/json |
Content-Encoding | 표현 데이터의 압축 방식 - 데이터를 전달하는 곳에서 압축 후 인코딩 헤더 추가 - 데이터를 읽는 곳에서 인코딩 헤더의 정보로 압축 해제 ex. Content-Encoding: gzip / deflate / identity |
Content-Language | 표현 데이터의 자연 언어 ex. Content-Language: ko / en / en-US |
Content-Length | 표현 데이터의 길이 / 바이트 단위 - *Transfer-Encoding(전송 코딩)을 사용하면 Content-Length를 사용하면 안된다. ex. Content-Length: 5 |
콘텐츠 협상 헤더 (Content negotiation Headers)
- 클라이언트가 선호하는 표현 요청으로, 요청 시에만 사용한다.
- Accept : 클라이언트가 선호하는 미디어 타입 전달
- Accept-Charset : 클라이언트가 선호하는 문자 인코딩
- Accept-Encoding : 클라이언트가 선호하는 압축 인코딩
- Accept-Language : 클라이언트가 선호하는 자연 언어
- 1부터 0까지 언어에 대한 우선순위를 부여하여 순서대로 지원하는 언어로 응답을 준다.
- ex. Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7
* Transfer-Encoding : 전송 시 어떤 인코딩 방법을 사용할 것인가를 명시하며, chunked 방식을 사용한다.
'Devops Bootcamp' 카테고리의 다른 글
[23. March] REST API / TIL #1 (0) | 2023.03.23 |
---|---|
[22. March] HTTP #2 / TIL (0) | 2023.03.22 |
[16. March] HTTP messages / TIL (0) | 2023.03.16 |
[15. March] 웹 서비스 접근 / TIL #2 (2) | 2023.03.15 |
[15. March] 클라이언트 - 서버 / TIL #1 (0) | 2023.03.15 |
Comments