Server Side Includes

Server Side Includes (עברית: הכללות צד-שרת), או בראשי-תיבות SSI, היא שפה המפורשת על שרת דפי האינטרנט, שנועדה להפיכת דפי HTML סטטיים למעט יותר דינאמיים. מטרתה של SSI אינה להפוך דפי HTML ליישומי צד-שרת מלאים, כמו אלה הנכתבים ב-ASP, ב-PHP ובשפות דומות, אלא לאפשר הכללת מידע דינאמי מהשרת בתוך דפי ה-HTML.

לדפי HTML שמוכללים בהם תגי SSI יש בדרך-כלל סיומת shtml או shtm. בשרת IIS נהוגה גם הסיומת stm.

היסטוריה 

SSI הופיעה לראשונה בשרת NCSA HTTPd, שממנו התפתח שרת אפאצ'י. שרת IIS של מיקרוסופט מממש את SSI באופן דומה לזה של NCSA HTTPd על ידי רכיב ISAPI בשם Ssinc.dll. בשרת אפאצ'י קיימות הוראות SSI נוספות על אלו שב-NCSA HTTPd וב-IIS, המכונות "xSSI" על ידי קרן התוכנה אפאצ'י (כשהאות x היא קיצור של extended - הכללות צד שרת מורחבות). הן ממומשות כמודול הרחבה לשרת בשם mod_include.

תחביר הוראות SSI 

התחביר הכללי עבור הוראות SSI הוא:
<!-- # directive parameter1="value" parameter2="value" ... -->

הוראות SSI נמצאות בתוך הערות HTML, כך שאם הוראה מסוימת לא תעובד, או שהקובץ לא יפורש על ידי מפרש ה־SSI כלל, לא יפריעו הוראות ה־SSI לתצוגה בדפדפן.
כל הוראה מורכבת מהערת HTML, ובתוכה סימן סולמית (#), ומיד לאחריו סוג ההוראה, ואחריה רשימת הפרמטרים של ההוראה הכתובה בדומה לפרמטרים של תגי HTML - שם הפרמטר, סימן שווה, וערכו של הפרמטר.

שרת NCSA HTTPd 

תחביר SSI של שרת זה הוא התחביר הבסיסי, שעליו מתבססים שאר היישומים של SSI.

הוראות ה-SSI 

קיימות 6 הוראות SSI בשרת זה:

 הוראת includeהוראה זו מכלילה את הדף שניתן לה כפרמטר בתוך הדף שבו ההוראה נמצאת. זוהי ההוראה הנפוצה ביותר בשימוש ב-SSI, ועליה בעצם מבוסס שם הטכנולוגיה.ניתן להשתמש בהוראה זו יחד עם אחד משני פרמטרים:
 virtual - ולספק נתיב וירטואלי לקובץ:<!-- #include virtual="/virtual/path/to/file" -->
 file - ולספק נתיב יחסי לקובץ שנמצא תחת התיקייה הנוכחית:<!-- #include file="path/to/file" -->

 הוראת configהוראה זו יכולה לקבל שלושה פרמטרים:
 errmsg - קובע הודעת שגיאה שתישלח ללקוח במקרה של כשל בפירוש הוראות הכללות צד-השרת.
 timefmt - קובע את המבנה ודרך ההצגה של זמנים ותאריכים לשימוש עם הוראות echo ו-flastmode (ראו להלן).
 sizefmt - קובע את המבנה ודרך ההצגה של גודלי קבצים לשימוש עם הוראות echo ו-fsize (ראו להלן).

 הוראת echoהוראה זו מקבלת פרמטר אחד, בשם var, המכיל שם משתנה, ומציגה את ערכו. משתני הסביבה של SSI מפורטים למטה.

 הוראת fsizeהוראה זו מציגה את גדלו של הקובץ הניתן כפרמטר. גודל הקובץ יוצג בדרך שהוגדרה בהוראת ה-config (ראו למעלה). הפרמטרים זהים לאלו של הוראת include (ראו למעלה).

 הוראת flastmodהוראה זו מציגה את תאריך השינוי האחרון של הקובץ הניתן כפרמטר. התאריך יוצג באופן שהוגדר בהוראת ה-config (ראו למעלה). הפרמטרים זהים לאלו של הוראת include (ראו למעלה).

 הוראת execהוראה זו מבצעת פקודת מעטפת פקודה (מדובר על מערכות מבוססות יוניקס) או תוכנית CGI, ומציגה את המידע שמחזירה התוכנית או הפקודה.הפרמטרים האפשריים הם:
 cmd - במקרה זה תבצע מעטפת-הפקודה /bin/sh את מחרוזת הקלט, ותציג את התוצאה. ניתן להשתמש במשתני הסביבה של SSI בפקודה זו.
 cgi - פרמטר זה כולל נתיב וירטואלי לתוכנית CGI. במקרה זה התוכנית תבוצע, והקלט שלה יוכלל בדף הנוכחי (בדומה להוראת include).

משתני הסביבה של SSI 

המשתנים שניתן להשתמש בהם בהוראות השונות הם משתני הסביבה של CGI (כגון, SERVER_NAME, QUERY_STRING, REMOTE_ADDR וכו'), ומספר משתנים נוספים, הכוללים את שם הקובץ הנוכחי (DOCUMENT_NAME), התאריך המקומי של השרת, ועוד.

שרת IIS 

מימוש SSI של שרת IIS כולל את אותן 6 הוראות של שרת NCSA HTTPd, והתאימות כמעט מוחלטת. גם רשימת משתני הסביבה כמעט זהה.

בשרת IIS, הוראת exec יכולה לבצע גם דפי ASP ויישומי ISAPI, ולא רק יישומי CGI בעזרת הפרמטר cgi.

הוראת include ניתנת לשימוש גם בדפי ASP. למרות שטכנית מפרש ASP מבצע את ההכללה, ולא מנוע SSI, הדבר קשור בקשר הדוק ל־SSI, ומצוין בתיעוד שלה. הוראות SSI אחרות אינן פועלות בדפי ASP.

שרת אפאצ'י 

שרת אפאצ'י, גם הוא תומך בכל ההוראות הבסיסיות של שרת NCSA HTTPd, אך מרחיב אותן במספר אופנים, והופך את הגרסה שלו להכללות צד-השרת דומה יותר לשפת תכנות, ולא רק לכלי להכללת מידע (דפים אחרים או ערכי מאפיינים) בתוך דף נתון.

ניתן לחלק את ההרחבות של שרת אפאצ'י לשניים: שיפורים ותוספות בהוראות קיימות, והוראות חדשות. להלן פירוט:

 תוספות להוראות קיימות
 להוראת config ניתן להוסיף גם פרמטר בשם echomsg שמגדיר הודעה שתוצג ללקוח במקרה של ניסיון להציג משתנה שאינו קיים בעזרת הוראת echo.
 שימוש בפרמטר virtual של הוראת include מאפשר הכללת תסריטי CGI עם פרמטרים, ולא רק דפי HTML.

 הוראות חדשותשרת אפאצ'י מוסיף 6 הוראות חדשות על אלה שירש משרת NCSA HTTPd: הוראת printenv, הוראת set, והוראות if.
 הוראות printenv מדפיסה את כל המשתנים המוגדרים ואת ערכיהם. אין היא מקבלת פרמטרים.
 הוראת set מקבלת שני פרמטרים: var ו-value וקובעת את ערכו של המשתנה ששמו מוגדר ב-var לערך הכתוב ב-value. כלומר, השורה הבאה תקבע את ערכו של המשתנה name לערך joey.<!-- #set var="name" value="joey" -->
 הוראות ifאלו הן 4 הוראות שמשמשות יחד ליצירת מבני תנאי. הוראת if פותחת תנאי, הוראות elif מגדירות מקרים נוספים מעבר לתנאי הראשוני, הוראת else מגדירה מקרה שבו אף-אחד מהתנאים לא התקיים, והוראות endif סוגרת את מבנה התנאי. לדוגמה:<!-- #if expr='"$DOCUMENT_URI" = "/foo.shtml"' -->
file is foo.shtml
<!-- #elif expr='"$DOCUMENT_URI" = "/bar.shtml"' -->
file is bar.shtml
<!-- #elif expr='"$DOCUMENT_URI" = "/moo.shtml"' -->
file is moo.shtml
<!-- #else -->
I don't know which file is this
<!-- #endif -->קטע הקוד דלעיל יציג הודעה שונה בהתאם לשם הקובץ בו יושם.

קישורים חיצוניים 

 תיעוד עבור SSI בשרת NCSA HTTPd - באנגלית
 תיעוד עבור שרת IIS SSI עבור IIS 6.0 - באתר MSDN 
 עבור שרת אפאצ'י 2.4: מדריך היכרות עם SSI • המודול mod_include

טכנולוגיות צד-שרת