قدّم مستند HTML واحدًا مع Content-Type: text/html; charset=utf-8، وعنوانه ووصفه في رأس المستند، ومحتوى مقروء في المتن. يشرح هذا الدليل على Mac كيفية إنشاء صفحة اصطناعية والتحقق من أن استجابة واحدة تتضمن العناصر الثلاثة.

المهمة هي إعداد مستند عام قابل للقراءة في المتصفح، باستخدام معاينة محلية قبل نقل البنية نفسها إلى نظام نشر. لا يتضمن المثال سوى نص مبتكر عن أشكال الورق، ولا يحتاج إلى أصول خارجية.

ما الذي يوضع في استجابة HTTP واحدة محددة النوع؟

تعني كلمة «محددة النوع» أن الاستجابة تعلن عن نوع الوسائط الخاص بها. يوضح الحقل Content-Type للمستلم تنسيق التمثيل وطريقة معالجته المقصودة. التنسيق هنا هو HTML. لكنه لا يوفّر مخططًا تطبيقيًا يحدد حقولًا منفردة. RFC 9110، القسم 8.3

تتكون استجابة HTTP/1.1 من سطر حالة وحقول ترويسة وسطر فارغ ومتن اختياري. لذلك يمكنك إرسال بيانات النقل الوصفية في الترويسات والمستند الكامل في المتن، من دون إنشاء طلب منفصل للبيانات الوصفية. RFC 9112، القسم 2.1

في مهمة النشر هذه، استخدم دليل المواضع التالي. فهو يفصل المعلومات التي تصف تمثيل HTTP عن المعلومات التي تصف الصفحة.

المعلومات الموضع مثال
تنسيق التمثيل وترميزه ترويسة HTTP Content-Type: text/html; charset=utf-8
عنوان المستند رأس HTML <title>Paper Shapes: Circle and Square</title>
ملخص الصفحة رأس HTML <meta name="description" content="A short guide to arranging paper circles and squares.">
المحتوى الموجّه إلى القارئ متن HTML عنوان ومقدمة وتعليمات الترتيب

يعرّف WHATWG عنصر العنوان بأنه عنوان المستند أو اسمه، وقيمة بيانات الوصف بأنها وصف للصفحة. استخدم عنوانًا واحدًا وإعلان وصف واحدًا على الأكثر. وجودهما داخل مستند HTML يعني أن المحتوى والبيانات الوصفية الوصفية ينتقلان معًا. معيار HTML: بيانات وصف المستند

كيف تنشئ معاينة عملية على Mac؟

افتح Terminal وتحقق من الأوامر المتاحة:

python3 --version
curl --version

يتطلب البرنامج أدناه Python 3.7 أو إصدارًا أحدث، ولا يستخدم سوى المكتبة القياسية. إذا لم يتوفر python3، فاتبع تعليمات التثبيت الرسمية لنظام macOS ثم أعد فتح Terminal. توثّق Python كلاً من برنامج التثبيت وطريقة تشغيل python3 من الطرفية. استخدام Python على macOS

الصق الكتلة كاملة أدناه في Terminal، بما فيها الأمر الافتتاحي والسطر الأخير PY. يشغّل هذا البرنامج مباشرةً، ولا ينشئ ملفًا أو يستبدله. اترك نافذة الطرفية هذه مفتوحة أثناء فحص الصفحة.

python3 - <<'PY'
from html import escape
from http.server import BaseHTTPRequestHandler, ThreadingHTTPServer

TITLE = "Paper Shapes: Circle and Square"
SUMMARY = "A short guide to arranging paper circles and squares."
PAGE = f"""<!doctype html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>{escape(TITLE)}</title>
<meta name="description" content="{escape(SUMMARY, quote=True)}">
</head>
<body>
<main>
<h1>{escape(TITLE)}</h1>
<p>{escape(SUMMARY)}</p>
<h2>Try a simple arrangement</h2>
<p>Place one paper circle beside one paper square.</p>
<p>Switch their positions — then compare the two arrangements.</p>
</main>
</body>
</html>
""".encode("utf-8")

class Handler(BaseHTTPRequestHandler):
    protocol_version = "HTTP/1.1"

    def respond(self, include_body):
        if self.path != "/paper-shapes":
            self.send_error(404, "Page not found")
            return
        self.send_response(200)
        self.send_header("Content-Type", "text/html; charset=utf-8")
        self.send_header("Content-Length", str(len(PAGE)))
        self.end_headers()
        if include_body:
            self.wfile.write(PAGE)

    def do_GET(self):
        self.respond(True)

    def do_HEAD(self):
        self.respond(False)

if __name__ == "__main__":
    with ThreadingHTTPServer(("127.0.0.1", 8000), Handler) as server:
        print("Preview: http://127.0.0.1:8000/paper-shapes", flush=True)
        try:
            server.serve_forever()
        except KeyboardInterrupt:
            pass
PY

يستخدم المعالج أساليب الاستجابة الموثّقة في Python: يبدأ send_response() الاستجابة، ويضيف send_header() الحقول، وينهي end_headers() قسم الترويسة قبل كتابة بايتات المتن. توثيق خادم HTTP في Python

يعرّف المثال عمدًا TITLE وSUMMARY مرة واحدة. وتُستخدم هاتان القيمتان لكل من البيانات الوصفية والنص الظاهر، ما يسهّل تعديل هذا المستند الصغير باتساق. في صفحة أطول، يمكن أن يختلف الوصف عن الفقرة الافتتاحية مع تلخيصه للموضوع نفسه بدقة.

يُرمّز محتوى الصفحة قبل حساب طوله. يعرّف HTTP قيمة Content-Length بعدد الثمانيات، أي البايتات؛ وعدّ الأحرف سيعطي نتيجة خاطئة بسبب الشرطة الطويلة في هذا المثال. RFC 9110، القسم 8.6

كيف تتحقق من وصول المحتوى والبيانات الوصفية معًا؟

افتح نافذة Terminal ثانية وشغّل هذا الأمر. فهو يرسل طلب مستند عاديًا ويعرض ترويسات الاستجابة ومحتواها معًا:

curl -i --max-time 10 http://127.0.0.1:8000/paper-shapes

يتضمن الخيار -i ترويسات الاستجابة في مجرى الإخراج نفسه مع المتن. ويحدّد المهلة مدة النقل بعشر ثوانٍ. هذه الخيارات موثّقة في دليل سطر أوامر curl.

تحقق من المخرجات بالترتيب:

  1. ينبغي أن يبلغ سطر الحالة عن 200 OK.
  2. ينبغي أن يعلن حقل Content-Type واحد عن text/html; charset=utf-8.
  3. بعد السطر الفارغ الذي ينهي قسم الترويسات، ينبغي أن يتضمن HTML العنوان والوصف.
  4. ينبغي أن يتضمن المتن نفسه تعليمات أشكال الورق.
  5. ينبغي أن تظهر الشرطة الطويلة بشكل صحيح في النص المفكوك الترميز.

بعد ذلك، أدخل http://127.0.0.1:8000/paper-shapes في شريط العناوين في Safari. ينبغي أن تعرض الصفحة الظاهرة عنوانها وملخصها وتعليماتها. إعلان الوصف بيانات وصفية؛ ويُتحقق من وجوده في الترميز المعاد، لا باستنتاجه من مظهر الصفحة.

يمكنك أيضًا فحص مسار الترويسات فقط:

curl -I --max-time 10 http://127.0.0.1:8000/paper-shapes

يرسل هذا HEAD، لذا لا يمكنه التحقق من أن المتن يحتوي على العنوان أو الوصف. تحذف استجابة HEAD المحتوى، مع أنها تصف التمثيل المقابل؛ استخدم فحص GET السابق لمعاينة المستند الفعلي. RFC 9110، القسم 8.2

إذا لم تعمل المعاينة، فاستعن بالعَرَض لاختيار الإجراء التالي:

العَرَض الإجراء التالي
يُبلغ بدء التشغيل أن العنوان مستخدم بالفعل غيّر 8000 إلى 8001 في البرنامج، وأعد تشغيله، واستخدم 8001 في كل أمر معاينة.
يُبلغ الطلب عن فشل الاتصال تحقق من أن الطرفية الأولى ما زالت تعرض المعاينة قيد التشغيل، وأن أرقام المنافذ متطابقة.
الاستجابة هي 404 استخدم /paper-shapes بالضبط؛ فهذا المثال لا يقبل شرطة مائلة في النهاية أو سلسلة استعلام.
ما زال المتصفح يعرض إصدارًا سابقًا أوقف البرنامج باستخدام Control-C، وأعد تشغيل الكتلة المعدّلة، ثم أعد التحميل.
يبدو العنوان صحيحًا لكن البيانات الوصفية مفقودة افحص مخرجات GET وتأكد من وجود الإعلانات داخل رأس المستند.

ما الذي يمكن أن يستخدمه بحث Google من هذه الاستجابة؟

يوفّر العنوان الوصفي والوصف الدقيق والنص الظاهر المفيد مدخلات موثّقة لـ Google لعرض الصفحة. يذكر Google أن عنصر العنوان والعنوان المرئي الرئيسي وعناصر العناوين ومصادر أخرى تدخل ضمن مدخلاته لإنشاء روابط العناوين تلقائيًا. اجعل هذه الإشارات متوافقة مع موضوع المستند. التأثير في روابط العناوين ضمن نتائج البحث

ينشئ Google المقتطفات أساسًا من محتوى الصفحة، ويستخدم أحيانًا وصف meta عندما يصف الصفحة بدقة أكبر. وقد تعرض عمليات البحث المختلفة مقتطفات مختلفة. تعامل مع الوصف بوصفه ملخصًا مفيدًا، لا تعليقًا ثابتًا لنتيجة البحث. التحكم في المقتطفات ضمن نتائج البحث

في المثال الاصطناعي، يعد الوصف بدليل قصير للترتيب، ويقدّم المتن ذلك الدليل. عند استبدال النص النموذجي، تحقّق من هذه الصلة صراحةً: ينبغي لمن يقرأ الوصف وحده أن يتوقع الصفحة بدقة.

لا يثبت إدراج أسماء بيانات وصفية مخصصة أن Google يدعمها. يذكر Google أنه يتجاهل وسوم meta التي لا يدعمها. استخدم الحقول الموثّقة لديه للبيانات الوصفية الموجّهة إلى البحث؛ أما الحقل الذي تبتكره لتطبيقك، فيحتاج إلى جهة مستهلكة محددة على نحو مستقل. وسوم meta والسمات التي يدعمها Google

كيف تتحول المعاينة إلى أسلوب نشر عام؟

العنوان المحلي في هذا الدليل مخصص لمعاينة سطح المكتب، وليس صفحة منشورة. وتوثّق Python أيضًا أن http.server غير موصى به للاستخدام في بيئة الإنتاج. انقل بنية HTML ومتطلبات الاستجابة إلى نظام النشر لديك بدلًا من استخدام هذا العرض التوضيحي كخدمة استضافة عامة. توثيق خادم HTTP في Python

إذا كنت تستخدم نظام إدارة محتوى، فابحث عن عناصر التحكم الموثّقة فيه لعنوان الصفحة ووصف meta. يشير Google إلى أن نظام إدارة المحتوى قد يوفّر إعدادات للبحث بدلًا من التحرير المباشر لـ HTML. اربط عناصر التحكم هذه بالحقول الموضحة هنا، ثم افحص استجابة المستند الناتجة. إرشادات Google لإضافة أوصاف meta

يدعم HTTP التمثيلات متعددة الأجزاء، لكن ذلك خيار تغليف مختلف. في مهمة المستند القابل للقراءة في المتصفح هذه، تتيح بنية HTML المدعومة بالفعل جمع المحتوى وبيانات وصف المستند الوصفية في تمثيل واحد. واختيار تنسيق متعدد الأجزاء سيفرض متطلبات معالجة على المستهلك لا يحتاج إليها هذا الدليل. RFC 9110، القسم 8.3.3

معيار اكتمال عملك واضح: يعيد طلب مستند ناجح واحد نوع الوسائط الصحيح، ومتن HTML كاملًا، وعنوانًا ووصفًا دقيقين، والنص الذي جاء القراء لقراءته. طبّق هذا المعيار على الاستجابة العامة النهائية كما تطبقه على المعاينة المحلية، كي تطابق مخرجات نظام النشر المستند الذي أعددته.

المصادر