sách gpt4 ăn đã đi

Gorang. Sử dụng cái gì? http.ServeFile(..) hay http.FileServer(..)?

In lại Tác giả: IT Lão Cao Thời gian cập nhật: 28-10-2023 13:00:03 24 4
mua khóa gpt4 giày nike

Tôi hơi bối rối. Nhiều ví dụ cho thấy việc sử dụng cả hai:http.ServeFile(..)http.FileServer(..), nhưng có vẻ như chúng có chức năng rất gần nhau. Tôi cũng không tìm thấy thông tin nào về cách thiết lập trình xử lý NotFound tùy chỉnh.

// Thao tác này sẽ xóa đoạn "/static/" khỏi đường dẫn
fs := http.FileServer(http.Dir("static"))
http. Xử lý("/tĩnh/", http. StripPrefix("/tĩnh/", fs))

// Cách này cũng hiệu quả, nhưng đoạn "/static2/" vẫn còn và cần phải được phân chia thủ công
http.HandleFunc("/static2/", hàm(w http.ResponseWriter, r *http.Request) {
http.ServeFile(w, r, r.URL.Path[1:])
})

http.ListenAndServe(":8080", không có)

Tôi đã thử đọc mã nguồn và tất cả đều sử dụng serveFile(ResponseWriter, *Request, FileSystem, chuỗi, bool) Chức năng cấp thấp. Tuy nhiên http.FileServer 返回 trình xử lý tập tin và đi kèm với cái riêng của nó Phục vụHTTP() phương thức và thực hiện một số công việc chuẩn bị (chẳng hạn như path.Clean()) trước khi phân phát tệp.

Vậy tại sao cần có sự tách biệt này? Phương pháp nào hoạt động tốt hơn? Và làm cách nào để đặt trình xử lý NotFound tùy chỉnh, ví dụ như khi không tìm thấy tệp được yêu cầu?

câu trả lời hay nhất

Sự khác biệt chính là http.FileServer Cung cấp hiệu quả ánh xạ gần như 1: 1 của tiền tố HTTP tới hệ thống tệp. Bằng tiếng Anh đơn giản, nó cung cấp một đường dẫn thư mục đầy đủ. và tất cả con cái của nó.

Giả sử bạn có một tập tin có tên /trang chủ/bob/tĩnh thư mục và bạn có các cài đặt sau:

fs := http.FileServer(http.Dir("/home/bob/static"))
http. Xử lý("/tĩnh/", http. StripPrefix("/tĩnh", fs))

Máy chủ của bạn sẽ chấp nhận yêu cầu như/tĩnh/foo/thanh và cung cấp /home/bob/static/foo/bar (hoặc bất cứ điều gì trong 404)

Ngược lại,Phục vụ tập tin là một trình trợ giúp cấp thấp hơn có thể được sử dụng để triển khai một cái gì đó tương tự như FileServer hoặc triển khai các sửa đổi đường dẫn của riêng bạn và bất kỳ thứ gì. Nó chỉ lấy tệp cục bộ được đặt tên và gửi nó qua kết nối HTTP. Bản thân nó sẽ không cung cấp toàn bộ tiền tố thư mục (trừ khi bạn viết một trình xử lý để thực hiện một số tra cứu tương tự như FileServer)

Để ýPhục vụ một hệ thống tệp một cách ngây thơ là một việc có thể nguy hiểm (có nhiều cách tiềm ẩn để phá vỡ cây gốc), vì vậy tôi khuyên bạn nên làm điều đó trừ khi bạn真的Biết bạn đang làm gì, hãy sử dụng http.FileServerhttp.Dir Bởi vì chúng chứa các kiểm tra để đảm bảo rằng người ta không thể thoát ra khỏi FS, điều này Phục vụ tập tin KHÔNG.

phụ lụcThật không may, câu hỏi thứ hai của bạn, làm cách nào để tạo trình xử lý NotFound tùy chỉnh, không dễ trả lời. Bởi vì như bạn đã nhận thấy, đây là từ hàm bên trong phục vụTệp được gọi nên không có nơi nào siêu nhân có thể dễ dàng vào được. Có thể có một số điều lén lút như sử dụng của riêng bạn Người phản hồi Chặn phản hồi, nó sẽ chặn mã phản hồi 404, nhưng tôi sẽ giao việc đó cho bạn.

Về Golang. Sử dụng cái gì? http.ServeFile(..) hay http.FileServer(..)? , chúng tôi đã tìm thấy một câu hỏi tương tự trên Stack Overflow: https://stackoverflow.com/questions/28793619/

24 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress