Hidangkan satu dokumen HTML dengan Content-Type: text/html; charset=utf-8, tajuk dan huraian dalam kepala dokumen, serta kandungan yang boleh dibaca dalam badan dokumen. Panduan Mac ini membina halaman sintetik dan menyemak bahawa satu respons membawa ketiga-tiganya.

Tugas ini adalah untuk menyediakan dokumen awam yang boleh dibaca oleh pelayar, dengan menggunakan pratonton setempat sebelum memindahkan struktur yang sama ke sistem penerbitan. Contoh ini hanya mengandungi teks rekaan tentang bentuk kertas dan tidak memerlukan aset luaran.

Apakah yang terkandung dalam satu respons HTTP bertipe?

“Bertipe” bermaksud respons itu mengisytiharkan jenis medianya. Medan Content-Type memberitahu penerima format representasi dan cara pemprosesan yang dimaksudkan. Dalam kes ini, formatnya ialah HTML. Medan ini tidak menyediakan skema aplikasi medan demi medan. RFC 9110, seksyen 8.3

Respons HTTP/1.1 mempunyai baris status, medan pengepala, satu baris kosong dan badan pilihan. Oleh itu, anda boleh menghantar metadata pengangkutan dalam pengepala dan dokumen lengkap dalam badan tanpa membuat permintaan metadata yang berasingan. RFC 9112, seksyen 2.1

Untuk tugas penerbitan ini, gunakan panduan penempatan berikut. Panduan ini memisahkan maklumat yang menerangkan representasi HTTP daripada maklumat yang menerangkan halaman.

Maklumat Lokasi Contoh
Format dan pengekodan representasi Pengepala HTTP Content-Type: text/html; charset=utf-8
Tajuk dokumen Kepala HTML <title>Paper Shapes: Circle and Square</title>
Ringkasan halaman Kepala HTML <meta name="description" content="A short guide to arranging paper circles and squares.">
Kandungan untuk pembaca Badan HTML Tajuk, pengenalan dan arahan susunan

WHATWG mentakrifkan elemen title sebagai tajuk atau nama dokumen dan nilai metadata description sebagai huraian halaman. Gunakan satu tajuk dan paling banyak satu pengisytiharan description. Oleh sebab kedua-duanya diletakkan dalam dokumen HTML, kandungan dan metadata penerangan dihantar bersama-sama. Piawaian HTML: Metadata dokumen

Bagaimanakah anda membina pratonton yang berfungsi pada Mac?

Buka Terminal dan semak arahan yang tersedia:

python3 --version
curl --version

Program di bawah memerlukan Python 3.7 atau lebih baharu dan hanya menggunakan pustaka standardnya. Jika python3 tidak tersedia, ikuti arahan pemasangan rasmi macOS dan buka semula Terminal. Dokumentasi Python menerangkan pemasang dan cara menjalankan python3 daripada terminal. Menggunakan Python pada macOS

Tampalkan keseluruhan blok di bawah ke dalam Terminal, termasuk arahan pembuka dan baris akhir PY. Ini menjalankan program secara terus; ia tidak mencipta atau menulis ganti fail. Biarkan tetingkap terminal ini berjalan semasa anda menyemak halaman.

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

Pengendali ini menggunakan kaedah respons Python yang didokumenkan: send_response() memulakan respons, send_header() menambah medan dan end_headers() melengkapkan bahagian pengepala sebelum bait badan ditulis. Dokumentasi pelayan HTTP Python

Contoh ini sengaja mentakrifkan TITLE dan SUMMARY sekali sahaja. Nilai tersebut membekalkan metadata dan teks yang kelihatan, supaya dokumen ringkas ini lebih mudah disemak secara konsisten. Untuk halaman yang lebih panjang, huraian boleh berbeza daripada perenggan pembuka asalkan merumuskan subjek yang sama dengan tepat.

Halaman ini dikodkan sebelum panjangnya dikira. HTTP mentakrifkan Content-Length dalam oktet, atau bait; mengira aksara akan menghasilkan nilai yang salah untuk tanda pisah panjang dalam contoh ini. RFC 9110, seksyen 8.6

Bagaimanakah anda mengesahkan bahawa kandungan dan metadata diterima bersama?

Buka tetingkap Terminal kedua dan jalankan arahan ini. Arahan ini membuat permintaan dokumen biasa dan memaparkan pengepala respons serta kandungan:

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

Pilihan -i memasukkan pengepala respons dalam aliran output yang sama dengan badan. Had masa mengehadkan pemindahan kepada sepuluh saat. Pilihan ini didokumenkan dalam manual baris arahan curl.

Semak output mengikut turutan:

  1. Baris status sepatutnya melaporkan 200 OK.
  2. Satu medan Content-Type sepatutnya mengisytiharkan text/html; charset=utf-8.
  3. Selepas baris kosong pada bahagian pengepala, HTML sepatutnya mengandungi tajuk dan huraian.
  4. Badan yang sama sepatutnya mengandungi arahan tentang bentuk kertas.
  5. Tanda pisah panjang sepatutnya dipaparkan dengan betul dalam teks yang dinyahkod.

Seterusnya, masukkan http://127.0.0.1:8000/paper-shapes dalam bar alamat Safari. Halaman yang kelihatan sepatutnya memaparkan tajuk, ringkasan dan arahan. Pengisytiharan description ialah metadata; kehadirannya disemak dalam markup yang dipulangkan, bukannya disimpulkan daripada rupa halaman.

Anda juga boleh menyemak laluan pengepala sahaja:

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

Ini menghantar HEAD, jadi ia tidak dapat mengesahkan bahawa badan mengandungi tajuk atau huraian. Respons HEAD menggugurkan kandungan sambil menerangkan representasi yang sepadan; gunakan semakan GET yang terdahulu untuk memeriksa dokumen sebenar. RFC 9110, seksyen 8.2

Jika pratonton tidak berfungsi, gunakan gejala untuk memilih tindakan seterusnya:

Gejala Tindakan seterusnya
Permulaan program melaporkan bahawa alamat sedang digunakan Tukar 8000 kepada 8001 dalam program, jalankannya semula dan gunakan 8001 dalam setiap arahan pratonton.
Permintaan melaporkan kegagalan sambungan Pastikan terminal pertama masih memaparkan pratonton yang sedang berjalan dan nombor port sepadan.
Respons ialah 404 Gunakan tepat /paper-shapes; contoh ini tidak menerima garis miring di hujung atau rentetan pertanyaan.
Pelayar masih memaparkan versi terdahulu Hentikan program dengan Control-C, jalankan semula blok yang telah disunting dan muat semula halaman.
Tajuk kelihatan betul tetapi metadata tiada Periksa output GET dan pastikan pengisytiharan berada di dalam kepala dokumen.

Apakah yang boleh digunakan oleh Google Search daripada respons ini?

Tajuk yang deskriptif, huraian yang tepat dan teks yang kelihatan serta berguna memberikan input yang didokumenkan kepada Google untuk mempersembahkan halaman. Google menyenaraikan elemen title, tajuk visual utama, elemen heading dan sumber lain sebagai input untuk menjana pautan tajuk secara automatik. Pastikan isyarat tersebut selaras dengan subjek dokumen. Mempengaruhi pautan tajuk dalam hasil carian

Google terutamanya menjana petikan daripada kandungan halaman dan kadangkala menggunakan meta description apabila ia menghuraikan halaman dengan lebih tepat. Carian yang berbeza boleh menghasilkan petikan yang berbeza. Anggap description sebagai ringkasan berguna, bukannya kapsyen tetap dalam hasil carian. Mengawal petikan dalam hasil carian

Bagi contoh sintetik ini, description menjanjikan panduan susunan ringkas dan badan dokumen menyediakan panduan tersebut. Apabila menggantikan teks contoh, semak hubungan ini secara jelas: seseorang yang hanya membaca description sepatutnya mendapat jangkaan yang tepat tentang halaman itu.

Menambah nama metadata tersuai tidak bermakna nama tersebut disokong. Google menyatakan bahawa ia mengabaikan tag meta yang tidak disokongnya. Gunakan medan yang didokumenkan Google untuk metadata yang ditujukan kepada carian; medan yang direka untuk aplikasi anda sendiri memerlukan pengguna berasingan yang ditakrifkan secara khusus. Tag meta dan atribut yang disokong Google

Bagaimanakah pratonton menjadi corak penerbitan awam?

Alamat setempat dalam panduan ini ialah pratonton desktop, bukannya halaman yang diterbitkan. Python juga mendokumenkan bahawa http.server tidak disyorkan untuk penggunaan produksi. Pindahkan struktur HTML dan keperluan respons ke sistem penerbitan anda dan bukannya menggunakan demonstrasi ini sebagai perkhidmatan pengehosan awam. Dokumentasi pelayan HTTP Python

Jika anda menggunakan sistem pengurusan kandungan, cari kawalan tajuk halaman dan meta description yang didokumenkan. Google menyatakan bahawa CMS mungkin menyediakan tetapan carian dan bukannya penyuntingan HTML secara langsung. Petakan kawalan tersebut kepada medan yang ditunjukkan di sini, kemudian periksa respons dokumen yang terhasil. Panduan Google tentang menambah meta description

HTTP memang menyokong representasi berbilang bahagian, tetapi itu ialah pilihan pembungkusan yang berbeza. Untuk tugas dokumen yang boleh dibaca oleh pelayar ini, struktur HTML yang disokong sudah memuatkan kandungan dan metadata dokumen dalam satu representasi. Memilih berbilang bahagian akan menambah keperluan pemprosesan pada pihak penerima yang tidak diperlukan oleh panduan ini. RFC 9110, seksyen 8.3.3

Semakan selesai anda jelas: satu permintaan dokumen yang berjaya memulangkan jenis media yang betul, badan HTML yang lengkap, tajuk dan huraian yang tepat serta teks yang dicari oleh pembaca. Gunakan semakan itu pada respons awam sebenar dan juga pratonton setempat, supaya output sistem penerbitan sepadan dengan dokumen yang anda sediakan.

Sumber