Rumah  >  Artikel  >  hujung hadapan web  >  Fahami semua aspek Gambar Pengepala HTTP dan penerangan teks_HTML/Xhtml_Pengeluaran halaman web

Fahami semua aspek Gambar Pengepala HTTP dan penerangan teks_HTML/Xhtml_Pengeluaran halaman web

WBOY
WBOYasal
2016-05-16 16:41:482823semak imbas

Apakah itu Pengepala HTTP

HTTP ditulis oleh "Hypertext Transfer Protocol". Protokol ini digunakan oleh seluruh World Wide Web Hampir kebanyakan kandungan yang anda lihat dalam penyemak imbas dihantar melalui protokol http, seperti artikel ini.

Pengepala HTTP ialah teras permintaan dan respons HTTP Ia membawa maklumat tentang penyemak imbas klien, halaman yang diminta, pelayan, dll.

Contoh

Apabila anda menaip url dalam bar alamat penyemak imbas, penyemak imbas anda akan membuat permintaan http serupa dengan yang berikut:
DAPATKAN /tutorials/other/top-20-mysql-best-practis / HTTP/1.1GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1<br>Host: net.tutsplus.com<br>User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)<br>Accept: text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8<br>Accept-Language: en-us,en;q=0.5<br>Accept-Encoding: gzip,deflate<br>Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7<br>Keep-Alive: 300<br>Connection: keep-alive<br>Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120<br>Pragma: no-cache<br>Cache-Control: no-cache<br>Hos: net.tutsplus.com
Ejen Pengguna: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5 . 5 (.NET CLR 3.5.30729)
Terima: teks/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8

Terima-Bahasa: en-us, en ;q=0.5

Terima-Pengekodan: gzip,deflate

Terima-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7

Keep-Alive: 300<font face="NSimsun">HTTP/1.x 200 OK<br>Transfer-Encoding: chunked<br>Date: Sat, 28 Nov 2009 04:36:25 GMT<br>Server: LiteSpeed<br>Connection: close<br>X-Powered-By: W3 Total Cache/0.8<br>Pragma: public<br>Expires: Sat, 28 Nov 2009 05:36:25 GMT<br>Etag: "pub1259380237;gz"<br>Cache-Control: max-age=3600, public<br>Content-Type: text/html; charset=UTF-8<br>Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT<br>X-Pingback: http://net.tutsplus.com/xmlrpc.php<br>Content-Encoding: gzip<br>Vary: Accept-Encoding, Cookie, User-Agent<br><!-- ... rest of the html ... --></font>Sambungan: keep-alive

Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120

Pragma: no-cache

Cache-Control: no-cache

Barisan pertama "Barisan Permintaan" ia menerangkan maklumat asas permintaan, dan selebihnya ialah pengepala HTTP.

Selepas permintaan selesai, penyemak imbas anda mungkin menerima respons HTTP berikut:

HTTP/1.x 200 OK

Pengekodan Pemindahan: dipotong

Tarikh: Sab, 28 Nov 2009 04:36:25 GMT

Pelayan: LiteSpeedSambungan : tutupX-Powered-By: W3 Jumlah Cache/0.8Pragma: awamTamat: Sabtu, 28 Nov 2009 05:36:25 GMT

Etag: "pub1259380237;gz"

Cache-Control: max-age=3600, publicContent-Type: text/html; charset=UTF-8Terakhir Diubah Suai: Sab, 28 Nov 2009 03:50:37 GMTX -Ping balik: http://net.tutsplus.com/xmlrpc.php

Pengekodan Kandungan: gzip

Pelbagai: Terima-Pengekodan, Kuki, Ejen Pengguna Baris pertama dipanggil "Barisan Status", dan selepasnya ialah pengepala http Selepas baris kosong, kandungan mula dikeluarkan (dalam kes ini, beberapa output html).

Tetapi apabila anda melihat kod sumber halaman, anda tidak dapat melihat pengepala HTTP, walaupun ia dihantar ke penyemak imbas bersama-sama dengan perkara yang anda boleh lihat. Permintaan HTTP ini juga menghantar permintaan untuk menerima beberapa sumber lain, seperti gambar, fail css, fail js, dsb.

Mari kita lihat butirannya.

Cara melihat Pengepala HTTP
  • Pelanjutan FireFox berikut boleh membantu anda menganalisis pengepala HTTP: 1. pepijat api

2.

Pengepala HTTP Langsung

3. Dalam PHP: getallheaders() digunakan untuk mendapatkan pengepala permintaan Anda juga boleh menggunakan tatasusunan $_SERVER headers_list() digunakan untuk mendapatkan pengepala respons. Di bahagian bawah artikel anda akan melihat beberapa contoh penggunaan PHP. Struktur Permintaan HTTP Baris pertama, dipanggil "baris pertama", mengandungi tiga bahagian:
  • "kaedah" menunjukkan jenis permintaan ini Jenis permintaan yang paling biasa ialah GET, POST dan HEAD
  • "path" mencerminkan laluan selepas hos Contohnya, apabila anda meminta "http://net.tutsplus.com/tutorials/other/top-20-mysql-best-practices/", laluan akan ". /tutorials/other/top-20-mysql-best-practices/".
  • "protokol" mengandungi "HTTP" dan nombor versi, penyemak imbas moden akan menggunakan 1.1.

Setiap baris yang tinggal ialah pasangan "Nama:Nilai". Ia mengandungi pelbagai maklumat tentang permintaan dan penyemak imbas anda. Contohnya, "User-Agent" menunjukkan versi penyemak imbas anda dan sistem pengendalian yang anda gunakan. "Terima-Pengekodan" memberitahu pelayan bahawa penyemak imbas anda boleh menerima output termampat seperti gzip.

Kebanyakan pengepala ini adalah pilihan. Permintaan HTTP malah boleh diperkemaskan untuk kelihatan seperti ini:

<font face="NSimsun">GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1<br>Host: net.tutsplus.com</font>

Dan anda masih akan menerima respons yang sah daripada pelayan.

Jenis Permintaan

Tiga jenis permintaan yang paling biasa ialah: GET, POST dan HEAD Anda mungkin biasa dengan dua yang pertama dari proses menulis HTML.

DAPATKAN: Dapatkan dokumen

Kebanyakan html, imej, js, css, ... yang dihantar ke penyemak imbas diminta melalui kaedah GET. Ia adalah kaedah utama untuk mendapatkan data.

Sebagai contoh, untuk mendapatkan artikel Nettuts, baris pertama permintaan http biasanya kelihatan seperti ini:

<font face="NSimsun">GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1</font>

Setelah html dimuatkan, penyemak imbas akan menghantar permintaan GET untuk mendapatkan imej, seperti ini:

<font face="NSimsun">GET /wp-content/themes/tuts_theme/images/header_bg_tall.png HTTP/1.1</font>

Borang juga boleh dihantar melalui kaedah GET Berikut adalah contoh:

<font face="NSimsun"><form action="foo.php" method="GET"> <br>First Name: <input name="first_name" type="text"><br>Last Name: <input name="last_name" type="text"><br><input name="action" type="submit" value="Submit"><br> </form></font>

Apabila borang ini diserahkan, permintaan HTTP akan kelihatan seperti ini:

<font face="NSimsun">GET /foo.php?first_name=John&last_name=Doe&action=Submit HTTP/1.1<br>...</font>

Anda boleh menghantar input borang ke pelayan dengan melampirkannya pada rentetan pertanyaan.

POS: Hantar data ke pelayan

Walaupun anda boleh menambah data pada URL dan menghantarnya ke pelayan melalui kaedah GET, dalam banyak kes adalah lebih sesuai untuk menggunakan POST untuk menghantar data ke pelayan. Menghantar sejumlah besar data melalui GET adalah tidak realistik dan mempunyai had tertentu.

Adalah amalan biasa untuk menghantar data borang menggunakan permintaan POST. Mari ubah suai contoh di atas untuk menggunakan kaedah POST:

<font face="NSimsun"><form action="foo.php" method="POST"> <br>First Name: <input name="first_name" type="text"><br>Last Name: <input name="last_name" type="text"><br><input name="action" type="submit" value="Submit"><br> </form></font>

Menyerahkan borang ini akan membuat permintaan HTTP seperti berikut:

<font face="NSimsun">POST /foo.php HTTP/1.1<br>Host: localhost<br>User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)<br>Accept: text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8<br>Accept-Language: en-us,en;q=0.5<br>Accept-Encoding: gzip,deflate<br>Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7<br>Keep-Alive: 300<br>Connection: keep-alive<br>Referer: http://localhost/test.php<br>Content-Type: application/x-www-form-urlencoded<br>Content-Length: 43<br>first_name=John&last_name=Doe&action=Submit</font>

Terdapat tiga perkara yang perlu diperhatikan di sini:

  • Laluan dalam baris pertama telah ditukar kepada hanya /foo.php , tanpa rentetan pertanyaan.
  • Tambahan Jenis Kandungan dan Pengepala Panjang Kandungan, yang menyediakan maklumat yang berkaitan untuk menghantar mesej
  • Semua data dihantar selepas pengepala dalam bentuk rentetan pertanyaan.

Permintaan POST juga boleh digunakan pada AJAX, aplikasi, cURL... Dan semua borang muat naik fail dikehendaki menggunakan kaedah POST.

KEPALA: Terima maklumat pengepala

HEAD sangat serupa dengan GET, kecuali HEAD tidak menerima bahagian kandungan respons HTTP. Apabila anda menghantar permintaan HEAD, ini bermakna anda hanya berminat dengan pengepala HTTP, bukan dokumen itu sendiri.

Kaedah ini membolehkan penyemak imbas menentukan sama ada halaman telah diubah suai dan dengan itu mengawal caching. Ia juga boleh menentukan sama ada dokumen yang diminta wujud.

Sebagai contoh, jika terdapat banyak pautan di tapak web anda, maka anda boleh menghantar permintaan HEAD kepada mereka masing-masing untuk menentukan sama ada terdapat pautan mati, yang jauh lebih pantas daripada menggunakan GET.

struktur tindak balas http

Apabila penyemak imbas menghantar permintaan HTTP, pelayan akan membalas permintaan tersebut dengan respons HTTP. Jika anda tidak mengambil berat tentang kandungan, permintaan akan kelihatan seperti ini:

Maklumat berharga pertama ialah perjanjian. Pada masa ini, pelayan akan menggunakan HTTP/1.x atau HTTP/1.1.

Mesej ringkas seterusnya mewakili status. Kod 200 bermakna permintaan kami telah berjaya dihantar, dan pelayan akan mengembalikan dokumen yang kami minta, selepas maklumat pengepala.

Kita semua telah melihat halaman "Fahami semua aspek Gambar Pengepala HTTP dan penerangan teks_HTML/Xhtml_Pengeluaran halaman web". Apabila saya meminta laluan yang tidak wujud daripada pelayan, pelayan bertindak balas kepada kami dengan Fahami semua aspek Gambar Pengepala HTTP dan penerangan teks_HTML/Xhtml_Pengeluaran halaman web dan bukannya 200.

Selebihnya kandungan respons serupa dengan permintaan HTTP. Ini mengenai perisian pelayan, apabila halaman/fail diubah suai, jenis mime, dsb...

Sekali lagi, pengepala ini adalah pilihan.

Kod status HTTP

  • 200 digunakan untuk menunjukkan permintaan yang berjaya
  • 300 untuk menunjukkan ubah hala
  • 400 digunakan untuk menunjukkan masalah dengan permintaan
  • 500 digunakan untuk menunjukkan masalah dengan pelayan.

200 Kejayaan (OK)

Seperti yang dinyatakan sebelum ini, 200 digunakan untuk menunjukkan bahawa permintaan itu berjaya.

206 Kandungan Separa

Jika aplikasi hanya meminta fail dalam julat tertentu, 206 akan dikembalikan.

Ini biasanya digunakan untuk pengurusan muat turun, menyambung semula muat turun atau memuat turun fail dalam ketulan.

Fahami semua aspek Gambar Pengepala HTTP dan penerangan teks_HTML/Xhtml_Pengeluaran halaman web Tidak Ditemui

Fahami semua aspek Gambar Pengepala HTTP dan penerangan teks_HTML/Xhtml_Pengeluaran halaman web

Mudah difahami

Fahami semua aspek Gambar Pengepala HTTP dan penerangan teks_HTML/Xhtml_Pengeluaran halaman web Tanpa Kebenaran

Halaman yang dilindungi kata laluan akan mengembalikan status ini. Jika anda tidak memasukkan kata laluan yang betul, anda akan melihat mesej berikut dalam penyemak imbas anda:

Fahami semua aspek Gambar Pengepala HTTP dan penerangan teks_HTML/Xhtml_Pengeluaran halaman web

Perhatikan bahawa ini hanyalah halaman yang dilindungi kata laluan Kotak pop timbul yang meminta kata laluan kelihatan seperti ini:

Fahami semua aspek Gambar Pengepala HTTP dan penerangan teks_HTML/Xhtml_Pengeluaran halaman web_prompt

403 Dilarang

Jika anda tidak mempunyai kebenaran untuk mengakses halaman, status 403 akan dikembalikan. Ini biasanya berlaku apabila anda cuba membuka folder yang tidak mempunyai halaman indeks. Jika tetapan pelayan tidak membenarkan melihat kandungan direktori, maka anda akan melihat ralat 403.

Beberapa cara lain juga akan menghantar sekatan kebenaran, contohnya anda boleh menyekat melalui alamat IP, yang memerlukan sedikit bantuan daripada htaccess.

<font face="NSimsun">order allow,deny<br>deny from 192.168.44.201<br>deny from 224.39.163.12<br>deny from 172.16.7.92<br>allow from all</font>

302 (atau 307) Dialihkan Sementara dan 301 Dialihkan Secara Kekal

Dua keadaan ini akan muncul apabila penyemak imbas mengubah hala. Contohnya, anda menggunakan perkhidmatan memendekkan URL seperti bit.ly. Beginilah cara mereka belajar siapa yang mengklik pada pautan mereka.

302 dan 301 sangat serupa untuk penyemak imbas, tetapi terdapat beberapa perbezaan untuk perangkak enjin carian. Sebagai contoh, jika tapak web anda sedang diselenggara, maka anda akan mengubah hala pelayar klien ke alamat lain dengan 302. Perangkak enjin carian akan mengindeks semula halaman anda pada masa hadapan. Tetapi jika anda menggunakan ubah hala 301, anda memberitahu perangkak enjin carian bahawa tapak web anda telah dipindahkan secara kekal ke alamat baharu.

500 Ralat Pelayan Dalaman

Kod ini biasanya muncul apabila skrip halaman ranap. Kebanyakan skrip CGI tidak mengeluarkan mesej ralat kepada penyemak imbas seperti PHP. Jika ralat maut berlaku, mereka hanya menghantar kod status 500. Pada masa ini, anda perlu menyemak log ralat pelayan untuk menyelesaikan masalah.

Senarai penuh

Anda boleh mencari penerangan lengkap kod status HTTP di sini .

Permintaan HTTP dalam Pengepala HTTP

Sekarang mari kita lihat beberapa maklumat permintaan HTTP biasa yang terdapat dalam pengepala HTTP.

Semua maklumat pengepala ini boleh didapati dalam tatasusunan $_SERVER PHP. Anda juga boleh menggunakan fungsi getallheaders() untuk mendapatkan semua maklumat pengepala sekaligus.

Hos

Permintaan HTTP akan dihantar ke alamat IP tertentu, tetapi kebanyakan pelayan mempunyai keupayaan untuk mengehoskan berbilang tapak web di bawah alamat IP yang sama, jadi pelayan mesti mengetahui nama domain mana yang diminta oleh penyemak imbas.

<font face="NSimsun">Hos: rlog.cn<code><font face="NSimsun">Host: rlog.cn</font>

Ini hanyalah nama hos asas, termasuk domain dan subdomain.

Dalam PHP, anda boleh melihatnya melalui $_SERVER['HTTP_HOST'] atau $_SERVER['SERVER_NAME'].

Ejen Pengguna

<font face="NSimsun">Ejen Pengguna: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (. NET CLR 3.5.30729)<code><font face="NSimsun">User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)</font>

Pengepala ini boleh membawa maklumat berikut:

  • Nama penyemak imbas dan nombor versi
  • Nama sistem pengendalian dan nombor versi
  • Bahasa lalai.

Ini ialah kaedah biasa yang digunakan sesetengah tapak web untuk mengumpul maklumat pelawat. Sebagai contoh, anda boleh menentukan sama ada pelawat mengakses tapak anda daripada telefon mudah alih dan memutuskan sama ada untuk mengarahkan mereka ke tapak mudah alih yang berprestasi baik pada peleraian yang lebih rendah.

Dalam PHP, anda boleh mendapatkan Ejen Pengguna melalui $_SERVER['HTTP_USER_AGENT']

<font face="NSimsun">if ( strstr($_SERVER['HTTP_USER_AGENT'],'MSIE 6') ) {<br>gema "Sila berhenti menggunakan IE6!";<br> }<code><font face="NSimsun">if ( strstr($_SERVER['HTTP_USER_AGENT'],'MSIE 6') ) {<br>echo "Please stop using IE6!";<br>}</font>

Bahasa Terima

<font face="NSimsun">Bahasa Terima: en-us,en;q=0.5<code><font face="NSimsun">Accept-Language: en-us,en;q=0.5</font>

Maklumat ini menerangkan tetapan bahasa lalai pengguna. Jika tapak web mempunyai versi bahasa yang berbeza, maka maklumat ini boleh digunakan untuk mengubah hala pelayar pengguna.

Ia boleh membawa berbilang bahasa dengan pemisahan koma. Yang pertama akan menjadi bahasa pilihan, dan bahasa lain akan membawa nilai "q" untuk menunjukkan keutamaan pengguna untuk bahasa tersebut (0~1).

Gunakan $_SERVER["HTTP_ACCEPT_LANGUAGE"] dalam PHP untuk mendapatkan maklumat ini.

<font face="NSimsun">if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == 'fr') {<br>header('Lokasi: http:// french.mydomain.com');<br>}<code><font face="NSimsun">if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == 'fr') {<br>header('Location: http://french.mydomain.com');<br>}</font>

Terima-Pengekodan

<font face="NSimsun">Terima-Pengekodan: gzip, kempis<code><font face="NSimsun">Accept-Encoding: gzip,deflate</font>

Kebanyakan penyemak imbas moden menyokong pemampatan gzip dan akan melaporkan maklumat ini kepada pelayan. Pada masa ini, pelayan akan menghantar HTML termampat ke penyemak imbas. Ini boleh mengurangkan saiz fail hampir 80% untuk menjimatkan masa muat turun dan lebar jalur.

Dalam PHP anda boleh menggunakan $_SERVER["HTTP_ACCEPT_ENCODING"] untuk mendapatkan maklumat ini. Kemudian memanggil kaedah ob_gzhandler() akan mengesan nilai ini secara automatik, jadi anda tidak perlu mengesannya secara manual.

<font face="NSimsun">// mendayakan penimbalan output<br>// dan semua output dimampatkan jika penyemak imbas menyokongnya<br>ob_start('ob_gzhandler');<code><font face="NSimsun">// enables output buffering<br>// and all output is compressed if the browser supports it<br>ob_start('ob_gzhandler');</font>

Jika-Diubahsuai-Sejak

Jika halaman telah dicache dalam penyemak imbas anda, maka pada kali seterusnya anda menyemak imbas penyemak imbas akan mengesan sama ada dokumen itu telah diubah suai, maka ia akan menghantar pengepala sedemikian:

<font face="NSimsun">If-Modified-Sejak: Sab, 28 Nov 2009 06:38:19 GMT<code><font face="NSimsun">If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT</font>

Jika ia tidak diubah suai sejak masa ini, pelayan akan mengembalikan "304 Not Modified" dan tiada lagi kandungan akan dikembalikan. Penyemak imbas akan membaca kandungan secara automatik daripada cache

Dalam PHP, anda boleh menggunakan $_SERVER['HTTP_IF_MODIFIED_SINCE'] untuk mengesan.

<font face="NSimsun">// andaikan $last_modify_time ialah output terakhir dikemas kini<br>// adakah penyemak imbas menghantar pengepala If-Modified-Since?<br>if(isset ($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {<br>// jika cache penyemak imbas sepadan dengan masa ubah suai<br>if ($last_modify_time == strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {<br>// hantar pengepala 304 dan tiada kandungan<br>header("HTTP/1.1 304 Not Modified");<br>keluar;<br>}<br>}<code><font face="NSimsun">// assume $last_modify_time was the last the output was updated<br>// did the browser send If-Modified-Since header?<br>if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {<br>// if the browser cache matches the modify time<br>if ($last_modify_time == strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {<br>// send a 304 header, and no content<br>header("HTTP/1.1 304 Not Modified");<br>exit;<br>}<br>}</font>

Terdapat juga pengepala HTTP yang dipanggil Etag, yang digunakan untuk menentukan sama ada maklumat yang dicache adalah betul Kami akan menerangkannya kemudian.

Kuki

Seperti namanya, ia akan menghantar maklumat kuki yang disimpan dalam penyemak imbas anda ke pelayan.

<font face="NSimsun">Kuki: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120<code><font face="NSimsun">Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120; foo=bar</font>

Ia ialah satu set pasangan nilai nama yang dipisahkan oleh koma bertitik. Kuki juga boleh mengandungi id sesi.

Dalam PHP, kuki tunggal boleh diperolehi dengan mengakses tatasusunan $_COOKIE. Anda boleh terus menggunakan tatasusunan $_SESSION untuk mendapatkan pembolehubah sesi. Jika anda memerlukan id sesi, maka anda boleh menggunakan fungsi session_id() dan bukannya kuki.

<font face="NSimsun">echo $_COOKIE['foo'];<br>// output: bar<br>echo $_COOKIE['PHPSESSID'];<br>// output: r2t5uvjq435r4q7ib3vtdjq120<br>session_start();<br>echo session_id();<br>// output: r2t5uvjq435r4q7ib3vtdjq120</font>

Perujuk

Seperti namanya, pengepala akan mengandungi maklumat url rujukan.

Sebagai contoh, jika saya melawati halaman utama Nettuts dan mengklik pada pautan, maklumat pengepala ini akan dihantar ke penyemak imbas:
<font face="NSimsun">Referer: http://net.tutsplus.com/ </font>

Dalam PHP, nilai ini boleh diperolehi melalui $_SERVER['HTTP_REFERER'].

<font face="NSimsun">if (isset($_SERVER['HTTP_REFERER'])) {<code><font face="NSimsun">if (isset($_SERVER['HTTP_REFERER'])) {<br>$url_info = parse_url($_SERVER['HTTP_REFERER']);<br>// is the surfer coming from Google?<br>if ($url_info['host'] == 'www.google.com') {<br>parse_str($url_info['query'], $vars);<br>echo "You searched on Google for this keyword: ". $vars['q'];<br>}<br>}<br>// if the referring url was:<br>// http://www.google.com/search?source=ig&hl=en&rlz=&=&q=http headers&aq=f&oq=&aqi=g-p1g9<br>// the output will be:<br>// You searched on Google for this keyword: http headers</font>$url_info = parse_url($_SERVER['HTTP_REFERER']);

// adakah pelayar itu datang daripada Google?

if ($url_info['host'] == 'www.google.com') {

parse_str($url_info['query'], $vars);

echo "Anda mencari di Google untuk kata kunci ini: " $vars['q'];

}

}

// jika url yang dirujuk ialah:

// http://www. google.com/search?source=ig&hl=ms&rlz=&=&q=http headers&aq=f&oq=&aqi=g-p1g9<font face="NSimsun">Authorization: Basic bXl1c2VyOm15cGFzcw==</font>// outputnya ialah:

// Anda mencari di Google untuk kata kunci ini: http pengepala

Anda mungkin perasan perkataan “perujuk” salah eja sebagai “perujuk”.

Keizinan

Apabila halaman memerlukan kebenaran, penyemak imbas akan muncul tetingkap log masuk Selepas memasukkan nombor akaun yang betul, penyemak imbas akan menghantar permintaan HTTP, tetapi kali ini ia akan menyertakan pengepala seperti itu:

Bahagian maklumat yang terkandung dalam pengepala ini dikodkan base64. Sebagai contoh, base64_decode('bXl1c2VyOm15cGFzcw==') akan ditukar kepada 'myuser:mypass'. Dalam PHP, nilai ini boleh diperoleh menggunakan $_SERVER['PHP_AUTH_USER'] dan $_SERVER['PHP_AUTH_PW']. Kami akan menerangkan butiran lanjut dalam bahagian WWW-Authenticate. Respons HTTP dalam Pengepala HTTP Sekarang izinkan saya memahami maklumat respons HTTP dalam beberapa Pengepala HTTP biasa. Dalam PHP, anda boleh menetapkan maklumat respons pengepala melalui header()

. PHP telah menghantar beberapa maklumat pengepala yang diperlukan secara automatik, seperti kandungan yang dimuatkan, menetapkan kuki, dll... Anda boleh melihat perkara yang telah dihantar dan perkara yang akan dihantar melalui

senarai_headers()

maklumat pengepala fungsi. Anda juga boleh menggunakan fungsi

headers_sent()<font face="NSimsun">Cache-Control: max-age=3600, public</font>

untuk menyemak sama ada maklumat pengepala telah dihantar.

Kawalan Cache

Takrifan w3.org ialah: "Medan pengepala umum Cache-Control digunakan untuk menentukan arahan yang MESTI dipatuhi oleh semua mekanisme caching sepanjang rantaian permintaan/tindak balas dengan "mekanisme caching" termasuk beberapa perkara yang anda ISP mungkin Gateway dan maklumat proksi akan digunakan.

<font face="NSimsun">Cache-Control: no-cache </font>Contohnya:

<font face="NSimsun">Cache-Control: max-age=3600, public<a onclick="javascript:pageTracker._trackPageview('/outbound/article/www.w3.org');" href="http://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.9" target="_blank"></a></font> "Awam" bermaksud bahawa respons ini boleh dicache oleh sesiapa sahaja dan "umur maksimum" menunjukkan bilangan saat bahawa cache akan sah. Membenarkan tapak web anda dicache sangat mengurangkan masa muat turun dan lebar jalur, di samping meningkatkan kelajuan pemuatan penyemak imbas.

Anda juga boleh melumpuhkan cache dengan menetapkan arahan "tiada-cache":

<font face="NSimsun">Kawalan Cache: tanpa cache <p></p></font>

Untuk butiran lanjut, sila lawati <font face="NSimsun">Content-Type: text/html; charset=UTF-8</font>

w3.org

. Jenis Kandungan

Pengepala ini mengandungi "jenis mime" dokumen. Penyemak imbas akan menggunakan parameter ini untuk memutuskan cara menghuraikan dokumen. Sebagai contoh, halaman html (atau halaman php dengan output html) akan mengembalikan sesuatu seperti ini:

<font face="NSimsun">Content-Type: text/html; charset=UTF-8<span></span></font>

‘teks’ ialah jenis dokumen dan ‘html’ ialah subjenis dokumen. Pengepala ini juga termasuk lebih banyak maklumat, seperti charset. <font face="NSimsun">Content-Type: image/gif</font>

Jika ia adalah imej, respons ini akan dihantar: <font face="NSimsun">Content-Type: image/gif</font> Pelayar boleh menggunakan jenis mime untuk memutuskan sama ada untuk menggunakan program luaran atau sambungannya sendiri untuk membuka dokumen. Contoh berikut memanggil Adobe Reader:

<font face="NSimsun">Content-Type: application/pdf</font>

Muat terus, Apache biasanya secara automatik menentukan jenis mime dokumen dan menambah maklumat yang sesuai pada pengepala. Dan kebanyakan penyemak imbas mempunyai tahap toleransi kesalahan tertentu Mereka akan mengesan jenis mime secara automatik apabila maklumat tidak diberikan dalam pengepala atau tidak diberikan dengan betul.

Anda boleh menemui senarai jenis mime yang biasa digunakan di sini.

Dalam PHP anda boleh menggunakan finfo_file() untuk mengesan jenis ime fail.

Pelupusan Kandungan

Pengepala ini akan memberitahu penyemak imbas untuk membuka tetingkap muat turun fail dan bukannya cuba menghuraikan kandungan respons. Contohnya:

<font face="NSimsun">Content-Disposition: attachment; filename="download.zip"<code><font face="NSimsun">Content-Disposition: attachment; filename="download.zip"</font>

Ia akan menyebabkan penyemak imbas memaparkan kotak dialog seperti ini:

Perhatikan bahawa pengepala Jenis Kandungan yang sesuai juga akan dihantar

<font face="NSimsun">Content-Type: application/zip<br>Content-Disposition: attachment; filename="download.zip"<code><font face="NSimsun">Content-Type: application/zip<br>Content-Disposition: attachment; filename="download.zip"</font>

Panjang Kandungan

Apabila kandungan hendak dihantar ke penyemak imbas, pelayan boleh menggunakan pengepala ini untuk memaklumkan penyemak imbas saiz (bait) fail yang akan dihantar.

<font face="NSimsun">Panjang Kandungan: 89123<code><font face="NSimsun">Content-Length: 89123</font>

Maklumat ini agak berguna untuk memuat turun fail. Itulah sebabnya penyemak imbas mengetahui kemajuan muat turun.

Sebagai contoh, di sini saya menulis skrip tiruan untuk mensimulasikan muat turun perlahan.

<font face="NSimsun">// ia ialah fail zip<br>header('Content-Type: application/zip');<br>// 1 juta bait (kira-kira 1megabait) <br>header('Content-Length: 1000000');<br>// memuatkan dialog muat turun dan simpan sebagai download.zip<br>header('Content-Disposition: attachment; filename="download .zip"');<br>// 1000 kali 1000 bait data<br>untuk ($i = 0; $i <span style="WHITE- SPACE: pra"><code><font face="NSimsun">// it's a zip file<br>header('Content-Type: application/zip');<br>// 1 million bytes (about 1megabyte)<br>header('Content-Length: 1000000');<br>// load a download dialogue, and save it as download.zip<br>header('Content-Disposition: attachment; filename="download.zip"');<br>// 1000 times 1000 bytes of data<br>for ($i = 0; $i <span style="WHITE-SPACE: pre"></span>echo str_repeat(".",1000);<br><span style="WHITE-SPACE: pre"></span>// sleep to slow down the download<br><span style="WHITE-SPACE: pre"></span>usleep(50000);<br>}</font>echo str_repeat(".",1000);

// tidur untuk memperlahankan muat turun

usleep(50000);
}

Hasilnya adalah seperti ini:

<font face="NSimsun">// it's a zip file<br>header('Content-Type: application/zip');<br>// the browser won't know the size<br>// header('Content-Length: 1000000');<br>// load a download dialogue, and save it as download.zip<br>header('Content-Disposition: attachment; filename="download.zip"');<br>// 1000 times 1000 bytes of data<br>for ($i = 0; $i <span style="WHITE-SPACE: pre"></span>echo str_repeat(".",1000);<br><span style="WHITE-SPACE: pre"></span>// sleep to slow down the download<br><span style="WHITE-SPACE: pre"></span>usleep(50000);<br>}</font>Kini saya mengulas tajuk Panjang Kandungan:

<font face="NSimsun">// ia adalah fail zip<br>header('Content-Type: application/zip');<br>// penyemak imbas tidak akan mengetahui size<br>// header('Content-Length: 1000000');<br>// memuatkan dialog muat turun dan simpan sebagai download.zip<br>header('Content-Disposition: attachment; nama fail ="download.zip"');<br>// 1000 kali 1000 bait data<br>untuk ($i = 0; $i <span style="WHITE-SPACE: pra"></span></font>

echo str_repeat(".",1000);

// tidur untuk memperlahankan muat turun
/>usleep(50000);
}

Hasilnya menjadi begini:

Pelayar ini hanya akan memberitahu anda jumlah yang telah dimuat turun, tetapi bukan jumlah yang perlu dimuat turun secara keseluruhan. Dan bar kemajuan tidak akan menunjukkan kemajuan. <font face="NSimsun">Etag: "pub1259380237;gz"</font>

Etag

Ini adalah satu lagi pengepala yang dijana untuk caching. Ia akan kelihatan seperti ini: <font face="NSimsun">Etag: "pub1259380237;gz"</font>

<font face="NSimsun">If-None-Match: "pub1259380237;gz"</font>

Pelayan mungkin bertindak balas kepada penyemak imbas dengan maklumat ini bersama-sama dengan setiap fail yang dihantar. Nilai boleh mengandungi tarikh pengubahsuaian terakhir dokumen, saiz fail atau jumlah semak fail. Menyemak imbas menyimpannya bersama-sama dengan dokumen yang diterima. Kali seterusnya penyemak imbas meminta fail yang sama sekali lagi ia akan menghantar permintaan HTTP berikut:

<font face="NSimsun">If-None-Match: "pub1259380237;gz"<p></p></font>

Jika nilai Etag dokumen yang diminta konsisten dengannya, pelayan akan menghantar kod status 304 dan bukannya 2oo. dan tidak mengembalikan kandungan. Penyemak imbas kini akan memuatkan fail daripada cache. <font face="NSimsun">Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT</font>

Ubahsuai Terakhir

<font face="NSimsun">$modify_time = filemtime($file);<br>header("Last-Modified: " . gmdate("D, d M Y H:i:s", $modify_time) . " GMT");</font>Seperti namanya, maklumat pengepala ini menunjukkan masa pengubahsuaian terakhir dokumen dalam format GMT:

<font face="NSimsun">Terakhir Diubah Suai: Sab, 28 Nov 2009 03:50:37 GMT</font>

<font face="NSimsun">$modify_time = filemtime($file);<br>header("Terakhir Diubah Suai: " . gmdate("D, d M Y H:i:s", $ modify_time) . " GMT");</font> Ia menyediakan mekanisme caching alternatif. Penyemak imbas mungkin menghantar permintaan seperti ini:

<font face="NSimsun">If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT</font>

Wir haben dies bereits im Abschnitt „If-Modified-Since“ besprochen.

Standort

Dieser Header wird für die Umleitung verwendet. Wenn der Antwortcode 301 oder 302 ist, muss der Server diesen Header senden. Wenn Sie beispielsweise http://www.nettuts.com besuchen, erhält Ihr Browser die folgende Antwort:

<font face="NSimsun">HTTP/1.x 301 Moved Permanently<br>...<br>Location: http://net.tutsplus.com/<br>...</font>

In PHP können Sie Besucher auf diese Weise umleiten:
<font face="NSimsun">header('Location: http://net.tutsplus.com/');</font>

Standardmäßig wird der Statuscode 302 gesendet. Wenn Sie 301 senden möchten, schreiben Sie einfach so:

<font face="NSimsun">header('Location: http://net.tutsplus.com/', true, 301);</font>

Cookie setzen

Wenn eine Website Cookie-Informationen für Ihr Surfen festlegen oder aktualisieren muss, verwendet sie einen Header wie diesen:

<font face="NSimsun">Set-Cookie: skin=noskin; path=/; läuft ab=Sonntag, 29.11.2009 21:42:28 GMT<code><font face="NSimsun">Set-Cookie: skin=noskin; path=/; domain=.amazon.com; expires=Sun, 29-Nov-2009 21:42:28 GMT<br>Set-Cookie: session-id=120-7333518-8165026; path=/; domain=.amazon.com; expires=Sat Feb 27 08:00:00 2010 GMT</font>Set-Cookie: session-id=120-7333518-8165026; path=/; domain=.amazon.com; läuft ab=Sa. 27. Februar 2010 08:00:00 GMT

Jedes Cookie wird als separate Header-Information verwendet. Beachten Sie, dass das Setzen von Cookies über js nicht im HTTP-Header widergespiegelt wird.

In PHP können Sie Cookies über die Funktion setcookie()

setzen, und PHP sendet die entsprechenden HTTP-Header.

<font face="NSimsun">setcookie("TestCookie", "foobar");</font><font face="NSimsun">setcookie("TestCookie", "foobar");</font>

Es werden Header-Informationen wie diese gesendet:

<font face="NSimsun">Set-Cookie: TestCookie=foobar</font><font face="NSimsun">Set-Cookie: TestCookie=foobar</font>

Wenn keine Ablaufzeit angegeben ist, wird das Cookie nach dem Schließen des Browsers gelöscht.

WWW-Authentifizieren

Eine Website kann diesen Header über HTTP senden, um den Benutzer zu authentifizieren. Wenn der Browser diese Antwort im Header sieht, öffnet er ein Popup-Fenster.

<font face="NSimsun">WWW-Authenticate: Basic realm="Restricted Area"</font><font face="NSimsun">WWW-Authenticate: Basic realm="Restricted Area"</font>

Es wird so aussehen:

Im Kapitel des

PHP-Handbuchs gibt es einen einfachen Code, der zeigt, wie man so etwas mit PHP macht:

<font face="NSimsun">if (!isset($_SERVER['PHP_AUTH_USER'])) {<br>header('WWW-Authenticate: Basic realm="My Realm"');<br>header('HTTP/1.0 Fahami semua aspek Gambar Pengepala HTTP dan penerangan teks_HTML/Xhtml_Pengeluaran halaman web Unauthorized');<br>echo 'Text to send if user hits Cancel button';<br>exit;<br>} else {<br>echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";<br>echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";<br>}</font><font face="NSimsun">if (!isset($_SERVER['PHP_AUTH_USER'])) {</font>

header('WWW-Authenticate: Basic realm="My Realm"');

header('HTTP/1.0 Fahami semua aspek Gambar Pengepala HTTP dan penerangan teks_HTML/Xhtml_Pengeluaran halaman web Unauthorized');

echo 'Text zum Senden, wenn der Benutzer auf die Schaltfläche Abbrechen klickt';

exit;

} else {

echo "

Hallo { $_SERVER['PHP_AUTH_USER']}.

";<font face="NSimsun">Content-Encoding: gzip</font>echo "

Sie haben {$_SERVER['PHP_AUTH_PW']} als Ihr Passwort eingegeben.

"; }

Inhaltskodierung Dieser Header wird normalerweise gesetzt, wenn der zurückgegebene Inhalt komprimiert wird.

<font face="NSimsun">Inhaltskodierung: gzip</font>

Wenn Sie in PHP die Funktion

ob_gzhandler() aufrufen, wird dieser Header automatisch gesetzt.

Ursprüngliche Adresse: http://css9.net/all-about-http-headers/
Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn