2009-09-13 20 views

Trả lời

14
import os 

if os.environ['REQUEST_METHOD'] == 'GET': 
    # blah 
0

Đây không phải là câu trả lời trực tiếp cho câu hỏi của bạn. Nhưng câu hỏi của bạn bắt nguồn từ việc làm những điều sai trái.

Không viết các tập lệnh Python CGI.

Viết một ứng dụng mod_wsgi. Vẫn còn tốt hơn, sử dụng một khuôn khổ web Python. Có hàng tá. Chọn một cái như Werkzeug.

Tiêu chuẩn WSGI (được mô tả trong PEP 333) giúp bạn tìm kiếm mọi thứ trong yêu cầu web dễ dàng hơn nhiều.

Việc triển khai mod_wsgi nhanh hơn và an toàn hơn so với CGI.

Một khung công tác web cũng đơn giản hơn việc viết tập lệnh CGI hoặc ứng dụng mod_wsgi của riêng bạn.

+0

Tôi sẽ xem xét mod_wsgi, nhưng đây chỉ là giải pháp tạm thời, vì chúng tôi sẽ sớm chuyển sang dango. – cfischer

0

Tại sao bạn cần phân biệt giữa GET và HEAD?

Thông thường bạn không nên phân biệt và nên xử lý yêu cầu HEAD giống như GET. Điều này là do yêu cầu HEAD có nghĩa là trả về cùng một tiêu đề giống như GET. Sự khác biệt duy nhất là sẽ không có nội dung phản hồi. Chỉ vì không có nội dung phản hồi mặc dù không có nghĩa là bạn không còn phải trả lại tiêu đề Nội dung có độ dài hợp lệ hoặc các tiêu đề khác, phụ thuộc vào nội dung phản hồi.

Trong mod_wsgi, mà nhiều người đang trỏ bạn vào, nó thực sự sẽ cố ý thay đổi phương thức yêu cầu từ HEAD thành GET trong một số trường hợp để bảo vệ chống lại những người xử lý sai HEAD một cách sai lầm. Trường hợp cụ thể mà việc này được thực hiện là nơi bộ lọc đầu ra Apache được đăng ký. Lý do mà nó được thực hiện trong trường hợp này là do bộ lọc đầu ra có thể mong đợi để xem nội dung phản hồi và từ đó tạo ra các tiêu đề phản hồi bổ sung. Nếu bạn quyết định không tạo bất kỳ nội dung phản hồi nào cho yêu cầu HEAD, bạn sẽ mất bộ lọc đầu ra của nội dung và các tiêu đề mà họ thêm vào có thể không đồng ý với những gì sẽ được trả về từ yêu cầu GET. Kết quả cuối cùng của việc này là bạn có thể lưu trữ bộ nhớ cache và hoạt động của trình duyệt.

Điều tương tự cũng có thể áp dụng cho các tập lệnh CGI phía sau Apache vì các bộ lọc đầu ra vẫn có thể được thêm vào trong trường hợp đó. Đối với các kịch bản CGI, không có gì tại chỗ mặc dù để bảo vệ chống lại người dùng là ngu ngốc và làm những việc khác nhau cho một yêu cầu HEAD.

+0

Một số trình kiểm tra liên kết hợp lệ truy cập vào tài nguyên trên trang web của tôi bằng phương thức HEAD. Họ vô hại. OTOH, một rô bốt chương trình đang định vị trang web của tôi với GET truy cập vào cùng một tài nguyên. Đó là lý do tại sao tôi cần phải nói sự khác biệt. – cfischer

+0

Nếu bạn đang nhận được yêu cầu mà bạn không muốn, có lẽ bạn đang cố gắng chặn nó ở máy chủ bằng cách xem chuỗi tác nhân bằng cách sử dụng mô-đun viết lại hoặc mô-đun khác cho phép kiểm tra tiêu đề. Tại sao nó vẫn cần phải đi qua kịch bản CGI? –

Các vấn đề liên quan