HTTP(HyperText Transfer Protocol)
텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜
클라이언트가 브라우저를 통해서 어떠한 서비스를 url을 통하거나 다른 것을 통해서 요청(request)를 하면 서버에서는 해당 요청사항에 맞는 결과를 찾아서 사용자에게 응답(reponse)하는 형태로 동작
- 요청 : client => server
- 응답 : server -> client
<특징>
- HTTP 메시지는 HTTP 서버와 HTTP 클라이언트에 의해 해석된다.
- TCP/IP를 이용하는 응용 프로토콜
- HTTP는 연결 상태를 유지하지 않는 비연결성 프로토콜(이런 단점을 해결하기 위해 cookie, session 등장)
- HTTP는 연결을 유지하지 않는 프로토콜이기 때문에 요청/응답 방식으로 동작
Request(요청)
클라이언트가 서버에게 연락하는 것
GET : 자료를 요청할 때 사용
- URL에 변수(데이터)를 포함시켜 요청
- 데이터를 Header(헤더)에 포함하여 전송한다
- URL에 데이터가 노출되어 보안에 취약하다
- 전송하는 길이에 제한이 있다
- 캐싱 할 수 있다
** 캐싱 : 한번 접근 후, 또 요청할 시 빠르게 접근하기 위해 레지스터에 데이터를 저장시켜 놓는 것
POST : 자료의 생성을 요청할 때 사용
- URL에 변수(데이터)를 노출하지 않고 요청한다
- 데이터를 Body(바디)에 포함시킨다
- URL에 데이터가 노출되지 않아서 기본 보안은 되어있다
- 전송하는 길이에 제한이 없다
- 캐싱 할 수 없다
PUT : 자료의 수정을 요청할 때 사용
DELETE : 자료의 삭제를 요청할 때 사용
GET https://ddangjiwon.tistory.com/ HTTP/1.1 // 시작줄
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) ... // 헤더
Upgrade-Insecure-Requests: 1
시작줄
- GET : HTTP Method
- https://ddangjiwon.tistory.com/ : 사이트 주소
- HTTP/1.1 : HTTP 버전
헤더(두 번째 줄부터)
두번째 줄부터는 헤더이며 요청에 대한 정보를 담고있다.
본문(헤더에서 한 줄 띄고)
본문은 요청을 할 때 함께 보낼 데이터를 담는 부분이다.
Response(응답)
서버가 요청에 대한 답변을 클라이언트에게 보내는 것
Status Code (상태 코드)
상태 코드에는 굉장히 많은 종류가 있다. 모두 숫자 세 자리로 이루어져 있으며,
아래와 같이 크게 다섯 부류로 나눌 수 있다.
1XX (조건부 응답) : 요청을 받았으며 작업을 계속한다.
2XX (성공) : 클라이언트가 요청한 동작을 수신하여 이해했고 승낙했으며 성공적으로 처리했음을 가리킨다.
3XX (리다이렉션 완료) : 클라이언트는 요청을 마치기 위해 추가 동작을 취해야 한다.
4XX (요청 오류) : 클라이언트에 오류가 있음을 나타낸다.
5XX (서버 오류) : 서버가 유효한 요청을 명백하게 수행하지 못했음을 나타낸다.
HTTP/1.1 200 OK // 시작줄
Connection: keep-alive // 헤더
Content-Encoding: gzip
Content-Length: 35653
Content-Type: text/html;
<!DOCTYPE html><html lang="ko" data-reactroot=""><head><title...
시작줄 (첫 줄)
첫 줄은 버전 상태코드 상태메시지로 구성되어 있다. 200은 성공적인 요청이었다는 뜻이다.
헤더 (두 번째 줄부터)
두 번째 줄부터는 헤더로 응답에 대한 정보를 담고 있다.
본문 (헤더 뒤부터)
응답에는 대부분의 경우 본문이 있다. 보통 데이터를 요청하고 응답 메시지에는 요청한 데이터를 담아서 보내주기 때문이다. 응답 메시지에 HTML이 담겨 있는데 이 HTML을 받아 브라우저가 화면에 렌더링한다.
참고 : https://ko.wikipedia.org/wiki/HTTP_%EC%83%81%ED%83%9C_%EC%BD%94%EB%93%9C
'CS' 카테고리의 다른 글
[JavaScript] AJAX에 대해 (0) | 2022.09.06 |
---|---|
JSP와 Servlet에 대해 (0) | 2022.09.06 |
JavaScript 기본 지식 (0) | 2022.09.02 |
CSS 기본 지식 (0) | 2022.07.05 |
REST와 JSON에 대해 (0) | 2022.05.13 |