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.
Apabila anda menaip url dalam bar alamat penyemak imbas, penyemak imbas anda akan membuat permintaan http serupa dengan yang berikut: GET /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-Pengekodan: gzip,deflate
Terima-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-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
Pragma: no-cache
Cache-Control: no-cacheBarisan pertama "Barisan Permintaan" ia menerangkan maklumat asas permintaan, dan selebihnya ialah pengepala HTTP.
Selepas permintaan selesai, penyemak imbas anda mungkin menerima respons HTTP berikut:
Pengekodan Pemindahan: dipotong
Tarikh: Sab, 28 Nov 2009 04:36:25 GMTPelayan: 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: gzipPelbagai: 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
2.
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:
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.
Tiga jenis permintaan yang paling biasa ialah: GET, POST dan HEAD Anda mungkin biasa dengan dua yang pertama dari proses menulis HTML.
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.
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:
Permintaan POST juga boleh digunakan pada AJAX, aplikasi, cURL... Dan semua borang muat naik fail dikehendaki menggunakan kaedah POST.
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.
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.
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
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:
Perhatikan bahawa ini hanyalah halaman yang dilindungi kata laluan Kotak pop timbul yang meminta kata laluan kelihatan seperti ini:
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 .
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.
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'].
<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:
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>
<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>
<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 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.
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>
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']);
if ($url_info['host'] == 'www.google.com') {
parse_str($url_info['query'], $vars);}
// 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 mungkin perasan perkataan “perujuk” salah eja sebagai “perujuk”.
KeizinanApabila 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()
senarai_headers()
maklumat pengepala fungsi. Anda juga boleh menggunakan fungsi
headers_sent()<font face="NSimsun">Cache-Control: max-age=3600, public</font>
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.
<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>
. 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.
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>
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);
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>
// 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>
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>
<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>
<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.
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>
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.
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:
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>
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/