HTTP
웹은 HTTP를 이용해서 통신하는 클라이언트와 서버로 구성
HTTP 메시지 구조
요청 메시지 : 요청라인 - 헤더 - 공백 - 바디
Request line => 요청방식(method) - 요청페이지 - 프로토콜/버전 으로 구성
ex) GET /dir/page.html HTTP/1.1
(공백으로 정보 구분)
- GET(메소드)
- /dir/page.html (URL)
- HTTP/1.1 (프로토콜:HTTP 버전:1.1)
헤더 : General Headers, Response Headers, Entity Headers
바디 : 응답 메시지(HTML)
응답 메시지 : 상태라인 - 헤더 - 공백 - 바디
Status line => 프로토콜/버전 - 응답상태코드 - 응답상태메시지 로 구성
ex) HTTP/1.1 200 OK
- HTTP버전 1.1
- 200(상태코드)
- OK(응답이유)
헤더 : General Headers, Response Headers, Entity Headers
바디 : 응답 메시지(HTML)
** 요청방식(method)
- GET : 자원요청(기본값), 요청 파라미터를 URL에 붙여서 전송 , 서버로부터 데이터 획득
GET /HTTP/1.1
Host: foo.com
- POST : 자원 요청, 요청 파라미터를 Body에 붙여서 전송, 서버에 데이터 추가
POST / HTTP/1.1
Host: foo.com
Content-Type: application/x-www-form-urlencoded
Content-Length: 13
say=Hi&to=Mom
- HEAD : HTTP Header 정보만 요청
HEAD /index.html
- PUT : URL 자원을 생성하도록 요청 (파일 업로드 가능), 서버에 데이터 갱신
PUT /new.html HTTP/1.1
Host: example.com
Content-type: text/html
Content-length: 16
<p>New File</p>
- DELETE : URL 자원을 삭제하도록 요청 (파일 삭제 가능), 서버에 데이터 삭제
DELETE /file.html HTTP/1.1
- TRACE : 진단 목적, 서버는 응답바디에 요청받은 자료와 동일한 내용 보냄
TRACE /index.html
- OPTION : 응답 가능한 HTTP 메소드 요청
** RESTful API
http에는 여러 매소드가 있다.
하지만 REST는 CRUD(Create, Read, Update, Delete) 4가지 메소드만 사용한다.
create = post, read = get, update = put, delete =delete
HTTP 응답 상태 코드
1xx : 정보 제공
2xx : 요청 성공적
3xx : 요청한 자원이 다른곳에 있음
4xx : 요청에 문제있음
5xx : 서버에 에러있음
세션과 쿠키
HTTP 비연결지향 : 클라이언트-서버 연결 후 하나의 요청과 응답을 처리하고 연결 종료(응답이 끝나면 연결 종료)=> 클라이언트 정보가 서버에서 관리 되지 않음, 연결유지를 위한 리소스를 줄여 더 많은 연결을 가능하게 함, 연결/연결종료에 대한 오버헤드 발생
HTTP 무상태 프로토콜 : 연결을 종료하는 순간 클라이언트-서버 통신 끝, 클라이언트 상태 정보 유지안함(이전 통신 정보 모름)
따라서 쿠키와 세션이 필요
쿠키
- http 통신시 사용자 정보 유지하기 위해 사용
- 서버에서 생성하여 응답 헤더에 붙이고 클라이언트에 전송
- 쿠키는 요청을 전달할 때 이름=값 형식으로 요청 헤더에 포함되어 서버에 전달
- 쿠키 제약사항 : 브라우저당 최대 300개, 호스트마다 20개 가능, 크기 4kb\
예시) 인터넷 쇼핑몰 장바구니, 로그인 페이지 ID/PW 자동저장
세션 쿠키 : 브라우저가 열려 있는 동안 유효한 쿠키, 서버 이용하는 동안 사용자 정보를 유지하기 위해
영속 쿠키 : 디스크에 유효기간 동안 저장되는 쿠키, 재방문시 정보를 기억하기 위해
쿠키 발행시 옵션 속성 지정 가능
- Domain : 브라우저가 쿠키 값을 전송할 서버의 도메인 지정
cookie.setDomain("test.com");
- Path : 브라우저가 쿠키 값을 전송할 URL 지정
cookie.setPath("/경로");
- Expires : 쿠키 유효기간 설정
cookie.setMaxAge(값);
- Secure : SSL 통신 채널 연결시에만 쿠키 전송하게 설정
cookie.setSecure(true);
- HttpOnly : 자바 스크립트에서 쿠키값 읽지 못하게 설정
cookie.setHttpOnly(true);
세션
- 클라이언트와 서버의 논리적인 연결
- 일정 시간동안 같은 클라이언트로부터 송신되는 request를 하나의 상태로 인식하고 상태를 유지함.
- 브라우저로 웹 서버 접속 후 브라우저 종료될때까지 연결이 유지되는 상태
- 서버는 사용자 정보를 유지하기 위해(http를 사용하는 경우) 서버의 메모리에 브라우저별 세션 영역 할당
- 각 영역은 세션 ID로 구분 => 세션 ID = 세션 토큰
- 각 클라이언트마다 고유 ID 가짐, 서버에 저장하므로 쿠키보다 안전
- 서버에 저장하므로 서버 저장공간 필요, 서버가 처리하므로 부하 발생
세션 ID를 클라이언트에 전달하는 방법
1. HTML 히든 필드 이용
- 세션 ID를 HTML의 히든 필드로 클라이언트에 전달
- 히든 필드이므로 웹페이지에서 안보임
- 소스 보기를 통해 세션 ID값 추출 가능
2. URL rewriting을 이용
- 클라이언트 브라우저가 쿠키 사용을 제한한 경우에 사용
- 웹 서버에 서비스되는 페이지의 모든 URL에 세션 ID를 request parameter로 붙여 사용
3. 쿠키 이용
- 클라이언트 브라우저가 쿠키 사용을 허용하는 경우
서버가 세션 ID를 생성 -> 쿠키에 저장 -> 헤더에 세션ID 저장하여 전달 -> 클라이언트 식별
세션을 이용한 클라이언트-서버 응답/요청
- 클라이언트별 유일한 세션 ID 부여 => 클라이언트 식별
- 클라이언트 첫 요청시 세션ID 생성, 전달
- 두번째 요청부턴 세션 ID 사용
쿠키 | 서버 | |
저장위치 | 클라이언트 | 서버 |
만료시점 | 쿠키저장시 설정 | 정확한 시점 모르 |
리소스 | 클라이언트 리소스 | 서버 리소스 |
용량제한 | O | X |
정규식
- 특정한 규칙을 가진 문자열 집합을 표현하는데 사용하는 형식 언어
ex)
String str = "abcdefghijk";
System.out.println(str.replaceAll("[abchij]", "굿"));
=> 정규표현식 "[abchij]"는 a,b,c,h,i,j를 개별적으로 의미함
인코딩 스키마
- 문자 인코딩
문자들의 집합을 컴퓨터에서 저장 or 통신에 사용할 목적으로 부호화하는 방법 = 인코딩
웹 애플리케이션에서 사용되는 데이터들 => 네트워크 통해 여러 종류 시스템으로 전달됨
따라서 인코딩 스키마를 적용하여 안전하게 데이터 사용
- URL 인코딩
URL에 포함된 문자들이 안전하게 웹 서버에 전달 될 수 있도록 특수한 기능을 가진 메타 문자들을 브라우저가 인코딩해 전달 => 브라우저 특성에 따라 특수문자 표현 변형 오류 막기 위해
- HTML 인코딩
HTML문서에서 특별한 기능을 수행하는 문자들의 의미를 제거하고 일반적인 문자로 표시하기 위해 사용되는 인코딩 방식
- Base64 인코딩
모든 바이너리 데이터들을 출력 가능한 ASCII 문자들을 이용해 안전하게 나타내도록 하는 방식 => 이메일 첨부 파일을 인코딩해서 SMTP를 통해 안전하게 전송 or HTTP 승인을 사용하는 경우 사용자 인증서를 인코딩할때 사용
- 멀티바이트 인코딩
EUC-KR, MS949, 유니코드, UTF-8 등의 인코딩 방식
1~4바이트를 사용하여 다양한 문자를 표시
- MS 스크립트 인코딩
MS에서 제공하는 인코딩 기법으로 IE에서만 사용가능
예시들)
https://ande226.tistory.com/121
'공부 > 기타' 카테고리의 다른 글
스마트홈 프로젝트 (0) | 2022.04.26 |
---|---|
DSP MATLAB Project - Image Processing With GPU (0) | 2022.04.26 |
Block 암호의 운영모드 중에서 CBC 방식에 나타나는 “오류의 파급” (0) | 2021.05.09 |
대칭키로 평문 암,복호화 (대칭키 외부 저장) (0) | 2021.05.09 |
네이밍 컨벤션 (0) | 2021.05.02 |