아파치(Apache)서버 구축 / HTTP 통신 실습

2017. 7. 21. 18:20WebHacking/Web




< 아파치 웹 서버 구축하기 >


1> 웹 서버 설

#yum -y install apache.i686

#service httpd start



1-1> 처음 아파치 웹 서버에 접속하면 아파치의 기본 권한을 가진다 ( 기본사용자 : apache )

 [root@localhost ~]# cat /etc/passwd | grep apache

 apache:x:48:48:Apache:/var/www:/sbin/nologin

1-2> 아파치 설정파일 ( /etc/httpd/conf/httpd.conf )

#vi /etc/httpd/conf/httpd.conf

 ... 

 292 DocumentRoot "/var/www/html"

 ...


아파치 웹 서버에 접속하는 것은 "/var/www/html" 디렉토리에 들어가는 것과 같다


[ 아피치 웹 서버 첫 접속화면 ]


2> 기본 페이지 생성

/etc/httpd/conf/httpd.conf 파일의 402번째 line : DirectoryIndex index.html index.html.var

/var/www/html 에 index.html을 만들자 => 기본 페이지 ( 아파치 웹 서버 시작 페이지 )

  [root@localhost html]# pwd

  /var/www/html

  [root@localhost html]# vi index.html


[ index.html 소스 ]


[ index.html 작성후 아파치 첫 페이지 ] 


3> 와이어샤크 분석


[ Wireshrak Capture ]

웹의 기본 동작

TCP동기화 => 요청 => 응답 => TCP세션종료

웹에서는 세션을 계속 유지하지 않는다 => 접속자가 많아질 경우에 웹의 과부하를 방지한다


4> HTTP메시지

- 유형 : 요청 or 응답 : 메시지 전송을 위해 일반적인 메시지 형식을 사용한다

- 구성

   Start-Line            - 요청라인 or 상태라인

   Message-Header

   CRLF ( 빈라인 )    - 헤더와 바디의 구분

   Message-Body    - Payload ( 요청메시지에는 없음 )


[ HTTP 요청 패킷 ]


 Request 패킷 분

 Hypertext Transfer Protocol

    GET / HTTP/1.1\r\n                  #[메서드] [페이지주소(/index.html)][웹버전]

Host: 192.168.6.123\r\n       #웹 페이지 호스트

User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)\r\n  #사용 브라우저

    If-Modified-Since: Mon, 31 Jul 2017 20:08:40 GMT\r\n

    If-None-Match: "80be2-5c-555a298cef83c"\r\n

    Connection: Keep-Alive\r\n

    Accept: text/html, application/xhtml+xml, */*\r\n # 웹 브라우저가 허용할 수 있는 

    Accept-Language: ko-KR\r\n                   # 자신이 허용할 수 있는 언어

    Accept-Encoding: gzip, deflate\r\n                         # 자신이 허용할 수 있는 인코딩 목록

    \r\n                                                                      # 헤더의 끝을 알리는 빈 라인

   


[ HTTP 응답 패킷 ]


Response패킷 분석

Hypertext Transfer Protocol

   HTTP/1.1 200 OK\r\n # 상태라인 ( [버전] [ 응답 ] )

        [Expert Info (Chat/Sequence): HTTP/1.1 200 OK\r\n]

        Request Version: HTTP/1.1

        Status Code: 200

        Response Phrase: OK

   Date: Mon, 31 Jul 2017 11:12:55 GMT\r\n

  *Server: Apache\r\n #서버 항목

    Access-Control-Allow-Credentials: true\r\n

    Access-Control-Allow-Origin: http://cafe.naver.com\r\n

    Access-Control-Allow-Methods: GET,POST\r\n

    Access-Control-Allow-Headers: X-Requested-With,Content-Type,charset\r\n

    Cache-Control: no-cache,no-store,must-revalidate\r\n

    Pragma: no-cache\r\n

    Expires: Wed, 31 Dec 1969 23:59:59 GMT\r\n

    P3P: CP="ALL CURa ADMa DEVa TAIa OUR BUS IND PHY ONL UNI PUR FIN COM NAV INT DEM CNT STA POL HEA PRE LOC OTC"\r\n

  Content-Length: 434\r\n #1전달하려는 데이터의 크기

    Connection: close\r\n                   

  Content-Type: text/plain;charset=utf-8\r\n         #2전달하려는 데이터의 타입

    \r\n                                                                      #헤더의 끝을 알려주는 빈 라인

                                                                                #바디에 메시지가 있을 때 필수적으로 있어야할 항목들이다

    [HTTP response 1/1]

    [Time since request: 0.015859000 seconds]

    [Request in frame: 44]

    File Data: 434 bytes

Line-based text data: text/plain



* 상태라인 ( Status-Line ) 상태코드 


1xx : 정보교환할 때 

2xx : 어떤 요청에 대한 성공상태

 

 200 : OK / 201 : Created / 202 : Acceoted

 

3xx : 요구에 대한 처리완료를 위해 추가적인 조치가 필요하다


 301 : 영구이동 / 302 : 임시 이동 / 304 : Not modified

 

4xx : 클라이언트 측 오류

 

 400 : Bad Request / 403 : Forbidden / 404 : Not Found /  


 5xx : 서버 측 오류


 500 : Server 내부 에러 / 503 : 서비스 사용할 수 없음