web server(webサーバ)簡単理解

5148 ワード

親愛なる旦那さん、一緒に頑張りましょう.
web serverとは
  • 定義
  • .inyhttpd(一つは500行しかないweb serverプログラム)
  • CGI(Common Gateway Interface)
  • 定義
    Webサーバの基本的な機能は、Web情報閲覧サービスを提供することです.HTTPプロトコル、HTML文書フォーマット及びURLをサポートするだけです.クライアントのウェブブラウザと協力します.Webサーバが主にサポートしているプロトコルはHTTPですので、通常HTTPサーバとWEBサーバは同じです.(HTTP以外のプロトコルをサポートしているウェブサーバがありますか?著者は確認したことがありません.)というのは同じことです.
    tinyhttpd
    ソースの位置:https://github.com/EZLippi/Tinyhttpd すべての関数の宣言:
    void accept_request
    (int);  
                  HTTP   
    void bad_request(int);  
                 
    void cat(int, FILE *);  
                socket    
    void cannot_execute(int);  
       cgi         
    void error_die(const char *);  
            perror    
    void execute_cgi(int, const char *, const char *, const char *);     cgi      ,       
    int get_line(int, char *, int);  
            
    void headers(int, const char *);  
      HTTP           
    void not_found(int);  
                    
    void serve_file(int, const char *);  
      cat             
    int startup(u_short *);  
        httpd   ,       ,    ,     
    void unimplemented(int);  
                HTTP       method     
    
    実行tinyhttpd(uuntu 16.04):
    1)chmod 444 htdocs/index.html
    2)Makefile        gcc -W -Wall -o httpd httpd.c -lpthread
    333   void *accept_request(void *);  
    4)tinyhttpd.c:
    void *accept_request(void* tclient)   {     
    int client = *(int *)tclient;   
    5497 (      )  if (pthread_create(&newthread , NULL, accept_request, (void*)&client_sock) != 0)
    6)make
    7)./httpd
    8)     localhost:port(  ./httpd        )    
    CGI(Common Gateway Interface)
    CGI:汎用ゲートウェイインターフェース(Common Gateway Interface)は、Webサーバホストが情報サービスを提供する標準インターフェースであり、CGIインターフェースを通じて、Webサーバがクライアントから提示された情報を取得し、サーバ端に渡すCGIプログラムを処理し、結果をクライアントに返す.http://blog.csdn.net/kaloha3/article/details/8548027紹介した比較詳細POSTとGETの違い:GET方式で受信したデータは長さ制限がありますが、POST方式で受信したデータは長さ制限がありません.また、GET方式でデータを送信し、URL形式で送信することができますが、POST方式で送信したデータは必ずFormで送信してください.URLコード:POSTかGET方式か、ゲスト端末ブラウザからサーバに送信されたデータは元のユーザデータではなく、元のユーザデータを経由します.URLコードの場合、CGIの環境変数Contentypeが設定されます.Contentype=appration/x-wn-urlencodeは、サーバが受信したのはURLで符号化されたHTMLフォーム変数データが含まれていることを表します.符号化の基本的なルールは、変数間に「&」で分割されます.変数とその対応する値は「=」で接続されます.スペース+」です.代わりに、保留されている制御文字は「%」接続で対応する16のASCIIコードを禁止します.特殊な意味を持つ文字も「%」を使います.対応する16進ASCIIコードの代わりに、スペースは不法文字、任意のプリント不可のASCII制御文字は不法文字です.したがって、CGIプログラムは標準入力や環境変数からクライアントデータを取得し、復号する必要があります.復号の過程はURLコードのインバータです.「&」と「=」によるとHTMLフォーム変数と特殊文字の置き換えを分離します.CGIデータ出力:CGIプログラムはどのように情報処理結果をクライアントに返しますか?これは実際にCGIフォーマット出力です.CGIプログラムでの標準出力stdoutは再定義されています.サーバ上での出力内容ではなく、クライアントブラウザにリダイレクトされています.これはCと同じです.やはりPerlやPythonとは無関係です.(1)CGIタイトルCGIのフォーマット出力内容は、タイトル/内容の形式にしなければなりません.CGI標準は、CGIプログラムで使用できる三つのHTTPタイトルを規定しています.タイトルは最初の行の出力を占めなければなりません.そして、後に空白の行を持たなければなりません.タイトルはContentcuutype(コンテンツタイプ)を記述します.その後出力するデータを設定するためのMIMEタイプLocation(アドレス)設定出力は別のドキュメント(URL)Sttus(状態)指定HTTP状態コードです.
    MIME:標準出力にウェブページの内容を送信する時はMIME形式規則を遵守します.任意出力の前にはMIMEタイプを定義するための出力内容(Content-type)行が必要です.そしてその後は空行が必要です.これを落としたら、サービスはエラー情報を返します.(他のタイトルと同じ)C言語:printf(print-type)「Contentt-type:text/html」「printf(Welcome)」;
    MIMEタイプはタイプ/サブタイプ(type/subtype)typeはいくつかの典型的なファイルフォーマットの一つを表しています.Text、Audio、Video、Image、Appplication、Muttipart、Message Subtypeは具体的に使用されるデータフォーマットを記述します.Apple/mswordマイクロソフトのWordファイルApple/octet streamは汎用的なバイナリファイル形式のAplication/Apple圧縮ファイルです./pdf Pdfファイル
    Location:Locationタイトルを使用して、一つのCGIは現在のユーザを同じサーバ上の別のプログラムにアクセスさせ、さらに別のURLにアクセスすることもできますが、サーバーは彼らに対する処理方法が違います.Locationを使用するフォーマットは、Location:Filename/URL、例えば、print「Location:/test.」;これはtestに直接リンクする効果と同じです.print"Location:http://www.chinaunix.com/このURLは現在のサーバを指すものではないので、ユーザブラウザは指定されたURLに直接リンクすることなく、ユーザに提示情報を出力する.
    参考記事:
    http://www.cnblogs.com/zhaoyl/archive/2012/10/10/2718575.html http://blog.csdn.net/jcjc918/article/details/42129311 http://blog.csdn.net/kaloha3/article/details/8548027 http://blog.csdn.net/sodawaterer/article/details/73289779