티스토리 뷰

* 본 게시글은 <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) 를 주로 사용한다

댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2025/01   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함