ftinx / webserv

http/1.1 multiplexing webserver
0 stars 0 forks source link

httpConfigFile 구현 #35

Closed hochan222 closed 3 years ago

hochan222 commented 3 years ago

httpConfigFile 구현

연관 이슈

Config hpp 요소 정하기 #4

jwon42 commented 3 years ago

ftinx config 파일 구성, 문법

  1. 구성

    • http block

      구성 성격 예시
      open bracket http {
      name element software_name ftinx
      version element software_version 0.1
      include element include mime.types
      root element root /Users/ftinx/Webserv/
      server block server {
      close bracket }
    • server block

      구성 성격 예시
      open bracket server {
      server name element server_name 42seoul_server
      listen element listen 8080
      default error page element default_error_page ./www/errors/default_error.html
      content length element content_length 2048
      location block location /test {
      close bracket }
    • location block

      구성 성격 예시
      open, path bracket, element location /test {
      limit except element limit_except GET POST
      root element root /Users/ftinx/Documents/Samples01/
      index element index index.htm index.html
      cgi element cgi .bin .cgi .php
      cgi path element cgi_path /Users/ftinx/Webserv/www-cgi/
      autoindex element autoindex on
      close bracket }
  2. 문법

    1. 공통

      1. element는 [KEY][SPACE(s)][VALUE] 의 형식을 따른다

      2. KEY가 중복되는 경우

        1. VALUE가 1개 올 수 있는 element라면 값을 덮어쓴다
        server {
            server_name first
            server_name second
        string server_name = second
        1. VALUE가 1개 이상 올 수 있는 element라면 값을 추가한다
        server {
            cgi .bin
            cgi .cgi .php
        vector<string> cgi;
           cgi[0] = .bin
           cgi[1] = .cgi
           cgi[2] = .php
      3. 정의되지 않은 KEY는 무시한다

      4. 중괄호({, })

        1. 왼쪽 중괄호와 오른쪽 중괄호 개수가 같아야 한다
        2. 한개의 라인에 여러개의 중괄호가 올 수 없다
        3. VALUE에는 중괄호가 포함될 수 없다
      5. 주석

        1. 라인의 첫 글자가 # 으로 시작한다면 해당 라인은 주석으로 간주하며 파싱하지 않는다
        http {
            software_name ftinx #프로그램명
            software_version 0.1 #버전
            include mime.types
            root /Users/ftinx/Webserv/
        #server block 시작
                server {
        1. 라인의 마지막에도 [SPACE(s)] 이후 주석을 사용할 수 있다
        server {
            server_name first #서버네임
            server_name listen #포트
      6. http block은 1개만 유효하다

    2. http block

      1. server block은 최소 1개 이상이어야 한다
    3. server block

      1. location block은 최소 1개 이상이어야 한다
    4. location block
  3. 유효성 검사

    1. 공통
      • [ ] config file path 인자 값이 비어있는 경우 default file 파싱
      • [x] KEY 중복 체크
      • [x] 중괄호 체크
      • [x] 왼쪽 중괄호와 오른쪽 중괄호 개수 체크
      • [x] 한개의 라인에 여러개의 중괄호 여부 체크
      • [x] 주석으로만 구성되었거나 비어있는 라인 체크
      • [x] http block 존재 여부 체크
      • [x] server block 존재 여부 체크
      • [x] location block 존재 여부 체크
    2. VALUE
  4. 샘플

    1. https://github.com/ftinx/webserv/issues/4#issuecomment-792237844
jwon42 commented 3 years ago

config 파일 파싱 기본 로직은 거의 작성완료 상태입니다만, iterator를 이용해서 좀 더 깔끔하게 구성할 수도 있을 것 같아서 고민중이에요. 기본적인 문법은 위 comment에 적었고 추가/수정할 사항 있으면 수정해주시면 됩니다.

앞으로 작업할 내역은 다음과 같습니다.

hochan222 commented 3 years ago

깔끔한 정리 감사합니댜..!

subject에 미기입시 default값에 대한 얘기도 명시돼있었는데 추가적으로 default값을 줄것과 값이 없으면 오류반환 할지 여부도 구분해야할 것 같습니다.

subject에 명시돼있는 default에 대한 문장은 아래와 같습니다.

hochan222 commented 3 years ago

외에는 너무 완벽한것 같습니댜! 와... 엄청 깔끔합니댜.. 빰빰

jwon42 commented 3 years ago

ftinx config file 구성, 문법

  1. 구성

    • http block

      구성 성격 자료형 기본값 필수 예시
      open bracket O http {
      name element string ftinx O software_name ftinx
      version element string 0.1 O software_version 0.1
      include element string O include mime.types
      root element string O root /Users/ftinx/Webserv/www
      server block vector\<server> O server {
      close bracket O }
    • server block

      구성 성격 자료형 기본값 필수 예시
      open bracket O server {
      server name element string O server_name first_server
      listen(port) element int O listen 8080
      defalut error page element string default_error_page /errors/default_error.html
      content length element int content_length 2048
      location block vector\<location> O location /test {
      close bracket O }
    • location block

      구성 성격 자료형 기본값 필수 예시
      open, path bracket, element string O location /test {
      limit expect element, multi vector\<method> O limit_except GET POST
      root element string root /Users/ftinx/Webserv/Sample2
      index element, multi vector\<string> index index.html index.htm index.php
      cgi element, multi vector\<string> cgi .bin .cgi .php
      cgi path element string root /Users/ftinx/Webserv/Sample2/cgi-bin
      limit body size element int 1048567 limit_body_size 100000
      autoindex element bool off autoindex on
      auth basic element, multi vector\<string> auth_basic jwon yechoi holee
      auth basic user file element string auth_basic_user_file .htpasswd
      close bracket O }
  2. 문법

    1. 공통

      1. http block은 1개만 유효하다

      2. element는 [KEY][SPACE(s)][VALUE]의 형식을 따른다

      3. KEY가 중복되는 경우

        1. VALUE가 1개만 올 수 있는 element 인 경우 값을 덮어쓴다
        server {
        server_name first
        server_name second
        string server_name = second
        1. VALUE가 1개 이상 올 수 있는 multi 성격의 element 인 경우 값을 추가한다
        server {
        cgi .bin
        cgi .cgi .php
        vector<string> cgi;
        cgi[0] = .bin
        cgi[1] = .cgi
        cgi[2] = .php
      4. 정의되지 않은 KEY는 무시한다

      5. 중괄호({, })

        1. 왼쪽 중괄호와 오른쪽 중괄호 개수가 같아야 한다
        2. 한개의 라인에 여러개의 중괄호가 올 수 없다
        3. VALUE에는 중괄호가 포함될 수 없다
      6. 주석

        1. 주석은 #comment의 형식을 따른다
        2. 라인의 첫 글자가 # 으로 시작한다면 해당 라인은 주석으로 간주하며 파싱하지 않는다
        #http block 시작
        http {
         software_name ftinx
         software_version 0.1
         include mime.types
         root /Users/ftinx/Webserv/
        #server block 시작
            server {
        1. 라인의 마지막에도 [SPACE(s)] 이후 주석을 사용할 수 있다
            server {
                server_name first #서버네임
                listen 8080 #포트
    2. http block

      1. server block은 최소 1개 이상이어야 한다
    3. server block

      1. location block은 최소 1개 이상이어야 한다
    4. location block

  3. 유효성 검사

    • [x] config file path 인자 값이 비어있는 경우 default file 파싱 -> 이게 필요할까?
    • [x] KEY 중복 체크
    • [x] 중괄호 체크
      • [x] 왼쪽 중괄호와 오른쪽 중괄호 개수 체크
      • [x] 한개의 라인에 여러개의 중괄호 여부 체크
    • [x] 주석으로만 구성되었거나 비어있는 라인 체크
    • [x] http block 존재 여부 체크
    • [x] server block 존재 여부 체크
    • [x] location block 존재 여부 체크
  4. 샘플

  5. 논의 필요

    1. content-length 관련 #35 (comment)
    2. default config 필요여부
    3. 기본값, 필수요소, 유효성체크 필요한 부분 있으면 코멘트 달아주세요