PicoLisp의 웹 응용 프로그램 프로그래밍:작동 원리

웹 응용 프로그램 자습서로 돌아갑니다.오늘은 PicoLisp 해석기가 스크립트를 브라우저가 표시할 수 있는 내용으로 변환하는 방법에 대해 논의합니다.
이를 이해하기 위해서는 HTTP 프로토콜에 대한 기본 지식이 필요합니다.우리 시작합시다!

브라우저는 무엇을 기대합니까?


이전 글에서 언급한 바와 같이 웹 브라우저는 어떤 PicoLisp도 모른다.따라서 PicoLisp 코드를 브라우저가 이해할 수 있는 형식XHTML으로 바꾸는 방법이 필요합니다.첫 번째 단계는 웹 응용 프로그램 (예를 들어 웹 사이트) 을 열 때 실제로 무슨 일이 일어났는지 이해하기 위한 것이다.
우선, 브라우저 ("클라이언트") 에서 어떤 페이지를 방문하고 싶은지 알려 주어야 합니다.그런 다음 클라이언트는 PicoLisp 서버에 표시할 데이터가 포함된 응답을 보내도록 요청합니다.클라이언트가 받은 것은 일부 메타데이터를 포함하는 제목과 실제 HTML 문서입니다.

일반적인 웹 브라우저에서는 사용자에게 완전히 투명합니다. 우리는 보이는 페이지만 볼 수 있습니다.따라서 재미를 위해 명령행 도구curl를 사용하여 페이지를 보여 줍니다.우리도 제목에 관심이 있기 때문에 -i 로고를 추가하겠습니다.
$ curl -i https://picolisp.com/wiki/?community

HTTP/1.1 200 OK
Server: PicoLisp
Date: Thu, 23 Sep 2021 09:02:14 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked

<!DOCTYPE html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width"/>
<title>PicoLisp Wiki: community</title>
<base href="https://picolisp.com/wiki/"/>
<link rel="stylesheet" type="text/css" href="https://fonts.googleapis.com/css?family=Share+Tech+Mono"/>
  [.......]
<link rel="stylesheet" type="text/css" href="https://picolisp.com/wiki/wiki/wiki.css"/>
<script type="text/javascript" src="https://picolisp.com/wiki/@lib/form.js"></script>
</head>
<body>
<script type="text/javascript">onload=ping(7)</script>
  [.......]
</body>
</html>
$ 터미널에서 실행되는 명령을 나타냅니다.그것은 타자를 칠 필요가 없다.
여기서 우리는 브라우저가 서버에 대한 기대를 볼 수 있다.기본적으로 우리는 두 가지 부분이 있는데 그것이 바로 제목과 HTML 문서이다.이 두 개 좀 봅시다.
헤딩
헤더는 요청의 성공 여부(상태 코드200 OK와 어떤 문서Content-Type: xhtml; charset=utf-8를 보냈는지 등 모든 관련 메타데이터를 포함한다.제목에는 일반적으로 cookies, 이전에 방문한 페이지referrer, and many more 등 다른 내용도 포함됩니다.
우리의 예에서는 다음 다섯 줄만 있다.
HTTP/1.1 200 OK
Server: PicoLisp
Date: Thu, 23 Sep 2021 09:02:14 GMT
Content-Type: text/html; charset=utf-8
Transfer-Encoding: chunked
HTML 문서
제목 아래에서 실제 HTML 문서를 찾을 수 있습니다. <!DOCTYPE HTML> 성명부터 시작합니다.실제 내용은 <html> 라벨에 포장되어 있으며 귀하가 일반적으로 기대하는 정보를 포함합니다. 예를 들어 <head>, <title> 등입니다.
HTML 응답에는 표시할 실제 내용이 포함되어 있습니다.최소 유효 응답에는 다음과 같은 구조가 있습니다.
<!DOCTYPE HTML>
<html>
  <head>
    <title>Here comes the title</title>
  </head>
  <body>
   Here comes the body
  </body>
</html>

이제 피콜립으로 돌아가자!


이제 브라우저의 기대치를 알았으니 가장 간단한 예를 보여 드리겠습니다.
우리가 해야 할 첫 번째 일은 pil +로 REPL을 시작하고 두 개의 라이브러리xhtml.lhttp.l를 포함한다.
$ pil +
: (load "@lib/xhtml.l" "@lib/http.l")
-> http404
이외에도 xhtml.l-라이브러리에는 html 함수도 포함되어 있는데 이것은 우리가 처음 탐색할 때 필요로 하는 것이다.http.l 라이브러리는 제목을 만드는 함수를 포함합니다.
이제 "Hello World"예시를 PicoLisp documentation에서 REPL로 복사해서 무슨 일이 일어날지 봅시다.
: (html 0 "Hello" NIL NIL "Hello World!")
우리가 얻은 결과는:
HTTP/1.0 200 OK
Server: PicoLisp
Date: Thu, 23 Sep 2021 09:55:34 GMT
Cache-Control: max-age=0
Cache-Control: private, no-store, no-cache
Content-Type: text/html; charset=utf-8

<!DOCTYPE html>
<html lang="en">
<head>
<meta name="viewport" content="width=device-width"/>
<title>Hello</title>
</head>
<body>
Hello World!</body>
</html>
우리는 서버'PicoLisp'에서'Hello'라는 제목의 응답 헤더를 보았는데 본문에는'Hello World'라는 텍스트가 있다.
즉, 함수는 헤더와 컨텐트를 포함한 전체 HTTP 응답으로 매개변수를 변환하기만 하면 됩니다.

html 함수

html-함수의 매개 변수를 빠르게 봅시다.REPL에 html를 입력하면 다음과 같은 이점을 얻을 수 있습니다check the source code of the html -function.
: (vi 'html)
이것은 vi 'html 을 열 것입니다. 이것은vi 편집기의 하위 집합입니다.우리는 단지 이 논점들을 보고 싶을 뿐이다.
### XHTML output ###
(de html (Upd Ttl Css ATTR . Prg)
       ....
vip를 사용하여 vip를 종료할 수 있습니다.추가 정보read here.
보시다시피 :q 함수는 다섯 개의 매개 변수를 포함합니다: html, Upd, Ttl, Css, ATTRPrg.한번 봅시다.
: (html 0 "Hello" NIL NIL "Hello World!")

Upd: A max-age value for cache-control (in seconds, zero means "no-cache"). You might pass a higher value for pages that change seldom, or NIL for no cache-control at all.


우리의 예에서 우리는 0를 사용했는데 이것은 제목의 Cache-Control: max-age=0 줄을 초래했다.

Ttl: The page title.


두 번째 매개변수로 Hello를 사용하고 응답하는 HTML 섹션<title>Hello</title>을 가져옵니다.

Css: A CSS-File name. Pass NIL if you do not want to use any CSS-File, or a list of file names if you want to give more than one CSS-File.


우리의 예에서 우리는 NIL를 사용했다. 왜냐하면 우리의 기본 예는 CSS가 필요하지 않기 때문이다.

ATTR: A CSS style attribute specification. It will be passed to the body tag.


여기서도 우리는 NIL를 통과했다. 왜냐하면 우리는 아직 어떤 CSS도 사용하지 않았기 때문이다.잠시 후 우리는 이 점으로 돌아갈 것이다.

Prg: An arbitrary number of expressions, which form the body of the resulting page.


여기서 우리는'헬로 월드'를 통과해서 받았다<body>Hello World!</body>.

마무리


요컨대, html 함수는 그에게 전달된 매개 변수로 헤더와 내용을 만들어서 완전히 효과적인 HTTP 응답을 만든다.이제 PicoLisp 해석기가 PicoLisp 스크립트를 HTTP 응답으로 어떻게 변환하는지 기본적으로 알아야 한다.
다음 글은 서버를 설정하고 최소한의'Hello World'예시를 보여 줍니다.

출처


  • https://software-lab.de/doc/app.html
  • 좋은 웹페이지 즐겨찾기