Bắt đầu với NodeJS - HTTP /HTTP-PARSER (Phần 8)

I.HTTP

1.HTTP là gì ?


- Chắc hẳn các bạn còn nhớ TCP  có nhiệm vụ chia nhỏ thông tin và gửi nó thông qua internet , LAN (data chứa trong các packet) đó là cốt lõi của định nghĩa  giao thức  mà cả 2 bên Client và Server đã thống nhất để nhận thông tin trong các Packet theo định nghĩa của TCP

- Phần trước mình có nói lướt qua về HTTP , thông tin được nhét vào trong các packet và được cấu trúc theo Protocol và HTTP là một loại Protocol  Hypertext Tranfer Protocol nó cấu trúc data.

- Dữ liệu được cấu trúc lại theo bộ quy tắc về cách định dạng theo chuẩn HTTP và được chuyển qua TCP/IP.

- Nói theo định nghĩa thì nó là một bộ quy tắc và (cách thức định dạng dữ liệu) để truyền qua lại giữa các máy tính trên Internet (nó là một loại Protocol).

- VD : Client gửi data thông qua HTTP request rồi được Server trả về dữ liệu thông qua HTTP response...data được cấu trúc theo chuẩn rồi nhét vào các gói theo định nghĩa TCP.



2.Cấu trúc data theo chuẩn HTTP như thế nào ?

- Ý tưởng đơn giản để bạn hiểu ví dụ bạn viết một lá thư cho bạn của mình và 2 người đã thống nhất với nhau một số thứ như , địa chỉ nơi người nhận viết ở đâu ? ngôn ngữ viết thư viết bằng ngôn ngữ gì ? chứ kí đặt ở đâu ?? bla bla ..đúng về mặt định dạng dữ liệu và chính xác về mặt cấu trúc data .




Ảnh trên là ví dụ về data gửi đi được cấu hình theo chuẩn HTTP , 
CONNECT : cho biết kết nối tới Server nào thông qua IP nào rồi sau đó gửi data đến chương trình nào.(port 443)
HOST : DOMAIN.







3.HttpParser.


- NodeJS là một công nghệ để xây dựng Server , nó xử lý các request và response
vậy làm thế nào để nó có thể tạo ra các req và res theo một định dạng chuẩn hay khi nhận được data rồi thì thằng nào phân tích nó để lấy thông tin ra???? Có thể các bạn nghĩ HTTP làm những điều này nhưng nói thế ko đúng hoàn toàn , HTTP là bao hàm của rất nhiều bộ luật và cách thức định dạng và phân tích data , một trong các rule của HTTP sẽ làm điều này đó chính là HttpParser.

- HttpParser nó là một chương trình viết bằng C (có thể sử dụng độc lập )
được tích hợp vào trong NodeJS.


(Bên trong mã nguồn của Node thằng HttpParser được nhúng vào)

- Để đi tìm hiểu cách hoạt động HttpPaser bạn hãy nhìn theo hình vẽ.


- Hãy chú ý vào 3 ô mình khoang đỏ 
Trong Module Http chúng ta require thằng Http_server , chú ý đến hàm createServer nó nhận vào 2 tham số , chính là request và response mà chúng ta đã tìm hiểu (opts : hành động , requestListenner : phát ra sự kiện để giải quyết hành động đó).


- Ảnh trên , mình mở file Htpp_server bạn chú ý đến hàm writeHead , Hàm này tạo nên Header nó HttpResponse...còn rất nhiều hàm để tạo nên các field - value của thằng HtppResponse này bạn tự tìm hiểu tiếp nhé ^^.

=> Vậy chúng ta dùng hàm createServer và nó sẽ tạo ra một Máy củ (Server) và máy chủ sẽ lắng nghe trên một cổng mà chúng ta config sau đó tiếp nhận yêu cầu => phân tích yêu cầu => đưa ra phản hồi và dữ liệu sẽ đi qua cổng này.





=> Những gì mà HttpParser làm là phân tích các request và reponse rồi config lại nó theo một chuẩn hoặc là phân tích các req và res để lấy thông tin từ đó server hay client , kiểm tra xem có đúng DOMAIN ko >? HEADER là gì ? Content-length dài bao nhiều ....Body như thế nào ??? từ đó Server có dữ liệu để xử lý.

=> HTTP là một bộ luật và quy định cách thức định dạng dữ liệu được gửi đi còn HTTP Parser là một trong các bộ luật của HTTP hiểu đơn giản là như vậy.



3.Tạo một Server đơn giản.


- Hình trên là đoạn code để tạo ra một server đơn giản trên máy tính của bạn , bây giờ bạn mở Browser lên và gõ ra thanh URL localhost:1337 


Kết quả :

- Bây giờ tiếp theo bạn tạo tiếp file 


Chạy và xem kết quả :



=> Cùng một IP có thể mở rất nhiều PORT để gửi và nhận dữ liệu , khi request gửi data đến server nó sẽ chọn cổng nào để send data.
=> Bạn hiểu rằng IP là địa chỉ một máy tính trên Internet hoặc LAN... trên máy tính có rất nhiều phần mềm chạy như trong hình thì có app.js và app_.js là 2 phần mềm , để biết data nhận được gửi cho phần mềm nào thì mỗi phần mềm phải mở một cổng trên máy tính để lắng nghe xem có dữ liệu gửi về hay không , rồi gửi data đi cũng thông qua cổng này luôn.


4.Browser gửi request và nhận response như thế nào ?



- Bạn ấn F12 , mở tab NETWORK , nhấn F5 , bạn sẽ thấy rất nhiều thông tin, đặc biệt chú ý đến phần Header.


- Nó hiển thị cho bạn phần Header của của req lần res , chính thắng HttpParser config để cho Browser hiểu được các thông tin của Header.

=> Bây giờ quay lại VSCODE bạn ngắt server , đặt bearkpoint ở res.writeHead rồi chạy debug , quay lại browser và nhấn F5 , theo dõi VSCODE bạn sẽ thấy.



=>  Chú ý đến thằng req khi có request từ browser gửi đến thằng HttpParser phân tích thằng request Config nó thành một Object để Server có thể xử lý một cách dễ dàng ^^.

-Theo dõi trong Tab Variable tiếp.


Nhận xét

Bài đăng phổ biến