[필기정리] Day83 - MIME, Proxy server, http 응답코드 등

Web/JSP

2020. 10. 26. 09:31

# HTTP 패킷 : 클라이언트가 서버로 요청 했을 때 보내는 데이터

- 헤더 : 메소드 방식 종류, 클라이언트 정보, 브라우저 정보, 접속할 URL 등의 클라이언트 정보 

- 바디 : 일반적으로는 비어있으나 특정 데이터를 담아 서버에 요청 보낼 수 있음

  

# Get vs Post : 서버 요청 메소드

- Get : URL 뒤에 클라이언트의 데이터를 붙여 보내는 방식

ex)

coderbear.tistory.com?id=coderbear&password=12341234

- Post : URL 뒤에 붙이지 않고 바디에 데이터를 넣어 보내는 방식

          바디의 데이터를 설명하는 Content-Type이라는 헤더 필드가 들어가고 어떤 데이터 타입인지 명시한다.

 

// 대표적인 컨텐츠 타입   

① application / x - www-form-urlencoded : 기본 설정값

② text / plain : 바디에 단순 txt를 넣는 방법

③ multipart / form-data : 파일전송 시 많이 쓰이는 방법

                                  바디의 데이터를 바이너리 데이터로 넣는다는 것을 알려준다.

 

// GET방식이 더 빠른 이유는 GET 방식의 요청이 캐싱(다시 요청 시 빠른 접근을 위해 데이터를 저장하는 것) 때문이다.

 

# JSP pageEncoding속성, charset

  JSP 페이지를 분석하는 과정에서 현재 페이지가 어떤 인코딩을 이용해서 작성되었는지 검사하여

  그 결과로 선택된 캐릭터셋을 이용해서 JSP페이지의 문자를 읽어오게 된다.

 

- 웹 컨테이너가 JSP 페이지를 읽어올 때 사용할 charset 결정하는 기본 과정

① 기본 인코딩을 파일을 읽은 후, pageEncoding을 찾는다.

pageEncoding을 찾으면 해당 속성을 사용하고, 없으면 contentType을 검색한다.

contentType을 찾으면 해당 속성의 charset을 사용한다.

④ 모두 해당되지 않은 경우 ISO-8859-1을 사용한다.

// 단, ①, ③의 경우 대상을 찾기 전에 ASCII 문자 외의 글자가 없을 때만 적용된다. 

 

// JSP페이지 구현 시 "EUC-KR", 응답결과는 "UTF=8" 하고 싶은 경우

<%@ page contentType="text/html; charset=utf-8" %>
<%@ pate pageEncoding="euc-kr" %>

 

// charset vs pageEncoding 차이점

<%@ page contentType="text/html"; charset="utf-8" pageEncoding="utf-8" %>

- charset : HTTP Client(웹브라우저)가 받아볼 페이지의 인코딩 방식 (HTTP 헤더에 기록되어 있음)

- pageEncoding : JSP파일(페이지)에 기록된 소스코드 자체의 인코딩 방식

 

ex)

<%@ page contentType="text/html"; charset="euc-kr" pageEncoding="utf-8" %>

- JSP 파일은 UTF-8 인코딩

  웹브라우저가 받을 때는 EUC-KR로 인코딩하여 전송된다.

 

# MIME(Multipurpose Internet Mail Extensions) : 전자우편을 위한 인터넷 표준 포맷

 

MIME

컴퓨터 사용 환경이 텍스트 기반에서 멀티미디어 환경으로 확대되면서 전자 메일 시스템도 새로운 형식의 데이터를 수용할 수 있도록 확장 작업이 이루어졌다. 특히 7비트 형식의 ASCII 코드에서

terms.naver.com

# 프락시서버(Proxy server) : 클라이언트와 서버 사이에서 데이터를 중계하는 역할을 하는 서버

 

프락시 서버

클라이언트와 서버 사이에서 데이터를 중계하는 역할을 하는 서버. 클라이언트(웹 브라우저)에서 어떤 인터넷 주소의 정보검색에 대한 요구를 받으면, 그 주소를 그 전에 읽어 저장한 장소에서

terms.naver.com

 

Q.

문제

ErrorTest.htm 파일을 만든다.

그 안에 input text를 두 개를 만들고 각각 숫자 두 개를 입력 받도록 하자.

그리고 나누기라는 버튼을 누르면 ErrorServlet 으로 이동을 해서 결과 값을 출력하도록 하자.

 

그런데 숫자 대신 글자가 입력이 되었을 때 에러코드를 510, “정수를 입력하지 않은 오류!”라고 출력하도록 하고,

제수가 0일때 에러코드 511, “부적합 연산 관련 오류!”라고 출력하도록 하자.

 

A.

- ErrorTest.html

<!DOCTYPE>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>
	<form method="GET" action="ErrorServlet">
		★ 나눗셈을 위해 두개의 수를 입력하세요! ★<br/>
		수1 : <input type="text" name="num1"/><br/>
		수2 : <input type="text" name="num2"/><br/>
		<input type="submit" value="나누기"/>
	</form>
</body>
</html>

- ErrorServlet.java

package com.superman.ex;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet("/ErrorServlet")
public class ErrorServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;    

    public ErrorServlet() {
        super();
    }

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String strNum1 = request.getParameter("num1");
		String strNum2 = request.getParameter("num2");
		
		int num1 = 0, num2 = 0;
		try {
			num1 = Integer.parseInt(strNum1);
			num2 = Integer.parseInt(strNum2);
		}catch(NumberFormatException e) {
			response.sendError(510, "정수를 입력하지 않은 오류!");
			return;
		}
		//나눗셈을 위해 정수 형태로 변환한다.
		
		int result = 0;//결과를 저장할 공간
		
		response.setContentType("text/html;charset=utf-8");
		//응답을 위한 MIME과 문자 셋 설정
		PrintWriter out = response.getWriter();
		
		try {
			result = num1 / num2;
		}catch(ArithmeticException e) {
			response.sendError(511, "부적합 연산 관련 오류!");
			return;
		}
		
		out.println("<html><body><center>");
		out.println(num1 + " / " + num2 + " = " + result);
		out.println("</center></body></html>");
		out.close();
	}
}

 

# HTTP 응답코드

 

HTTP 응답 메시지 구조 / 응답 코드

HTP 응답 메시지의 구조HTTP 응답 메시지의 구조는 아래의 세 가지로 구성되어 있다.- Response Line - HTTP - Header DataResponse LineResponse Line은 아래의 두 가지 항목으로 구성되어 있다. - version : http 프로토

newkong.egloos.com

+ https://namu.wiki/w/HTTP/%EC%9D%91%EB%8B%B5%20%EC%BD%94%EB%93%9C

 

HTTP/응답 코드 - 나무위키

정보 전달: 요청을 받았고, 작업을 진행 중이라는 의미이다. HTTP/1.0 이후 한동안 쓰이지 않아 서버도 클라이언트에 이 코드를 보내지 않았지만, 최근 101의 경우 WebSocket 등에서, 103의 경우 페이지

namu.wiki

① 100~199 : 요청에 대하여 작업을 하고 있을 때 응답 코드 
② 200~299 : 요청에 대하여 성공적으로 응답할 때 응답 코드 
③ 300~399 : URI에 대하여 데이터가 없을 때 응답 코드 위치 이동이 대표적
④ 400~499 : 클라이언트의 요청이 형식에 맞지 않거나 인증되지 않을 때 응답 코드 
⑤ 500~599 : 서버 에러로 인해 응답에 실패할 때 응답 코드

 

 

728x90