NCSA HTTPd מאפשר למשתמשים ליצור מסמכים המספקים מידע פשוט ללקוחות. למשל: תאריך נוכחי, תאריך העדכון האחרון של הקובץ וגודל או תאריך עדכון אחרון של קבצים אחרים.
בשימושים מתקדמים יותר, הוא מהווה ממשק רב-עוצמה ל- CGI ולתוכניות bin/sh/.
כאשר כופים על השרת לבצע חלוקה וניתוח מסמכים, יש בכך משום חרב פיפיות - הדבר מקשה על שרתים עמוסים לבצע חלוקה וניתוח קבצים בזמן ששולחים אותם, כמו כן הדבר יוצר סיכון בטיחותי כיוון שמאפשרים למשתמשים בעלי יכולת ממוצעת לבצע פקודות על השרת בתור "משתמשים" של השרת.
ניתן לצמצם את הסכנה ע"י ביטול האופציה של exec, אך הפגיעה בביצועים עדיין קיימת. לכן יש להתחשב בשיקולים אלה לפני הרצת SSI על השרת.
קודם כל, יש להחליט באילו ספריות לשים את התוספות.
אלה בדר"כ לא יהיו ספריות בית של משתמשים או ספריות שלא בוטחים בהן.
מתוך הספריות שלתוכן מאפשרים את הכנסת התוספות, יש להחליט אילו מהן מספיק בטוחות לכלול exec.
ביחס לספריות שבהן מאפשרים הרצה מלאה של התוספות, יש להשתמש בפקודת Options כדי להפעיל את האופציה includes.
כמו כן, ביחס לספריות שבהן מאפשרים הרצה חלקית של התוספות (ללא exec) יש להשתמש באופציה includesNOEXEC.
בספריות שבהן לא מאפשרים הרצת תוספות, יש להשתמש בפקודת Options ללא אופציות אלו.
כעת, יש להורות לשרת באיזו סיומת של שם הקובץ משתמשים עבור הקבצים המנותחים. קבצים אלה דומים מאוד ל- HTML אך הם אינם HTML ולכן לא מתייחסים אליהם באותו אופן.
בתוך השרת, השרת משתמש בסוג text/x-server-parsed-html : MIME כדי לזהות מסמכים מנותחים ואז, ימיר השרת קבצים אלה ל- HTML עבור הלקוח.
כדי להורות לשרת מהי הסיומת בה משתמשים עבור קבצים מנותחים, משתמשים בפקודת AddType, למשל:
AddType text/x-server-parsed-html .shtml .
פקודה זו גורמת לכך שכל קובץ המסתיים ב- shtml. יהפוך לקובץ מנותח.
לחילופין, במקרים בהם ניתן לאפשר פגיעה חמורה יותר בביצועים, ניתן לאפשר שכל הקבצים יעברו ניתוח, לפי הדוגמא הבאה:
AddType text/x-server-parsed-html .html
ואז השרת יבצע ניתוח לכל קבצי html. .
7.4 המרת INC SRV הישנים לפורמט SSI
יש להשתמש בתוכנה inc2shtml בתת הספריה support ב- HTTPd כדי לתרגם מסמכים מ - HTTPd 1.1 (או גרסה קודמת) לפורמט החדש.
השימוש פשוט: inc2shtml file.html >file.shtml.
כל הפקודות לשרת הן בצורת הערות SGML בתוך המסמך, וזאת למקרה שהמסמך אי פעם יגיע לידי הלקוח ללא ניתוח.
לכל הפקודה יש את הפורמט הבא:
<--"command tag1="value1" tag2="value2 #--!>.
כל פקודה מקבלת ארגומנטים שונים, רובן מקבלות תג אחד בכל פעם בלבד.
להלן פרוט הפקודות והתגים הנלווים אליהן:
config:
פקודה זו מפקחת על היבטים שונים בניתוח הקובץ. לפעולה זו יש שני תגים תקפים:
errmsg מפקח על ההודעה שנשלחת חזרה ללקוח אם מתרחשת שגיאה בעת הניתוח. כששגיאה מתרחשת, היא נרשמת ב- error log של השרת.
timefmt מעניק לשרת פורמט חדש עבור תאריכים. זוהי מחרוזת התואמת לקריאה לספריית strftime ברוב הגרסאות של UNIX.
sizefmt קובע את הפורמט להצגת גודל הקובץ (ב - KB או MB), האפשרויות הן: bytes או abbrev עבור גרסה מקוצרת (ב- KB או MB).
include:
פקודה זו תכניס את הטקסט של המסמך לתוך המסמך המחולק והמנותח. כל קובץ שהוכנס כפוף לבקרת הגישה הרגילה.
פקודה זו מקבלת שני תגים:
virtual - קובע נתיב וירטואלי למסמך על השרת. באופן זה ניתן לגשת לקובץ רגיל או למסמך מנותח אחר, אך לא ניתן לגשת ל- CGI script .
file קובע שם נתיב יחסי לספריה הנוכחית. אי אפשר להשתמש ב- /.. בשם נתיב זה, וכן אי אפשר להשתמש בנתיבים אבסולוטיים.
ניתן לשלוח מסמכים אחרים שעברו חלוקה וניתוח אך לא CGI scripts.
echo:
מדפיס את הערך של אחד ממשתני התוספת (מוגדר להלן). כל תאריך מודפס כפוף
ל - timefmt הקבוע באותה עת.
התג היחידי התקף לפקודה זו הוא var. ערכו הוא שם המשתנה שרוצים להדפיס.
fsize:
מדפיס את גודל הקובץ המצוין.
התגים התקפים לפעולה זו זהים לתגים עבור פקודת include. פורמט התוצאה של פקודה זו כפוף לפרמטר sizefmt של פקודת config.
flastmod :
מדפיס את תאריך העדכון האחרון של הקובץ המצויין, כפוף להעדפת הפורמט שנקבע בפרמטר timefmt של פקודת config.
התגים התקפים לפעולה זו זהים לתגים עבור פקודת include.
exec:
מריץ פקודת Shell נתונה או CGI script. חייבים להפעיל אותו לפני השימוש.
התגים התקפים לפעולה זו הם:
cmd - יריץ את המחרוזת הנתונה באמצעות /bin/sh. כל המשתנים המתוארים להלן מוגדרים וניתן להשתמש בהם בפקודה.
cgi - יריץ את הנתיב הוירטואלי ל- CGI script ויכלול את הפלט שלו. השרת אינו מבצע בדיקת שגיאות כדי להבטיח שה- script לא יצר פלט כגון GIF ולכן יש להזהר.
השרת יפרש כותרת בכתובת URL ויהפוך אותה לעוגן HTML.
ישנם כמה משתנים הזמינים למסמכים המחולקים והמנותחים.
בנוסף לקבוצת משתני CGI, המשתנים הבאים זמינים:
DOCUMENT_NAME - שם הקובץ הנוכחי.
DOCUMENT_URI - הנתיב הוירטואלי למסמך זה.
QUERY_STRING_UNESCAPED - גרסת unescaped לכל שאילתת חיפוש שהלקוח שלח, כשכל התווים המיוחדים תחומים ב- / .
DATE_LOCAL - התאריך הנוכחי באזור הזמן המקומי. כפוף לפרמטר timefmt בפקודת config.
DATE_GMT - כמו DATE_LOCAL, אבל לפי שעון גריניץ'.
LAST_MODIFIED - תאריך העדכון האחרון של המסמך הנוכחי. כפוף לפרמטר timefmt