개발기록/Java

HTTP란?

100'S 2022. 1. 13. 16:12

 HTTP ( HyperText Transfer Protocol ) 

Web 상에서 정보를 주고받을 수 있는 프로토콜이다.

클라이언트와 서버 사이에 이루어지는 요청(request) , 응답(response) 프로토콜이다.

HTTP를 통해 전달되는 자료는 http:로 시작하는 URL(인터넷 주소)로 조회할 수 있다.

 

 

메세지 포맷

클라이언트와 서버 사이의 소통은 평문 메시지로 이루어진다.

클라이언트는 서버로 요청메시지를 전달하며 서버는 응답메시지를 보낸다.

 

 


 

 HTTP 사용하여 제어 가능한 일반적인 기능 목록 

  • 캐시
    HTTP로 문서가 캐시되는 방식을 제어할 수 있습니다. 서버는 캐시 대상과 기간을 프록시와 클라이언트에 지시할 수 있고 클라이언트는 저장된 문서를 무시하라고 중간 캐시 프록시에게 지시할 수 있습니다.
  • origin 제약사항을 완화하기
    스누핑과 다른 프라이버시 침해를 막기 위해, 브라우저는 웹 사이트 간의 엄격한 분리를 강제합니다. 동일한 origin으로부터 온 페이지만이 웹 페이지의 전체 정보에 접근할 수 있죠. 그런 제약 사항은 서버에 부담이 되지만, HTTP 헤더를 통해 그것을 완화시킬 수 있습니다. 그런 덕분에 문서는 다른 도메인으로부터 전달된 정보를 패치워크할 수 있습니다(그렇게 하려면 어떤 경우에 보안과 관련된 사항이 있을 수도 있습니다).
  • 인증
    어떤 페이지들은 보호되어 오로지 특정 사용자만이 그것에 접근할 수도 있습니다. 기본 인증은 HTTP를 통해 WWW-Authenticate (en-US) 또는 유사한 헤더를 사용해 제공되거나, HTTP 쿠키를 사용해 특정 세션을 설정하여 이루어질 수도 있습니다.
  • 프록시와 터널링 (en-US)
    서버 혹은 클라이언트 혹은 그 둘 모두는 종종 인트라넷에 위치하며 다른 개체들에게 그들의 실제 주소를 숨기기도 합니다. HTTP 요청은 네트워크 장벽을 가로지르기 위해 프록시를 통해 나가게 되죠. 모든 프록시가 HTTP 프록시는 아닙니다. 예를 들면 SOCKS 프로토콜은 좀 더 저수준에서 동작합니다. FTP와 같은 다른 프로토콜도 이 프록시를 통해 처리될 수 있습니다.
  • 세션
    쿠키 사용은 서버 상태를 요청과 연결하도록 해줍니다. 이것은 HTTP가 기본적으로 상태없는 프로토콜임에도 세션을 만들어주는 계기가 됩니다. 이것은 e-커머스 쇼핑 바구니를 위해서 유용할 뿐만 아니라 사용자 구성을 허용하는 모든 사이트에 대해서 유용합니다.

 

 

클라이언트 요청

GET /restapi/v1.0 HTTP/1.1
Accept: application/json
Authorization: Bearer UExBMDFUMDRQV1MwMnzpdvtYYNWMSJ7CL8h0zM6q6a9ntw

 

 

서버 응답

HTTP/1.1 200 OK
Date: Mon, 23 May 2005 22:38:34 GMT
Content-Type: text/html; charset=UTF-8
Content-Encoding: UTF-8
Content-Length: 138
Last-Modified: Wed, 08 Jan 2003 23:11:55 GMT
Server: Apache/1.3.3.7 (Unix) (Red-Hat/Linux)
ETag: "3f80f-1b6-3e1cb03b"
Accept-Ranges: bytes
Connection: close

<html>
<head>
  <title>An Example Page</title>
</head>
<body>
  Hello World, this is a very simple HTML document.
</body>
</html>

 


 HTTP 상태 코드 

  • 1xx (정보): 요청을 받았으며 프로세스를 계속한다
  • 2xx (성공): 요청을 성공적으로 받았으며 인식했고 수용하였다
  • 3xx (리다이렉션): 요청 완료를 위해 추가 작업 조치가 필요하다
  • 4xx (클라이언트 오류): 요청의 문법이 잘못되었거나 요청을 처리할 수 없다
  • 5xx (서버 오류): 서버가 명백히 유효한 요청에 대해 충족을 실패했다

 


 HTTP 요청 방식 

 

1) GET

/url? username=hello&age=20

메시지 바디 없이, URL의 쿼리 파라미터에 데이터를 포함해서 전달

Ex) 검색, 필터, 페이징에서 많이 사용

 

2) POST

www에 사용되는, HTTP가 지원하는 요청 방식이다.

설계상 POST 요청 방식은  web Server가 요청 메시지의 본문에 감싸있는 데이터를 받아들일 것을 요청하며

이러한 정보를 저장할 가능성이 높다.

파일을 업로드할 때나 완성된 web form을 제출할 때 종종 사용되는데, HTTP GET요청 방식은 서버로부터 정보를 검색한다.

GET 요청의 일부로서 일부 데이터는 URL의 쿼리 스트링을 통해 전달되며 검색 용어, 날짜 범위, 또 쿼리를 정의하는 기타 정보를 지정한다.

POST 요청의 일부로서, 요청 메시지의 본문에다 임의의 유형의 임의의 양의 데이터를 담아 서버로 전송할 수 있다. POST 요청의 헤더필드는 보통 메시지 본문의 인터넷 미디어 타입(application/x-www-form-urlencoded)을 지시한다.

 

 

application/x-www-form-urlencoded

: 웹 브라우저가  web Form 요소로부터 POST 요청을 보낼 때 기본 인터넷 미디어 타입

잠재적으로 중복 키가 포함된 키-값 쌍을 인코딩하기 위한 포맷이다. 각각의 키-값 쌍은 '&' 문자로 구분되며 각 키는 '=' 문자의 값과 구분된다. 키와 값들은 둘 다 공백을 '+' 문자로 대체하며 영숫자가 아닌 그 밖의 모든 문자는 퍼센트 인코딩 처리한다.

 

key-값

Name: Gareth Wylie
Age: 24
Formula: a + b == 13%!

 

인코딩

Name=Gareth+Wylie&Age=24&Formula=a+%2B+b+%3D%3D+13%25%21

 

 

 

3) message-body

HTTP  API에서 주로 사용, JSON, XML, TEXT

데이터 형식은 주로 JSON 사용 (POST, PUT, PATCH)

GET과 POST는 쿼리 파라미터 형식으로 전달하기 때문에 request.getParameter()로 조회 가능

 

 

 

 

 

 

 

 

 

 

 

참조

'개발기록 > Java' 카테고리의 다른 글

서블릿 리스너 ( Servlet Listner)  (0) 2022.01.13
Filter와 Wrapper  (0) 2022.01.13
HttpServletRequest, HttpServletResponse 개념 이해  (0) 2022.01.13
Servlet(서블릿) + 예제  (0) 2022.01.12
web Server  (0) 2022.01.12