티스토리 뷰
* 본 게시글은 <HTTP 완벽 가이드> 서적을 적극 참고하여 작성하였습니다
# URL 문법 상세
URL은 애플리케이션이 리소스에 접근할 수 있는 방법을 제공한다.
<스킴>://<사용자 이름>:<비밀번호>@<호스트>:<포트>/<경로>;<파라미터>?<질의>#<프래그먼트>
1. 스킴: 주어진 리소스에 어떻게 접근할때 어떤 프로토콜을 사용하는지 알려준다. (http, https, ftp...)
2. 사용자 이름, 비밀번호: 데이터 접근 전에 사용자 id/pw를 요구하는 경우에 사용(Ftp 서버 등..)
3. 호스트: 호스트 명(www.google.com) -> DNS 서버를 거쳐 IP주소로 변환되어 사용됨.
4. 포트: 서버가 열어놓은 네트워크 포트 (HTTP 기본포트 80번.)
5. 경로: 리소스가 서버의 어디에 있는지
6. 파라미터: 데이터에 접근할때 파라미터가 필요한 경우 사용
7. 질의: 이름=값&이름=값&.... (질의 컴포넌트)
8. 프래그먼트: 리소스가 여러개 쪼개져있을 때 어느 부분을 가리키는지 (HTML에서 #바로가기 생각하면 편함.)
# HTTP 메시지
HTTP는 요청 메시지, 응답 메시지로 구분된다
(스프링 서블릿 -> HttpRequestServlet / HttpResponseServlet)
인바운드 - 메시지가 원 서버로 향하는 것(서버 방향)
아웃바운드 - 모든 처리가 끝난 뒤 클라이언트로 돌라오는 것(클라이언트 방향)
모든 메시지는 다운스트림으로 흐른다.
(메시지 발송자는 수신자의 업스트림이기 때문에, 항상 메시지는 발송자 -> 수신자 방향으로만 이동한다)
<시작줄> 모든 HTTP 메시지는 시작줄로 시작한다
[요청 메시지의 형식] <메서드> <요청 URL> <HTTP 버전> <헤더> <엔티티 본문> |
[응답 메시지의 형식] <HTTP 버전> <상태코드> <사유 구절> <헤더> <엔티티 본문> |
<메서드> 클라이언트 측에서 서버가 리소스에 대해 수행해주길 바라는 동작 (GET, POST 등..)
<헤더> 헤더의 집합은 항상 빈줄로 끝나야 한다
# 메서드
GET: 서버에게 리소스를 달라고 요청하기 위해 주로 사용된다.
POST: 서버가 처리해야 할 데이터를 보낸다. 서버에 입력 데이터를 전송. (메시지 본문 있음)
(HTML Form, JSON 등..)
--
HEAD: 서버에서 어떤 문서에 대해 헤더만 가져온다 (본문은 가져오지 않는다)
PUT: 서버에 요청 메시지의 본문을 저장한다. 서버에 문서를 쓴다 (메시지 본문 있음)
TRACE: 메시지가 프록시를 거쳐 서버에 도달하는 과정을 추적한다
DELETE: 서버에서 문서를 제거한다
* 안전한 메서드 (HTTP 요청의 결과로 서버에 어떤 작용(리소스의 변경)도 없음을 의미) - GET, HEAD
# 상태 코드
101-101: 정보
200-206: 성공
300-305: 리다이렉션(Redirection)
400-415: 클라이언트 에러
500-505: 서버 에러
<대표 코드 예시>
200: OK, 성공
-
302: Found. Location 헤더에 있는 URL으로 다시 요청을 보낸다.
304: Not Modified. 최근에 리소스가 변경된게 없으므로 브라우저에 캐시된 페이지를 그대로 보여주세요.
(조건부 요청)
-
403: Forbiden. 의도적인 요청 거부.
404: Not Found, 서버가 요청한 URL의 리소스를 찾지 못함
-
500: Internal Server Error. 서버가 요청을 처리할 수 없게 만드는 에러를 만남.
502: Bad Gateway. 서버가 폭주하여 맛탱이가 감.
503: Service Unavaliable. 서비스 이용불가. (현재는 불가지만 언젠가는 이용가능함)
* Redirection의 작동 원리
리다이렉션은 클라이언트가 관심있어 하는 리소스 대신에 다른 대안 응답을 제공, 브라우저가 자동으로 새 위치로 이동하게끔 처리하는 방식.
3xx 상태코드와 Location 헤더를 응답으로 받으면 Location 헤더에 있는 URL으로 다시 GET 요청을 보내는 방식.
* 영구적 리다이렉션: 요청한 URL이 영구적으로 옮겨졌을때. (301, 308)
* 일시적 리다이렉션: 일시적인 변경, 다음 요청에는 기존 URL을 사용해야 함 (302, 307)
** 리다이렉트 요청 시 메시지 본문을 제거하거나(301, 302) / 유지할 수(307, 308) 있다.
** 기본값으로 (302, Found) 를 주로 사용한다
'웹' 카테고리의 다른 글
HTTP 박살내기 프로젝트 - 5 | 웹서버, 프록시, CDN (0) | 2021.09.20 |
---|---|
HTTP 박살내기 프로젝트 - 4 | TCP 커넥션 (0) | 2021.09.19 |
HTTP 박살내기 프로젝트 - 3 | HTTP 헤더 (0) | 2021.09.16 |
HTTP 박살내기 프로젝트 - 1 | 기본 개념잡기 (0) | 2021.09.14 |
웹개발 공부 - TCP/IP, IP주소, 서브넷 마스크 등.. (0) | 2021.08.04 |