Mod_php onur HEAD isteklerini doğru mu?

2 Cevap php

HTTP/1.1 RFC "HEAD yöntemi, sunucu yanıt bir mesaj gövdesi göndermemesi gerektiği dışında GET aynıdır." Öngörülüyor Ben Apache RFC onur ama modüller yok biliyorum. Benim sorum bu onur mod_php5 etmez mi?

Ben sadece PHP geliştiricileri ile kendilerini kontrol etmesi gerektiğini söyleyerek bir yazı geldi, çünkü ben sormak nedeni:

    if (stripos($_SERVER['REQUEST_METHOD'], 'HEAD') !== FALSE) {
        exit();
    }

Ben o mod_php hala varsayılan senaryonun kalanını idam iddia 2002 gibi gelen HEAD istekleri ve bazı eski hata bilet aldıktan sonra yönlendirme / mod_rewrite'ı gibi garip şeyler denemek söyleyerek bazı insanlar daha, ikinci ve çok kadar açık değil diğer Google'da. Ben sadece çalıştırmak için PECL :: HTTP kullanarak hızlı bir test koştu

    http_head('http://mysite.com/test-head-request.php');

yerken:

    <?php error_log('REST OF SCRIPT STILL RAN'); ?>

Test-kafa-request.php içinde script kalanı hala idam görmek, ve o did değil için.

Ben bunu çözmek için yeterli olmalıdır anlamaya, ama daha fazla geri bildirim almak ve belki de bu konuda merak etti herkes için karışıklığı temizlemek yardım etmek istiyorum. Herkes kendi başının üst (hayır cinas amaçlanan) kapalı bilir Yani eğer - veya HEAD isteklerini almak için kullanmak herhangi kuralları vardır, bu harika olurdu. Aksi halde, daha sonra C kaynağını grep ve benim bulguları ile bir yorum cevap veririz. Teşekkürler.

2 Cevap

The HEAD method is identical to GET except that the server MUST NOT return a message-body in the response.

Onay not yapılmalıdır nedeni budur. Müşteriler güven olmalıdır GET (veritabanı bağlantısı, işleme, vs ..) verildiği gibi KAFA istekleri süreç sadece aynı olduğunu.

Addendum:

Yaparken

HEAD /test.php?a=3 HTTP/1.1
Host: somesite.com

PHP hala bir GET isteği olmasa sorgu dizesi yerleştirilen değişkenler ile $ _GET (ve $ _REQUEST) dolduracaktır. Bu KAFA tanımı ile uyum sağlar.

Ben sadece bu kod bölümünü içeren bir PHP dosyası, temp.php ile hızlı bir test yaptım:

<?php

echo "Hello, World!\n";

die;


Sending an HTTP GET request to that file gets me the content of the page :

$ telnet localhost 80
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
GET /temp/temp.php HTTP/1.1
Host: localhost

HTTP/1.1 200 OK
Date: Thu, 08 Apr 2010 20:17:35 GMT
Server: Apache/2.2.12 (Ubuntu)
X-Powered-By: PHP/5.3.2RC2
Vary: Accept-Encoding
Content-Length: 14
Content-Type: text/html

Hello, World!


While sending an HTTP HEAD request doesn't :

$ telnet localhost 80
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HEAD /temp/temp.php HTTP/1.1
Host: localhost

HTTP/1.1 200 OK
Date: Thu, 08 Apr 2010 20:17:50 GMT
Server: Apache/2.2.12 (Ubuntu)
X-Powered-By: PHP/5.3.2RC2
Vary: Accept-Encoding
Content-Type: text/html


Not sure this is always true, though...

Ben bir GET veya HEAD isteği başlamıştı eğer ben, PHP kodu, kendimi test etmek yaşadım (some time ago ; was PHP 5.1) bir durum hatırlıyorum.



EDIT : After an additionnal test

Benim temp.php Şimdi dosya bu içerir: Ben sadece başka bir test yaptım:

<?php

file_put_contents('/tmp/a.txt', $_SERVER['REQUEST_METHOD'], FILE_APPEND);
var_dump($_SERVER['REQUEST_METHOD']);

die;

HTTP HEAD isteği göndererek, bu olsun:

$ telnet localhost 80
Trying ::1...
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
HEAD /temp/temp.php HTTP/1.1
Host: localhost

HTTP/1.1 200 OK
Date: Thu, 08 Apr 2010 20:21:30 GMT
Server: Apache/2.2.12 (Ubuntu)
X-Powered-By: PHP/5.3.2RC2
Vary: Accept-Encoding
Content-Type: text/html

Connection closed by foreign host.

Burada, hiçbir çıkış.

ANCAK, / tmp / a.txt dosyasına bakarak:

$ cat /tmp/a.txt 
HEAD

So : no output sent by the server doesn't mean that there is nothing done ;-)