Note 2. W5500-EVB를 위한 HTTP Server Library 이해

W5500-EVB Web Server (= HTTP Server)의 기본 동작 


일반적인 Web server와 Web browser 간 동작은 다음과 같이 이루어진다.

  1. Web browser (사용자 Webpage) 에서 HTTP 요청 (HTTP request) 발생
  2. Web server는 사용자 요청에 따라 작업을 수행하고, 응답할 결과 준비
  3. Web server가 작업 수행 결과에 따라 HTTP 응답 (HTTP response) 전송
  4. 다양한 사용자 요청에 따라 위 1~3 과정 반복

하지만 일반적인 웹 서버와는 달리, Embedded device에서 동작하는 웹 서버는 device 및 device의 I/O를 제어하고 모니터링 하는데에 주 목적이 있다. 때문에 W5500-EVB에 탑재된 웹 서버는 CGI handler와 I/O 제어부가 추가되어 있고, MCU의 Code flash memory 내에 웹 페이지를 삽입하여 웹 서버 기능의 동작 검증을 가능하도록 구현되어 있다.

웹 서버는 크게 다음과 같은 프로세스로 구성되어 있으며, Web browser (HTTP client)의 매 요청마다 다음 flowchart에 따라 동작한다.

  • HTTP Request Parser
    • 사용자의 요청 (HTTP request) 해석
  • Web Content (web resources) Loader
    • 사용자가 요청한 web content를 지정된 Web content storage (e.g., code flash memory, SD card) 에서 찾고, 찾은 결과에 따른 응답 준비
  • HTTP Response Sender
    • Web server의 처리 결과에 따라 준비된 응답 (HTTP response) 전송
    • 요청의 처리에 따라 여러 가지 결과 (HTTP response code) 로 응답
      • e.g., 처리 성공 : HTTP/1.1 200 OK
      • e.g., 요청 페이지가 없는 경우 : HTTP/1.1 404 Not Found
  • CGI Handler
    • 웹을 통해 요청된 H/W 제어 등의 ‘사용자 요청’을 처리
    • I/O의 상태 및 값 설정이나 현재 입력값 등을 얻을 때 CGI를 이용

wiznet_httpserver_flowchart_v1

W5500-EVB Web Server Library의 CGI


W5500-EVB용 Web server library는 IO의 제어와 모니터링 등에 CGI를 사용한다.

w5500-evb_cgi

CGI는 Common Gateway Interface의 약자로, 웹을 통해 클라이언트에서 서버의 프로그램을 실행하고 그 결과를 얻는 방법이다. CGI는 특정 언어나 플랫폼에 의존하지 않으며, 웹 브라우저를 통해 서버의 프로그램을 실행하기 위한 약속이므로 웹 페이지와 서버 간의 설정과 규정만 만족하면 된다.

WIZnet HTTP server library의 CGI는 GET / POST method를 이용한 ‘파일명 + 확장자 .cgi’ 에 대한 요청 (HTTP Request) 으로 구성되며, 다음의 각각 HTTP method에 따라 동작한다.

GET

  • 웹 서버의 값을 얻기 위한 방법
  • JavaScript callback function parameter의 형태로 전달
    • JSON과 동일한 구조
    • 웹 서버 측에서 웹 페이지의 JavaScript 함수명과 동일한 이름을 가진 묶음의 데이터를 전달해야 함
    • e.g., 웹 페이지의 JavaScript 함수명이 function DioCallback 인 경우, 웹 서버는 DioCallback({“dio_s”:[{“v”:“1”}, {“v”:“0”}], “dio_d”:[{“v”:“1”}, {“v”:“0”}]}) 데이터 형태로 전달해야 처리 가능

POST

  • 웹 서버에 변경된 값을 전달하기 위한 방법
  • Web form element를 통한 값 전달
  • Key-value pair의 형태로 표현. ‘&’로 각각 pair가 구분되며 한 pair의 key에 대한 value는 ‘=’로 표시
    • e.g., ‘Pin : 1, Val : 1’ ⇒ ‘Pin=1&Val=1’

임베디드 웹 서버의 제한적인 리소스 안에서 효율적인 데이터 처리를 위해 각 요청은 AJAX로 처리한다. 이를 통해 웹 브라우저의 페이지 이동(Web page reload) 없이 변경된 서버의 값 표현이 가능하며 수신 데이터의 양이 적어지기 때문에 웹 서버의 데이터 처리에 대한 부하를 줄일 수 있다.

Advertisements

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

Google+ photo

Google+의 계정을 사용하여 댓글을 남깁니다. 로그아웃 / 변경 )

%s에 연결하는 중