개발이 좋아서/HTTP가 좋아서
HTTP 헤더(캐시와 조건부 요청) - 캐시 제어 헤더 / 확실한 캐시 무효화
Cache-Control 캐시 지시어(directives) Cache-Control: max-age - 캐시 유효 시간, 초 단위Cache-Control: no-cache - 데이터는 캐시해도 되지만, 항상 원(origin) 서버에 검증하고 사용Cache-Control: no-store - 데이터에 민감한 정보가 있으므로 저장하면 안됨 (메모리에서 사용하고 최대한 빨리 삭제) Pragma 캐시 제어(하위 호환) Pragma: no-cacheHTTP 1.0 하위 호환 Expires 캐시 만료일 지정(하위 호환) expires: Mon, 01 Jan 1990 00:00:00 GMT캐시 만료일을 정확한 날짜로 지정HTTP 1.0 부터 사용지금은 더 유연한 Cache-Control: max-age 권장Cache..
HTTP 헤더(캐시와 조건부 요청) - 검증 헤더와 조건부 요청
검증 헤더와 조건부 요청 정리 캐시 유효 시간이 초과해도, 서버의 데이터가 갱신되지 않으면304 Not Modied + 헤더 메타 정보만 응답(바디X)클라이언트는 서버가 보낸 응답 헤더 정보로 캐시의 메타 정보를 갱신클라이언트는 캐시에 저장되어 있는 데이터 재활용결과적으로 네트워크 다운로드가 발생하지만 용량이 적은 헤더 정보만 다운로드매우 실용적인 해결책 검증 헤더캐시 데이터와 서버 데이터가 같은지 검증하는 데이터Last-Modied , ETag조건부 요청 헤더 검증 헤더로 조건에 따른 분기If-Modied-Since: Last-Modied 사용If-None-Match: ETag 사용조건이 만족하면 200 OK조건이 만족하지 않으면 304 Not Modied Last-Modied, If-Modied-Si..
HTTP 헤더(일반 헤더) - 쿠키
Set-Cookie: 서버에서 클라이언트로 쿠키 전달(응답) Cookie: 클라이언트가 서버에서 받은 쿠키를 저장하고, HTTP 요청시 서버로 전달 생명주기 Expires, max-age Set-Cookie: expires=Sat, 26-Dec-2020 04:39:21 GMT - 만료일이 되면 쿠키 삭제Set-Cookie: max-age=3600 (3600초) - 0이나 음수를 지정하면 쿠키 삭제세션 쿠키: 만료 날짜를 생략하면 브라우저 종료시 까지만 유지영속 쿠키: 만료 날짜를 입력하면 해당 날짜까지 유지 도메인 Domain 예) domain=example.org명시: 명시한 문서 기준 도메인 + 서브 도메인 포함domain=example.org를 지정해서 쿠키 생성example.org는 물론이고dev..
HTTP 헤더(일반 헤더) - 전송 방식 / 일반 정보 / 특별한 정보 / 인증
전송 방식 단순 전송Content-Lnegth압축 전송Content-encoding분할 전송Transfer-Encoding범위 전송Range, Content-Range 일반 정보 From - 유저 에이전트의 이메일 정보일반적으로 잘 사용되지 않음검색 엔진 같은 곳에서, 주로 사용요청에서 사용Referer - 이전 웹 페이지 주소 현재 요청된 페이지의 이전 웹 페이지 주소A -> B로 이동하는 경우 B를 요청할 때 Referer: A 를 포함해서 요청Referer를 사용해서 유입 경로 분석 가능요청에서 사용참고: referer는 단어 referrer의 오타 User-Agent - 유저 에이전트 애플리케이션 정보 user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10..
HTTP 헤더(일반 헤더) - HTTP 헤더 표현
Content-Type: 표현 데이터의 형식Content-Encoding: 표현 데이터의 압축 방식Content-Language: 표현 데이터의 자연 언어Content-Length: 표현 데이터의 길이표현 헤더는 전송, 응답 둘다 사용Content-Type미디어 타입, 문자 인코딩application/json, text/html; charset=utf-8, image/pngContent-Encoding표현 데이터를 압축하기 위해 사용데이터를 전달하는 곳에서 압축 후 인코딩 헤더 추가데이터를 읽는 쪽에서 인코딩 헤더의 정보로 압축 해제gzip, deflate, identityContent-Language표현 데이터의 자연 언어를 표현ko, en, en-USContent-Length바이트 단위Transfer..

HTTP 헤더(일반 헤더) - 콘텐츠 협상
협상(콘텐츠 네고시에이션) 클라이언트가 선호하는 표현 요청 Accept: 클라이언트가 선호하는 미디어 타입 전달Accept-Charset: 클라이언트가 선호하는 문자 인코딩Accept-Encoding: 클라이언트가 선호하는 압축 인코딩Accept-Language: 클라이언트가 선호하는 자연 언어협상 헤더는 요청시에만 사용 협상과 우선순위1 Quality Values(q)Quality Values(q) 값 사용0~1, 클수록 높은 우선순위생략하면 1Accept-Language: ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7ko-KR;q=1 (q생략) ko;q=0.9 en-US;q=0.8 en;q=0.7협상과 우선순위2 Quality Values(q) 구체적인 것이 우선한다.Accept: ..
HTTP 상태코드
소개1xx (Informational): 요청이 수신되어 처리중 (거의 사용하지 않음)2xx (Successful): 요청 정상 처리3xx (Redirection): 요청을 완료하려면 추가 행동이 필요4xx (Client Error): 클라이언트 오류, 잘못된 문법 등으로 서버가 요청을 수행할 수 없음5xx (Server Error): 서버 오류, 서버가 정상 요청을 처리하지 못함2xx - 클라이언트의 요청을 성공적으로 처리200 OK - 요청 성공201 Created - 요청 성공해서 새로운 리소스가 생성됨202 Accepted - 요청이 접수되었으나 처리가 완료되지 않음 (배치 처리 같은 곳에서 사용) 예) 요청 접수되었으나 1시간 이후 배치 작동204 No Content - 서버가 요청을 성공적으로..
HTTP 메서드 활용 - 참고하면 좋은 URI 설계 개념
- 문서(document)단일 개면(파일 하나, 객체 인스턴스, 데이터베이스)예) /members/100, /files/star.jpg- 컬렉션(collection)서버가 관리하는 리소스 디렉터리서버가 리소스의 URI를 생성하고 관리예) /members- 스토어(store)클라이언트가 관리하는 자원 저장소클라이언트가 리소스의 URI를 알고 관리예) /files- 컨트롤러(controller), 컨트롤 URI문서, 컬렉션, 스토어로 해결하기 어려운 추가 프로세스 실행동사를 직접 사용예) /members/{id}/delete
HTTP 메서드 활용 - 클라이언트에서 서버로 데이터 전송
쿼리 파라미터를 통한 데이터 전송GET주로 정렬 필터(검색어)메시지 바디를 통한 데이터 전송POST, PUT, PATCH회원가입, 상품 주문, 리소스 등록, 리소스 변경 4가지 상황 - 정적 데이터 조회쿼리 파라미터 미사용이미지, 정적 텍스트 문서조회는 GET 사용정적 데이터는 일반적으로 쿼리 파라미터 없이 리소스 경로로 단순하게 조회 가능- 동적 데이터 조회쿼리 파라미터 사용주로 검색, 게시판 목록에서 정렬 필터(검색어)조회 조건을 줄여주는 필터, 조회 결과를 정렬하는 정렬 조건에 주로 사용조회는 GET 사용GET은 쿼리 파라미터 사용해서 데이터를 전달- HTML Form 데이터 전송POST 전송 - 저장GET 전송 - 조회multipart/form-data (다른 종류의 여러 파일과 폼의 내용 함께 ..
HTTP 메서드 - HTTP 메서드의 속성
안전(Safe Methods)멱등(Idempotent Methods)캐시가능(Cacheable Methods)안전호출해도 리소스를 변경하지 않는다.ex) GET멱등f(f(x)) = f(x)한 번 호출하든 두 번 호출하든 100번 호출하든 결과가 똑같다.자동 복구 메커니즘- 멱등 메서드GET: 한 번 조회하든, 두 번 조회하든 같은 결과가 조회된다.PUT: 결과를 대체한다. 따라서 같은 요청을 여러번 해도 최종 결과는 같다.DELETE: 결과를 삭제한다. 같은 요청을 여러번 해도 삭제된 결과는 똑같다.POST: 멱등이 아니다! 두 번 호출하면 같은 결제가 중복해서 발생할 수 있다.캐시가능응답 결과 리소스를 캐시해서 사용해도 되는가?GET, HEAD, POST, PATCH 캐시가능실제로는 GET, HEAD ..