Làm cách nào để sử dụng máy chủ HTTP Python?
Psssst. BOOTCAMP PHÁT TRIỂN WEB 2023 sẽ bắt đầu vào ngày 01 THÁNG 2 NĂM 2023. Tham gia danh sách chờ, giữ chỗ trong khóa học thuần tập kéo dài 10 tuần của tôi và tìm hiểu các nguyên tắc cơ bản, HTML, CSS, JS, Tailwind, React, Next. jsvà hơn thế nữa. ✨ Show Python giúp tạo máy chủ HTTP cực kỳ dễ dàng, thông qua mô-đun Cụ thể, đối tượng Trước tiên, tôi muốn đề cập đến một cách nhanh chóng để chạy máy chủ HTTP từ bất kỳ thư mục nào mà không cần viết bất kỳ mã nào
Điều này sẽ chạy một máy chủ HTTP trên cổng 8000, phục vụ các tệp trong thư mục hiện tại. Tất nhiên, nó không phải là một máy chủ HTTP có đầy đủ tính năng như Nginx hay Apache, nhưng điều đó thường đủ tốt cho các nguyên mẫu hoặc cho các dự án thử nghiệm của riêng bạn Bây giờ, hãy sử dụng mô-đun đó trong mã của chúng ta để làm cho nó phục vụ theo chương trình “Xin chào, Thế giới. ” chuỗi tới bất kỳ ai đang kết nối trên cổng
Sau khi chạy chương trình này cục bộ, bạn có thể thử kết nối bằng trình duyệt Web với cổng http. //máy chủ cục bộ. 8000 Điều này phục vụ cùng một chuỗi Chúng tôi viết thư cho Nó hoạt động trên các yêu cầu GET vì chúng tôi đã triển khai phương thức xử lý 0Bạn cũng có thể triển khai 1, 2 và bất kỳ phương thức HTTP nào khác
Python có rất nhiều thư viện khác nhau mà chúng ta có thể sử dụng để xử lý các ứng dụng được xây dựng trên máy chủ Web, bao gồm Flask và Django rất phổ biến Bất kể bạn là loại kỹ sư phần mềm nào, tại một thời điểm nào đó trong sự nghiệp của mình, bạn sẽ phải tương tác với các máy chủ web. Có thể bạn đang xây dựng máy chủ API cho dịch vụ phụ trợ. Hoặc có thể bạn chỉ đang định cấu hình máy chủ web cho trang web của mình Trong bài viết này, tôi sẽ trình bày cách tạo máy chủ web http cơ bản nhất trong Python Nhưng vì tôi muốn đảm bảo rằng bạn hiểu những gì chúng tôi đang xây dựng, trước tiên tôi sẽ giới thiệu tổng quan về máy chủ web là gì và cách chúng hoạt động Nếu bạn đã biết cách máy chủ web hoạt động, thì bạn có thể Máy chủ HTTP là gì?Máy chủ web HTTP không là gì ngoài một quy trình đang chạy trên máy của bạn và thực hiện chính xác hai việc 1- Lắng nghe các yêu cầu http đến trên một địa chỉ ổ cắm TCP cụ thể (địa chỉ IP và số cổng mà tôi sẽ nói sau) 2- Xử lý yêu cầu này và gửi phản hồi lại cho người dùng Hãy để tôi làm cho quan điểm của tôi ít trừu tượng hơn Hãy tưởng tượng bạn kéo trình duyệt Chrome lên và nhập www. Yahoo. com trên thanh địa chỉ Tất nhiên, bạn sẽ nhận được trang chủ Yahoo hiển thị trên cửa sổ trình duyệt của mình Nhưng những gì thực sự vừa xảy ra dưới mui xe? Trên thực tế, có rất nhiều điều đã xảy ra và tôi có thể dành cả một bài báo để giải thích điều kỳ diệu đằng sau việc điều này đã xảy ra như thế nào Nhưng để đơn giản, tôi sẽ lược bỏ một số chi tiết và nói về vấn đề này ở cấp độ rất cao Ở cấp độ cao, khi bạn gõ www. Yahoo. com trên trình duyệt của bạn, trình duyệt của bạn sẽ tạo một thông báo mạng gọi là yêu cầu HTTP Yêu cầu này sẽ chuyển đến tận máy tính Yahoo có máy chủ web đang chạy trên đó. Máy chủ web này sẽ chặn yêu cầu của bạn và xử lý nó bằng cách phản hồi lại bằng html của trang chủ Yahoo Cuối cùng, trình duyệt của bạn hiển thị html này trên màn hình và đó là những gì bạn thấy trên màn hình của mình Mọi tương tác với trang chủ Yahoo sau đó (ví dụ: khi bạn nhấp vào một liên kết) sẽ bắt đầu một yêu cầu mới và phản hồi giống hệt như yêu cầu đầu tiên Xin nhắc lại, máy nhận yêu cầu http có một quy trình phần mềm được gọi là máy chủ web đang chạy trên đó. Máy chủ web này chịu trách nhiệm chặn các yêu cầu này và xử lý chúng một cách thích hợp Được rồi, bây giờ bạn đã biết máy chủ web là gì và chính xác chức năng của nó là gì, bạn có thể tự hỏi làm thế nào để yêu cầu đến được máy yahoo đó ngay từ đầu? Câu hỏi hay Trên thực tế, đây là một trong những câu hỏi yêu thích của tôi mà tôi hỏi các ứng viên tiềm năng trong một cuộc phỏng vấn viết mã Hãy để tôi giải thích làm thế nào, nhưng một lần nữa…. ở một cấp độ cao Địa chỉ ổ cắm TCPBất kỳ tin nhắn http nào (dù là yêu cầu hay phản hồi) đều cần biết cách đến được đích của nó Để đến đích, mỗi thông báo http mang một địa chỉ được gọi là địa chỉ TCP đích Và mỗi địa chỉ TCP bao gồm một địa chỉ IP và một số cổng Tôi biết tất cả những từ viết tắt này (TCP, IP, v.v. ) có thể quá sức nếu khái niệm mạng của bạn không mạnh Tôi sẽ cố gắng làm cho nó đơn giản nhưng nếu bạn quan tâm đến việc nâng cao kiến thức của mình về các khái niệm mạng, tôi thực sự khuyên bạn nên đọc cuốn sách này của Ross và Kurose Vậy địa chỉ đó ở đâu khi tất cả những gì bạn làm là gõ www. Yahoo. com trên trình duyệt của bạn? Chà, tên miền này được chuyển đổi thành địa chỉ IP thông qua cơ sở dữ liệu phân tán lớn có tên là DNS Bạn có muốn kiểm tra xem địa chỉ IP này là gì không? Dễ dàng. Đi đến thiết bị đầu cuối của bạn và làm như sau
Như bạn có thể thấy, DNS sẽ dịch yahoo. com đến bất kỳ địa chỉ nào ở trên Chỉ riêng địa chỉ IP sẽ cho phép thông báo HTTP đến đúng máy, nhưng bạn vẫn cần số cổng để yêu cầu HTTP đến chính xác máy chủ web Nói cách khác, máy chủ web là một ứng dụng mạng thông thường đang lắng nghe trên một cổng cụ thể Và yêu cầu http PHẢI được gửi đến cổng đó Vậy số cổng ở đâu khi bạn gõ www. Yahoo. com? Theo mặc định, số cổng là 80 cho http và 443 cho https, vì vậy mặc dù bạn chưa chỉ định rõ ràng số cổng nhưng nó vẫn ở đó Và nếu máy chủ web đang nghe số cổng không mặc định (không phải 80 hay 443), bạn phải chỉ định rõ ràng số cổng như thế này Bây giờ bạn đã có tất cả các thông tin cần thiết để tạo một máy chủ web http trong Python Vì vậy, không cần phải quảng cáo thêm, hãy bắt đầu Tạo một tệp HTML đơn giảnĐây là những gì chúng tôi muốn làm Chúng tôi muốn tạo một máy chủ http đơn giản phục vụ trang web html tĩnh Hãy tạo trang html của chúng tôi
Bây giờ hãy tiếp tục và lưu tệp này dưới dạng index. html Với trang web mà chúng tôi muốn phân phát, bước tiếp theo là tạo một máy chủ web sẽ phục vụ trang html này Tạo một máy chủ web HTTPĐể tạo máy chủ web trong Python 3, bạn cần nhập hai mô-đun. http. máy chủ và máy chủ ổ cắm
Hãy xem mã để tạo một máy chủ http ________số 8_______Cứ như vậy, chúng ta có một máy chủ http chức năng Bây giờ hãy mổ xẻ từng dòng mã này Đầu tiên, như tôi đã đề cập trước đó, máy chủ web là một quá trình lắng nghe các yêu cầu đến trên địa chỉ TCP cụ thể Và như bạn đã biết, địa chỉ TCP được xác định bằng địa chỉ IP và số cổng Thứ hai, một máy chủ web cũng cần được cho biết cách xử lý các yêu cầu gửi đến Các yêu cầu đến này được xử lý bởi các trình xử lý đặc biệt. Bạn có thể coi máy chủ web là bộ điều phối, yêu cầu đến, máy chủ http kiểm tra yêu cầu và gửi nó đến bộ xử lý được chỉ định Tất nhiên những người xử lý này có thể làm bất cứ điều gì bạn muốn Nhưng bạn nghĩ trình xử lý cơ bản nhất là gì? Chà, đó sẽ là một trình xử lý chỉ phục vụ một tệp tĩnh Nói cách khác, khi tôi vào yahoo. com, máy chủ web ở đầu bên kia sẽ gửi lại một tệp html tĩnh Trên thực tế, đây chính xác là những gì chúng tôi đang cố gắng thực hiện Và đó, bạn của tôi, là cái mà http. người phục vụ. SimpleHTTPRequestHandler là. một trình xử lý yêu cầu HTTP đơn giản phục vụ các tệp từ thư mục hiện tại và bất kỳ thư mục con nào của nó. Bây giờ hãy nói về socketserver. Lớp máy chủ TCP Một phiên bản của TCPServer mô tả một máy chủ sử dụng giao thức TCP để gửi và nhận tin nhắn (http là giao thức lớp ứng dụng trên TCP) Để khởi tạo Máy chủ TCP, chúng ta cần hai thứ 1- Địa chỉ TCP (địa chỉ IP và số cổng) 2- Người xử lý
Như bạn có thể thấy, địa chỉ TCP được truyền dưới dạng một bộ (địa chỉ ip, số cổng) Chuyển một chuỗi trống làm địa chỉ IP có nghĩa là máy chủ sẽ lắng nghe trên bất kỳ giao diện mạng nào (tất cả các địa chỉ IP có sẵn) Và vì PORT lưu trữ giá trị của 8080, nên máy chủ sẽ lắng nghe các yêu cầu đến trên cổng đó Đối với trình xử lý, chúng tôi đang chuyển trình xử lý đơn giản mà chúng tôi đã đề cập trước đó
Vậy còn serve_forever thì sao? serve_forever là một phương thức trên phiên bản TCPServer khởi động máy chủ và bắt đầu lắng nghe cũng như phản hồi các yêu cầu đến Thật tuyệt, hãy lưu tệp này dưới dạng máy chủ. py trong cùng thư mục với chỉ mục. html vì theo mặc định SimpleHTTPRequestHandler sẽ tìm một tệp có tên là index. html trong thư mục hiện tại Trong thư mục đó, khởi động máy chủ web
Bằng cách đó, bây giờ bạn có một máy chủ HTTP đang lắng nghe trên bất kỳ giao diện nào tại cổng 8080 để chờ các yêu cầu http đến Bây giờ là lúc cho những điều thú vị Mở trình duyệt của bạn và gõ localhost. 8080 trên thanh địa chỉ Đáng kinh ngạc. Có vẻ như mọi thứ đều hoạt động tốt Nhưng này, localhost là gì? localhost là tên máy chủ có nghĩa là máy tính này. Nó được sử dụng để truy cập các dịch vụ mạng đang chạy trên máy chủ thông qua giao diện mạng loopback Và vì máy chủ web đang lắng nghe trên bất kỳ giao diện nào, nên nó cũng đang lắng nghe trên giao diện loopback Bạn muốn biết địa chỉ IP nào tương ứng với localhost? bạn hiểu rồi
Trên thực tế, bạn hoàn toàn có thể thay thế localhost bằng 127. 0. 0. 1 trong trình duyệt của bạn và bạn vẫn nhận được kết quả tương tự Hãy thử nó ra 🙂 Một lời cuối cùngBạn thực sự có thể khởi động một máy chủ web bằng python mà không cần phải viết bất kỳ tập lệnh nào Chỉ cần truy cập thiết bị đầu cuối của bạn và thực hiện các thao tác sau (nhưng hãy đảm bảo rằng bạn đang sử dụng python 3)
Theo mặc định, máy chủ này sẽ lắng nghe trên tất cả các giao diện và trên cổng 8080 Nếu bạn muốn nghe giao diện cụ thể thì làm như sau
Cũng bắt đầu từ Python 3. 7, bạn có thể sử dụng cờ –thư mục để cung cấp các tệp từ một thư mục không nhất thiết phải là thư mục hiện tại. Vì vậy, câu hỏi bây giờ là, tại sao bạn cần phải viết một tập lệnh khi bạn có thể gọi máy chủ một cách dễ dàng từ thiết bị đầu cuối? Chà, hãy nhớ rằng bạn đang sử dụng SimpleHTTPRequestHandler. Nếu bạn muốn tạo trình xử lý tùy chỉnh của mình (điều mà bạn có thể sẽ muốn làm) thì bạn sẽ không thể thực hiện việc đó từ thiết bị đầu cuối Máy chủ HTTP hoạt động như thế nào trong Python?Máy chủ web HTTP chỉ đơn giản là một quá trình chạy trên một máy và lắng nghe các Yêu cầu HTTP đến theo một IP và số Cổng cụ thể, sau đó gửi lại phản hồi cho yêu cầu đó< . .
Python có máy chủ HTTP không?Python đi kèm với một mô-đun tích hợp được gọi là SimpleHTTPServer , nói cách khác là một máy chủ HTTP đơn giản cung cấp cho bạn các trình xử lý yêu cầu GET và HEAD tiêu chuẩn. Mô-đun này có thể biến bất kỳ thư mục nào trong hệ thống của bạn thành máy chủ web.
Máy chủ HTTP Python có an toàn không?Cảnh báo http. máy chủ không được khuyến nghị sản xuất . Nó chỉ thực hiện kiểm tra bảo mật cơ bản. Nó không nêu rõ những lỗ hổng bảo mật mà máy chủ gặp phải. |