본문 바로가기
교재 실습/자바 웹 개발 워크북

8. HTTP 프로토콜의 이해 (2)

by Jint 2022. 1. 3.

클라이언트와 서버가 주고받는 데이터 형식만 안다면 누구나 클라이언트나 서버를 개발할 수 있다. 간단한 HTTP 클라이언트를 만들었다.

package lesson02.client;

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.PrintStream;
import java.net.Socket;

public class SimpleHttpClient {

	public static void main(String[] args) throws Exception {
		
		//1. 소켓 및 입출력 스트림 준비
		//Socket socket = new Socket("www.hani.co.kr", 80);
		Socket socket = new Socket("www.daum.net", 80); //웹 서버 기본 포트번호 : 80
		BufferedReader in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
		PrintStream out = new PrintStream(socket.getOutputStream());

		//2. 요청(request)라인 출력
		out.println("GET / HTTP/1.1"); //웹 서버 루트폴더에 있는 기본문서(/)

		//3. 헤더정보 출력
		//out.println("Host: www.hani.co.kr");
		out.println("Host: www.daum.net"); //접속하려는 웹 서버 주소
		out.println("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");
		
		//4. 공백라인 출력
		out.println(); //요청의 끝 표시
		
		//5. 응답(response) 내용 출력
		String line = null;
		while((line = in.readLine()) != null) {//서버로부터 받은 데이터 line 단위로 표시
			System.out.println(line);
		}

		in.close();
		out.close();
		socket.close();
		
	}

}

SimpleHttpClient를 실행하면 '다음'의 웹 서버로부터 받은 데이터가 출력된다. 그런데..

주석한 내용이 출력됨

주석을 한 '한겨레'의 웹 서버로부터 받은 내용이 출력이 되었다. 분명히 주석처리를 하였음에도 불구하고 계속 위 내용이 출력되었다. 이 문제를 해결하기 위해서

해당하는 프로젝트를 Clean

이클립스의 Project 탭에서 web02 프로젝트를 Clean을 하니 정상적으로 동작하였다.

올바르게 출력됨

출력된 내용들을 보면 HTTP 응답 상태 코드가 301, 302이다. 301(Moved Permanently)은 이름처럼 요청된 리소스가 Location 헤더에서 제공한 URL로 영구적으로 이동되었다는 것이고 302(Moved Temporarily)는 요청된 리소스가 임시적으로 Location 헤더에서 제공한 URL로 이동되었다는 것이다.

 

이후 콘솔창의 출력 크기 제한을 없앴다.

콘솔창 출력 크기 제한 해제

 

참고도서 : https://freelec.co.kr/book/1674/

 

[열혈강의] 자바 웹 개발 워크북

[열혈강의] 자바 웹 개발 워크북

freelec.co.kr

댓글