Chào mừng bạn đến với McBurger, một cửa hàng burger lạ mắt (đúng đúng). Mùi của dầu mỡ khô xâm chiếm lỗ mũi của bạn, khiến ruột của bạn bị nhói lên với sự pha trộn của sự ghê tởm và thích thú. Bạn kiên nhẫn chờ đợi xếp hàng đằng sau một người mẹ nên là con người. Cuối cùng, bạn gặp mặt thu ngân tuổi teen đối mặt, không phải không có gì đáng tiếc. Bạn đặt một chiếc burger (bất ngờ) và một số khoai tây chiên. Bạn trả tiền và đợi một chút cho đơn đặt hàng của bạn.
Sau một thời gian, bạn nhận được bánh burger của bạn, chỉ để phát hiện ra rằng họ đã quên khoai tây chiên của bạn! Bạn đi đến máy tính tiền một lần nữa, và yêu cầu họ. Bạn lại chờ đợi khoai tây chiên đã sẵn sàng. Một khi họ đang ở, bạn gồ ghề mọi thứ và rời đi.
Điều này có liên quan gì đến bất cứ điều gì?
Nhân viên thu ngân Angsty là máy chủ, có lẽ đang chạy PHP.
Bạn là khách hàng, có thể là một trình duyệt web có khả năng hiểu HTML/CSS/JS.
Để có được dịch vụ, bạn tiếp cận quầy và nói "Tôi muốn một chiếc burger". McBurger sau đó chuẩn bị và cho bạn một chiếc burger.
Để có được dịch vụ, một trình duyệt web tiếp cận máy chủ và nói "Tôi muốn trang này". Máy chủ của bạn sau đó chuẩn bị và cung cấp cho bạn một trang.
Khía cạnh quan trọng nhất của điều này là không có sự pha trộn của khách hàng và McBurger. Bạn sẽ không chuẩn bị khoai tây chiên của riêng mình và McBurger sẽ không uống sữa lắc của bạn. Theo cách tương tự, trình duyệt web sẽ không chạy PHP và máy chủ sẽ không chạy JavaScript cho bạn. Nếu bạn muốn McBurger cung cấp cho bạn kem caramel nổi tiếng của họ, bạn phải tiếp cận quầy và yêu cầu một cái. Nếu bạn muốn trang web của mình lưu một cái gì đó vào DB khi bạn nhấp vào nút, bạn phải tiếp cận máy chủ và yêu cầu nó làm như vậy.
Bạn và McBurger giao tiếp qua âm thanh. Trình duyệt và máy chủ giao tiếp qua HTTP.
Hãy xem HTTP.
Thỏ, bạn đã đưa tôi đi đâu?
Nếu bạn đang chạy trên khá nhiều bất kỳ bản phân phối Linux hoặc máy Mac nào, bạn đã cài đặt Netcat. Nếu bạn đang ở trên Windows, xin lỗi, bạn sẽ phải lấy từ của tôi cho phần tiếp theo hoặc tải xuống cổng NC hoặc máy khách Telnet thuộc loại nào đó.
Dù sao, hãy mở thiết bị đầu cuối yêu thích của bạn và hãy nói chuyện với một số máy chủ trên cổng 80 (cổng HTTP mặc định):
% nc www.stackoverflow.com 80"Welp, điều đó không làm được gì nhiều, chỉ có một lời nhắc trống trước mặt tôi!"
Đừng lo lắng, người ngẫu nhiên mà tôi nói chuyện trong những câu trả lời này, chúng tôi không nói gì với máy chủ! Ở McBurger, đây là tương đương với việc đi bộ đến quầy và nhìn chăm chú vào nhân viên thu ngân.
Just.
Staring.
Chúng tôi phải bắt đầu sử dụng hợp âm thanh nhạc của mình nhanh chóng, hoặc họ sẽ gọi bảo mật. Tôi không thể quay lại địa ngục Martha đó, tôi chỉ ... không thể.
... Dù sao, chúng ta cần nói với nhân viên thu ngân rằng chúng ta muốn một chiếc burger. Trong HTTP, đó là đưa ra yêu cầu nhận:
% nc www.stackoverflow.com 80 GET / HTTP/1.1Nhấn Enter hai lần, và Hurray, chúng tôi có một số đầu ra!
HTTP/1.1 400 Bad Request Content-Type: text/html; charset=us-ascii Date: Sat, 02 Aug 2014 10:55:16 GMT Content-Length: 334 <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN""//www.w3.org/TR/html4/strict.dtd"> <HTML><HEAD><TITLE>Bad Request</TITLE> <META HTTP-EQUIV="Content-Type" Content="text/html; charset=us-ascii"></HEAD> <BODY><h2>Bad Request - Invalid Hostname</h2> <hr><p>HTTP Error 400. The request hostname is invalid.</p> </BODY></HTML>Điều đó không thể tốt. Rất nhiều thứ tôi không hiểu, nhưng nó nói rằng tên máy chủ yêu cầu không hợp lệ. Hãy thử lại điều đó, chỉ có chúng tôi cung cấp cho nó một máy chủ lần này:
% nc www.stackoverflow.com 80 GET / HTTP/1.1 Host: stackoverflow.comNhấn vào Enter hai lần và "Holy Bajesus, đó là rất nhiều sản lượng!" Có người, đó là.
Thỏ, điều này có liên quan như thế nào?
Vậy làm thế nào điều này được kết nối với PHP và một số sơ đồ? Vẫn nghĩ rằng bạn có thể chạy PHP trên nhấp chuột? Hãy viết một "thế giới xin chào" trong PHP và xem tại sao nó không thể.
Chỉ trong dịp này, tôi đã cài đặt PHP và viết một số tệp:
# example.php <?php echo 'Hi mom!'; ?>Thật tuyệt, hãy thực hiện một yêu cầu và xem những gì đang xảy ra:
% nc localhost 80 GET /example.php HTTP/1.1 Host: localhostHai nghi thức nhập các khóa và:
HTTP/1.1 200 OK Server: nginx/1.2.1 Date: Sat, 02 Aug 2014 11:00:52 GMT Content-Type: text/html Hi mom!Xin chúc mừng, chúng tôi có khớp burger của riêng mình! Chúng tôi có một máy chủ, mà chúng tôi có thể trả lời khách hàng! Niềm vui cho cả thế giới!
Điều gì đã xảy ra ở đây là cuộc trò chuyện này:
- Tôi: Cho tôi /example.php.
- Máy chủ: Được rồi. Này php, chạy example.php
- PHP: Dù sao đi nữa. Đầu ra là Hi mom!
- Máy chủ: Bạn có đi khách hàng, Hi mom!
- Tôi: Cảm ơn bạn!
Tóm lại là
- Máy chủ và máy khách là hai sinh vật riêng biệt.
- Họ giao tiếp qua một cái gì đó gọi là HTTP.
- Nếu khách hàng muốn một cái gì đó, nó phải hỏi máy chủ cho nó.
- Mà nó làm bằng cách thực hiện các yêu cầu HTTP.
Tự quảng cáo không biết xấu hổ: Nếu bạn muốn biết cách tạo các yêu cầu HTTP từ JavaScript, bạn có thể tham khảo ý chính của tôi về vấn đề này (cảnh báo: chứa dấu vết của các từ chửi thề).