일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Google Cloud Platrofm
- 리버스 프록시
- Cloud Datastore
- Cloud Storage
- GKE
- Cloud Spanner
- AWS Certificate
- VPC
- Reverse Proxy
- 아마존웹서비스
- Google Cloud Platform
- Cloud Bigtable
- container
- kubernetes
- ansible
- 앤서블
- Amazon Web Service
- Solution Architect Certificate
- AWS
- Google Cloud
- AWS 자격증
- gcp
- Compute Engine
- AWS Database
- playbook
- Google Cloud Platorm
- Kubernetes Engine
- AWS Solution Architect
- Cloud SQL
- Solution Architect
- Today
- Total
sungwony
[웹프로그래밍]HTTP, GET, POST 이해하기 본문
HTTP(Hypertext Transfer Protocol)는 웹 브라우저와 웹 서버 사이의 데이터 통신 규칙이다. 애플리케이션 레벨의 프로토콜로 TCP/IP 위에서 작동한다. 우리가 웹 페이지의 링크를 클릭하면 웹 브라우저는 HTTP 요청 형식에 따라 웹 서버에 데이터를 보낸다. 웹 서버는 웹 브라우저가 보낸 데이터를 분석하여 요청 받은 일을 처리하여 응답한다.
HTTP 프로토콜은 단순히 HTML 페이지나 이미지 파일을 전송하는 차원을 넘어서 원격 컴퓨터에 로딩되어 잇는 함수나 객체의 메서드를 호출할 때도 사용된다. 특히 웹 애플리케이션을 개발하다 보면 SOAP이나 RESTful 이라는 용어를 만나게 되는데 이것은 클아이언트와 서버 사이에 서비스를 요청하고 응답하는 방식을 말한다.
*SOAP(Simple Object Access Protocol) : SOAP은 일반적으로 널리 알려진 HTTP, HTTPS, SMTP 등을 통해서 XML 기반의 메시지를 컴퓨터 네트워크 상에서 교환하는 프로토콜이다. SOAP은 웹 서비스에서 기본적인 메시지를 전달하는 기반이 된다.
(출처 : 위키피디아)
*RESTful(REpresentational State Transfer) : ROA(Resource Oriented Atchitecture)를 따르는 웹 서비스 아키텍처, URI와 HTTP 메소드를 이용해 객체화된 서비스에 접근하는 것. 직관적인 URI를 이용해서 오브젝트의 멤버를 추적하는 것처럼 리소스에 접근하여 HTTP 메소드를 이용해 그것을 조작하는 것.
HTTP 요청
웹 브라우저가 웹 서버에게 요청하는 형식
GET / HTTP / 1.1
Host : www.daum.net
Cache-Control : max-age=0
Accept: text/html, application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_0)
AppleWebkit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.101
Safari/537.36
Accept-Encoding: gzip,deflate,sdch
Accept-Language: ko-KR,ko;q=0.8,en-US;q=0.6,en;q=0.4
*요청라인(Request-Line)
요청메시지의 첫 라인은 메서드와 요청하느 자원, 프로토콜 버전으로 구성.
GET / HTTP/1.1
메서드 요청URL HTTP 버전
*요청 헤더
HTTP 요청 내용 중에 2~7번 라인은 서버가 요청을 처리할 때 참고하라고 클라이언트에서 웹 서버에게 알려주는 정보.
User-Agent : Mozilla/5.0 (...
헤더이름 헤더 값
헤더의 세 가지 종류는 요청이나 응답 모두에 적용할 수 있는 '일반 헤더(General-header)' 와 요청 또는 응답 둘 중 하나에만 적용할 수 있는 '요청 헤더 또는 응답 헤더(Request-header / Response-header)', 보내거나 받는 본문 데이터를 설명하는 '엔티티 헤더(Entity-header)'가 있다.
User-Agent는 클라이언트의 정보르 서버에게 알려주는 헤더. 웹 서버는 이 헤더를 분석하여 요청자의 OS와 브라우저를 구분.
공백 라인과 요청 데이터(message-body)
HTTP 요청 내용 중에서 마지막 라인은 요청 헤더의 끝을 표시하는 공백 라인이다. 웹 브라우저의 주소창에 URL을 입력하거나 웹 페이지에서 링크를 클릭하는 경우에는 GET 요청을 서버에 전송. GET 요청은 공백 라인으로 끝나다. 서버에 보낼 데이터가 있다면 URL 주소에 붙여서 보낸다.
그에 비해 로그인이나 게시글을 등록하는 경우는 보통 POST 요청을 전송. POST 요청은 공백 라인 다음에 서버에 보낼 데이터(message-body)가 온다.
HTTP 응답
웹 브라우저가 요청하면 웹 서버는 그에 대한 작업을 수행한 후 응답 데이터를 전송.
HTTP/1.1 200 OK
Date: Fri, 18 Oct 2013 11:36:25 GMT
X-UA-Compatible: IE=10
Expires: Sat, 01, Jan 1970 20:00:00 GMT
Pragma: no-cache
Cache-Control: no-cache, no-store, must-revalidate
P3P: CP="ALL DSP COR MON LAW IVDi HIS IVAi DELi SAMi OUR LEG PHY UNI
ONL DEM STA INT NAV PUR FIN OTC GOV"
Content-Type: text/html;charset=UTF-8
Content-Language: ko-KR
Vary: Accept-Encoding
Content-Encoding: gzip
X-UA-Device-Type: pc
Content-Length: 34770
Connection: close
<!DOCTYPE html>
<html lang="ko">
<head>
...
*상태 라인(Status-Line)
응답 메시지의 첫 라인은 응답 결과에 대한 상태 정보. 프로토콜 버전과 상태 코드, 설명으로 구성
HTTP/1.1 200 OK
HTTP버전 상태코드 상태설명
*응답 코드
200 : 요청이 성공적으로 처리
301 : 요청한 자원이 이동, 헤더 정보에 이동 위치를 표기하니 재 요청하라
304 : 클라이언트가 임시 보관한 응답결과와 다르지 않다
400 : 잘못된 요청
404 : 요청한 자원을 찾지 못함
500 : 서버 내부에서 오류가 발생
*응답 헤더
2~14번 라인은 응답 데이터를 처리할 떄 참고하라고 웹 브라우저에게 알려 주는 정보
Content-Type 헤더는 서버가 웹 브라우저에게 보내는 데이터의 형식. 웹 브라우저는 이 헤더의 값을 보고 데이터를 출력할지, 다운로드 창을 띄울지 아니면 외부 프로그램을 실행할지 결정. Content-Length는 웹 브라우저에게 보내는 데이터(message-body)의 크기(Byte)
*공백 라인과 응답 데이터(message-body)
HTTP 응답 내용 중에서 15번 라인은 메시지 헤더와 응답 데이터를 구분하기 위한 공백 라인. 16번 라인부터 응답 데이터.
GET 요청
*GET 요청의 특징
- 바이너리 및 대용량 데이터 전송 불가
- 요청라인과 헤드 필드의 최대 크기
HTTP 사양에는 제한사항 없음
대용량 URL로 인한 문제 발생 -> 웹 서버에 따라 최대 크기 제한
GET 요청은 웹 브라우저 주소창에 URL을 입력하거나, 링크를 클릭하는 경우, 입력 폼의 method 속상값이 get인 경우 발생
GET 요청의 데이터 전달 형식은 서버에 보낼 때 URI에 붙여 전송
GET 요청은 다른 사용자와 링크를 공유하기에 유리하지만 보안에 좋지 않고, 바이너리 데이터를 전송할 수 없다는 단점이 있다.
POST 요청
*POST 요청의 특징
입력값을 URL에 노출하지 않는다.
서버에 보내는 데이터는 공백 라인 다음에 '메시지 본문(Message Body)'이라 불리는 부분에 위치한다. 따라서 요청 결과를 공유할 수 없다.
파일 업로드
form 태그의 encrypte 속성을 'multipart/form-data'로 지정
*enctype 속성의 기본값은 'application/x-www-form-urlencoded'
<form action="FileUploadServlet" method="post" enctype="multipart/form-data">
사진 : <input type="file" name="photo"><br>
설명 : <textarea name="description" cp
<input type="submit" value="추가"><br>
</form>
HTTP 요청정보 확인
POST / HTTP/1.1
...
Content-Type : multipart/form-data; boundary=----WebkitFormBoundarylzaNhdxGzpZNljbo
...
----WebkitFormBoundarylzaNhdxGzpZNljbo
Content-Disposition: form-data; name="photo"; filename="IMG_0000.JPG"
Content-Type: image/jpeg;
바이너리 코드들...
바이너리 코드들...
바이너리 코드들...
----WebkitFormBoundarylzaNhdxGzpZNljbo
Content-Disposition: form-data; name="dexcription"
...
----WebkitFormBoundarylzaNhdxGzpZNljbo
'development > 웹프로그래밍' 카테고리의 다른 글
[웹프로그래밍]포워딩과 인클루딩 (0) | 2017.05.26 |
---|---|
[웹프로그래밍]JSP (0) | 2017.05.23 |
[웹프로그래밍] 필터 (0) | 2017.05.23 |
[웹프로그래밍] 리프래시 / 리다이렉트 (0) | 2017.05.23 |
[기타]HTTP 프로토콜 (0) | 2017.03.29 |