Cara mengaktifkan semua metode HTTP di Apache HTTP Server

16

Bagaimana saya bisa mengaktifkan penanganan semua metode HTTP sebagaimana didefinisikan dalam RFC 2616 di server web Apache? Ini akan menjadi:

OPTIONS
GET
HEAD
POST
PUT
DELETE
TRACE
CONNECT

Saya menggunakan Apache HTTP Server, versi 2.2.22 (Ubuntu)
Ini .htaccessFile saya :

<Location /output>
        Dav On
    <LimitExcept GET HEAD OPTIONS PUT>
        Allow from all
    </LimitExcept>
</Location>

Ini adalah output yang saya dapatkan dari menjalankan Telnet - Tidak ada metode PUT:

Escape character is '^]'.
OPTIONS / HTTP/1.0

HTTP/1.1 200 OK
Date: Tue, 09 Oct 2012 06:56:42 GMT
Server: Apache/2.2.22 (Ubuntu)
Allow: GET,HEAD,POST,OPTIONS
Vary: Accept-Encoding
Content-Length: 0
Connection: close
Content-Type: text/html

Connection closed by foreign host.

Ada pemikiran tentang ini?


sumber
versi apache apa yang Anda gunakan?
Versi server: Apache / 2.2.22 (Ubuntu)
1
Anda membatasi metode di /outputlokasi, tetapi Anda meminta OPTIONSdi /lokasi. Batas metode tidak berlaku untuk lokasi induk, hanya untuk lokasi yang lebih dalam.
lanzz

Jawaban:

7

Apache mengimplementasikan semua metode HTTP yang relevan untuk konten statis (file aktual disajikan langsung oleh Apache). Untuk konten dinamis (skrip CGI,mod_php ,, dll), Apache tidak peduli apa metode HTTP itu (kecuali jika secara eksplisit dibatasi dengan <Limit>arahan ), dan meneruskan permintaan ke penangan yang sesuai sebagaimana adanya. Script Anda perlu menangani metode spesifik sebagaimana dimaksud, bukan Apache. Bahkan metode non-standar diteruskan ke penangan dinamis tanpa masalah.

Diuji dengan ASDFG / HTTP/1.1permintaan yang tidak valid yang ditangani oleh mod_phpskrip. Tidak ada keluhan dari Apache, diterima ASDFGdi $_SERVER['REQUEST_METHOD']skrip handler.

lanzz
sumber
Terima kasih atas jawaban anda. Saya mengedit file .htaccess saya untuk memungkinkan beberapa metode http. Saya memeriksa dengan PILIHAN / HTTP / 1.0 melalui telnet. Metode http yang diizinkan tidak pernah berubah. Masalah ini mungkin bukan tentang apache, tetapi masih merupakan masalah bagi saya untuk mengaktifkan semua metode http.
Anda mungkin harus memposting persis apa yang Anda coba, respons apa yang Anda harapkan untuk dilihat, apa yang Anda lihat, dan bagaimana Anda menangani permintaan tersebut di sisi server. Seharusnya tidak ada yang menghentikan OPTIONSpermintaan, kecuali jika Anda secara tegas melarangnya dengan <Limit OPTIONS> deny from all </Limit>atau kontrol akses yang serupa.
lanzz
2

berdasarkan http://httpd.apache.org/docs/current/mod/core.html , metode ini dapat dimodifikasi dalam directorydan .htaccesskonfigurasi file menggunakan Limit method [method] ... > ... </Limit>arahan

Pada dasarnya Anda harus mengomentari opsi seperti yang di bawah ini yang digunakan untuk memblokir metode.

<Limit POST PUT DELETE>
  Require valid-user
</Limit>
MaVRoSCy
sumber
1

Cara pasti untuk memperbaikinya adalah untuk mengetahui mengapa Apache menolak permintaan dalam kasus khusus Anda . Anda dapat mempelajari ini dari log kesalahan.

Dalam kasus saya, tail -f /usr/local/apache/logs/error_logberikan ini:

[Sun Sep 18 08:39:52.570672 2016] [:error] [pid 32076:tid 140086307448576] 
[client 93.125.93.77] ModSecurity: Access denied with code 501 (phase 2). 
Match of "rx ^((?:(?:POS|GE)T|OPTIONS|HEAD))$" against "REQUEST_METHOD" 
required. [file "/usr/local/apache/conf/modsec-imh/01_base_rules.conf"] [line 
"32"] [id "960032"] [msg "Method is not allowed by policy"] [severity 
"CRITICAL"] [tag "POLICY/METHOD_NOT_ALLOWED"] [hostname "104.244.122.237"] 
[uri "/products/order/items/45"] [unique_id "V96LGGj0eu0AAH1MR8sAAACB"]

Ia menyebutkan aturan keamanan dan file itu berasal dari: /usr/local/apache/conf/modsec-imh/01_base_rules.conf. Mengedit file itu memecahkan masalah saya.

Anton Khamets
sumber