Cách bật tất cả các phương thức HTTP trong Máy chủ HTTP Apache


16

Làm cách nào tôi có thể cho phép xử lý tất cả các phương thức HTTP như được định nghĩa trong RFC 2616 trên máy chủ web Apache? Đây sẽ là:

OPTIONS
GET
HEAD
POST
PUT
DELETE
TRACE
CONNECT

Tôi đang sử dụng Máy chủ HTTP Apache, phiên bản 2.2.22 (Ubuntu)
Đây là .htaccessTệp của tôi :

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

Đây là đầu ra tôi nhận được từ việc chạy Telnet - Không có phương thức 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.

Bất kỳ suy nghĩ về điều này?


Phiên bản apache nào để bạn sử dụng?

Phiên bản máy chủ: Apache / 2.2.22 (Ubuntu)

1
Bạn đang hạn chế các phương pháp trên /outputvị trí, nhưng bạn đang xin OPTIONSvào /vị trí. Giới hạn phương pháp không áp dụng cho các vị trí cha mẹ, chỉ áp dụng cho các vị trí sâu hơn.
lanzz

Câu trả lời:


7

Apache thực hiện tất cả các phương thức HTTP có liên quan cho nội dung tĩnh (các tệp thực tế được cung cấp trực tiếp bởi Apache). Đối với nội dung động (script CGI, mod_php, vv), Apache không quan tâm những gì các phương thức HTTP là (trừ khi nó được giới hạn rõ ràng với một <Limit>chỉ thị ), và vượt qua các yêu cầu để xử lý thích hợp vì nó là. Kịch bản của bạn cần xử lý phương thức cụ thể như dự định, không phải Apache. Ngay cả các phương pháp không chuẩn được truyền cho các trình xử lý động mà không có vấn đề gì.

Đã kiểm tra với một ASDFG / HTTP/1.1yêu cầu không hợp lệ được xử lý bởi một mod_phptập lệnh. Không có khiếu nại từ Apache, nhận được ASDFGtrong $_SERVER['REQUEST_METHOD']tập lệnh xử lý.


Cảm ơn câu trả lời của bạn. Tôi đã chỉnh sửa tệp .htaccess của mình để cho phép một số phương thức http. Tôi đã kiểm tra với TÙY CHỌN / HTTP / 1.0 qua telnet. Phương pháp http được phép không bao giờ thay đổi. Vấn đề này không phải là về apache, nhưng nó vẫn là một vấn đề đối với tôi để kích hoạt tất cả phương thức http.

Bạn có thể nên đăng chính xác những gì bạn đang cố gắng, phản hồi nào bạn muốn thấy, thay vào đó bạn thấy gì và cách bạn xử lý các yêu cầu đó ở phía máy chủ. Không có gì nên dừng OPTIONSyêu cầu, trừ khi bạn thực sự cấm nó với <Limit OPTIONS> deny from all </Limit>hoặc một điều khiển truy cập tương tự.
lanzz

2

dựa trên http://httpd.apache.org/docs/current/mod/core.html , những phương pháp này có thể được sửa đổi trong directory.htaccesscấu hình các file bằng cách sử dụng Limit method [method] ... > ... </Limit>chỉ thị

Về cơ bản, bạn phải nhận xét các tùy chọn như các tùy chọn bên dưới được sử dụng để chặn các phương thức.

<Limit POST PUT DELETE>
  Require valid-user
</Limit>


1

Cách chắc chắn để khắc phục điều này là tìm hiểu lý do tại sao Apache từ chối các yêu cầu trong trường hợp cụ thể của bạn . Bạn có thể học điều này từ nhật ký lỗi.

Trong trường hợp của tôi, tail -f /usr/local/apache/logs/error_logđã đưa ra điều này:

[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"]

Nó đề cập đến một quy tắc bảo mật và tệp đến từ : /usr/local/apache/conf/modsec-imh/01_base_rules.conf. Chỉnh sửa tập tin đó đã giải quyết vấn đề của tôi.


Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.