בתקשורת נתונים, **צד שרת** (באנגלית: **server-side**) הוא מונח המתייחס לפעולות המבוצעות על ידי השרת במערכת שרת–לקוח.

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

פעולות צד שרת כוללות גם עיבוד ואחסון נתונים המגיעים מצד הלקוח לשרת. דוגמה לעיבוד המתבצע בצד השרת היא יצירה ועדכון של בסיס הנתונים MySQL.

תכנות צד שרת
------------

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

* PHP - שפת הצד שרת הנפוצה ביותר, משמשת גם לקוד פתוח ותוכנות.
* ASP.NET - הגרסה העדכנית ביותר של Active Server Pages או (ASP בקיצור), תגובתה של מיקרוסופט ל-PHP.
* JSP - כמו Java לצד שרת.
* CSHTML - שפת תכנות מבית מיקרוסופט המשלבת בין C# ו-HTML.

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

תכנות צד שרת משמש לעיתים קרובות על מנת לספק ממשק המותאם למשתמש. התוכנות מאפשרות לאסוף מאפיינים הרלוונטיים לצורך מתן תשובה מותאמת אישית ללקוח, המתבססת על המאפיינים של הלקוח, הבקשות שלו, ההרשאות שלו וכו'. הקוד שנמצא בצד השרת לא חשוף ללקוח כלל, בשונה מהקוד בצד הלקוח. חיסרון בתכנות צד שרת הוא הצורך בשליחת בקשות נוספות על גבי הרשת בכל פעם שיש לעדכן את הנתונים המוצגים למשתמש או להציג מידע חדש דרך הדפדפן. בקשות אלו העוברות על גבי הרשת עלולות להאט את ממשק המשתמש, להעמיס על השרת ולמנוע מהמשתמש להמשיך לקבל מידע אם הוא נותק מהשרת. כאשר השרת פועל על פי אחד מהפרוטוקולים המוכרים יותר, כמו HTTP, FTP, המשתמשים יכולים להפעיל מספר תוכניות צד לקוח בו זמנית (רוב דפדפני האינטרנט הנפוצים יכולים להשתמש בשני הפרוטוקולים הנ"ל כדי לתקשר עם צד השרת). במקרים מיוחדים, מתכנתים יכולים לתכנת בעצמם את צד השרת, צד הלקוח, ופרוטוקול התקשורת ביניהם, ואלו יוכלו לשמש אך ורק כדי לתקשר האחד עם השני.

### הסבר

בימי האינטרנט המוקדמים, תכנות צד שרת בוצע כמעט אך ורק על ידי שילוב של תוכנית ב-C, סקריפט ב-Perl וסקריפט shell באמצעות Common Gateway Interface. מערכת ההפעלה הייתה מריצה את הסקריפטים הללו והתוצאות היו מתקבלות משרת האינטרנט. אתרים דינמיים משתמשים לפעמים ביישומי שרתי אינטרנט מותאמים, כמו ספריית "Base HTTP Server" של פייתון. במהלך עיצוב תוכנה הכולל שימוש בטכניקות תכנות דינמי מבוסס אינטרנט, כמו ASP או PHP, למפתח חייבת להיות הבנה עמוקה של ההפרדה הלוגית, הזמנית והפיזית בין הלקוח לשרת. כאשר המשתמש מבצע פעולה שצריכה להגיע לשרת ולהתבצע בו, למשל, מפתח ב-ASP חייב לגרום לדפדפן בצד הלקוח באופן מפורש ליצור בקשה לשרת. יצירת קשרים כאלו בין הלקוח לשרת מגדילה את זמן הפיתוח ועלולה לגרום לקוד לא קריא. תוכנת צד שרת פועלת על השרת בלבד. אין כל פעולה של התוכנה על מחשב הלקוח. כאשר לקוח מבקש לקבל עמוד הכולל בתוכו תכנות צד שרת, השרת מריץ תחילה את התוכנה, ורק לבסוף מחזיר את עמוד ה-HTML ללקוח. למשל, עמוד ASP לא מעובד על ידי הדפדפן; שרת ASP מעבד אותו ומחזיר ללקוח עמוד HTML.

### היסטוריה

חברת נטסקייפ הציגו מימוש javaScript עבור תכנות צד שרת עם שרת הנטסקייפ, לראשונה בדצמבר 1994 (מיד לאחר הצגת המימוש של javaScript עבור דפדפנים).
Fred DuFresne השתמש בתכנות צד שרת בתחילת 1995 במהלך פיתוח אתר האינטרנט הראשון לערוץ הטלוויזיה מבוסטון, מסצ'וסטס WCVB. הטכנולוגיה מתוארת בפטנט האמריקאי 5835712. הפטנט הוגש ב-1998 ונמצא כיום בבעלות Open Invention Network - OIN. ב-2010 OIN קרא ל Fred DuFresne "ממציא נכבד" על עבודתו בנושא תכנות צד שרת. כיום, מגוון שירותים משתמשים בתכנות צד שרת על מנת לשלוח תשובות ללקוחות, אם שירות בתשלום או בחינם. למשל, אתר האינטרנט wolframAlpha, מנוע ידע חישובי, אשר מחשב את התוצאות מחוץ למחשב הלקוח, ומחזיר לו רק את התוצאה הסופית. שירות נפוץ יותר הוא מנוע החיפוש של גוגל, אשר מחפש מיליוני תוצאות אשר קשורות למילת המפתח שהמשתמש הזין במנוע, ומחזיר רשימה ממוינת של קישורים ללקוח. יישום Siri של אפל משתמש גם כן בתכנות צד שרת. השרת מקבל קלט, מחשב תוצאה, ומחזיר אותה למשתמש.

ראו גם
------

* שרת–לקוח
* צד לקוח
* קצה קדמי וקצה אחורי

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

* תכנות צד שרת DMOZ (באנגלית)