Bài 7: Giao thức HTTP

Một phần của tài liệu ATMEGA32 GIAO TIẾP VỚI ENC28J60 QUA SPI – AVR WEBSERVER (Trang 115 - 120)

- Như chúng ta biết bảng ARP cache được cập nhật là có 2 trường hợp 1 là gởi bản tin ARP request, 2 mỗi khi có gói tin IP đến thì nó sẽ cập nhật IP và MAC của thằng máy tính đã gởi đị

Bài 7: Giao thức HTTP

- HTTP là chữ viết tắt từ HyperText Transfer Protocol (giao thức truyền tải siêu văn bản). Nó là giao thức cơ bản mà World Wide Web sử dụng để truyền tải nội dung các trang web. HTTP xác định cách các thông điệp (các file văn bản, hình ảnh đồ hoạ, âm thanh, video, và các file multimedia khác được định dạng và truyền tải ra sao, và hoạt động của Web server và các trình duyệt Web.

- Trong mô hình của HTTP, Webserver đồng thời cũng là TCP server, mở sẵn port mặc định dành cho dịch vụ HTTP là TCP80 (ở chế độ listen), sẵn sàng đợi yêu cầu kết nối từ các client.

- Các client sẽ khởi tạo kết nối TCP thông qua port này, sau khi Webserver chấp nhận kết nối, client sẽ gửi một bản tin HTTP (HTTP message) gọi là HTTP request tới server trên kết nối TCP vừa thiết lập. - Server sẽ trả lời lại bằng một bản tin HTTP khác là HTTP responsẹ Bản tin này sẽ chứa nội dung trang Web yêu cầu (được viết bằng ngôn ngữ HTML).

Như vậy giao thức HTTP sẽ dựa cơ bản trên các bản tin HTTP, gồm 2 loại là HTTP request và HTTP responsẹ

Giả sử người dùng truy cập URL: www.dientuvietnam.net/index.html (trang web có text và 10 hình ảnh jpeg):

1a-HTTP client thiết lập liên kết TCP với HTTP server (process) tại địa chỉ www.dientuvietnam.net, cổng 80 (ngầm định cho dịch vụ HTTP).

1b-HTTP server tại máy chủ www.dientuvietnam.net chờ yêu cầu kết nối TCP tại cổng 80, chấp nhận kết nối rồi thông báo với client.

2-HTTP client gửi HTTP request message (bao gồm cả URL) tới TCP connection socket.

3-HTTP server nhận request message, tạo ra HTTP response message có chứa các đối tượng được yêu cầu rồi gửi vào socket.

4-HTTP server ngắt liên kết.

5-HTTP client nhận response message có chứa file html, hiển thị html. Sau đó, phân tích file html, tìm URL của 10 hình ảnh jpeg trong tài liệụ

6-Bước 1-5 được lặp lại với từng hình ảnh.

Có nhiều phiên bản HTTP, tuy nhiên ở đây chúng ta sẽ bắt đầu với phiên bản HTTP đơn giản nhất: HTTP 1.0

1-Cấu trúc các bản tin HTTP:

Bản tin HTTP (HTTP message) gồm 2 loại: HTTP request và HTTP responsẹ Đối với HTTP request ta có Simple-Request và Full-Request. Tương tự ta cũng có Simple-Response và Full-Responsẹ

1.1-Bản tin HTTP request:

a-Simple-Request: có cấu trúc rất đơn giản GET<space><Request-URI><CRLF>

b-Full-Request: có cấu trúc tổng quát gồm có 3 phần như sau [Request-Line]

[Headers] <CRLF> [Entity-Body]

Request-Line: có cú pháp như sau:

<Method><space><Request-URI><space><HTTP-Version><CRLF> Trong đó:

- Method là tên phương thức HTTP, với HTTP 1.0 ta có các method chính là: "GET", "HEAD" và "POST". - Request-URI là đường dẫn tới trang web cần tải, có thể là đường dẫn tương đối hay tuyệt đốị - HTTP-Version: cho biết phiên bản HTTP đang sử dụng.

Ví dụ:

- Request line với URI tuyệt đối:

GET http://www.w3.org/pub/WWW/TheProject.html HTTP/1.0 - Request line với URI tương đối:

GET /pub/WWW/TheProject.html HTTP/1.0

Headers: có 3 loại: General-Header; Request-Header; Entity-Header

Có nhiều Header khác nhau trong mỗi loại, ở đây không tiện trình bày hết, nhưng nhìn chung, HTTP Header có cú pháp như sau:

<field-name>: <field-value> <CRLF>

dụng phương thức HTTP POST, trạng thái của các nút check, giá trị trong các ô edit text,... sẽ được chứa trong phần nàỵ

Ví dụ: (adsbygoogle = window.adsbygoogle || []).push({});

- Một bản tin HTTP request dùng phương thức GET: GET /path/filẹhtml HTTP/1.0<CRLF>

From: someuser@jmarshall.com<CRLF> User-Agent: HTTPTool/1.0<CRLF> <CRLF>

Trong phương thức GET này, phần body là trống (không có message body) - Một bản tin HTTP request dùng phương thức POST:

POST /path/script.cgi HTTP/1.0<CRLF> From: frog@jmarshall.com<CRLF> User-Agent: HTTPTool/1.0<CRLF> Content-Type: application/x-www-form-urlencoded<CRLF> Content-Length: 32<CRLF> <CRLF> home=Cosby&favorite+flavor=flies Dòng 1 là request line Dòng 2,3,4,5 là các header

Dòng 6 chỉ chứa 1 ký tự xuống dòng (<CRLF>) báo hết phần Header, bắt đầu mesage body Dòng 7 chính là phần body

Ở đây chúng ta cần lưu ý là độ dài Headers không cố định, nhưng kết thúc bằng <CRLF>. Do đó khi viết chương trình cho AVR, ta sẽ tìm chỗ nào có 2 ký tự <CRLF> liên tiếp thì đó là kết thúc Headers.

1.1-Bản tin HTTP response:

a-Simple-Response: có cấu trúc rất đơn giản, chỉ chứa phần Entity-Body [Entity-Body]

b-Full-Response: có cấu trúc tổng quát gồm có 3 phần như sau <Status-Line>

<Headers> <CRLF> [Entity-Body]

<HTTP-Version><space><Status-Code><Space><Reason-Phrase><CRLF> Trong đó:

- HTTP-Version: cho biết phiên bản giao thức HTTP. Ví dụ: "HTTP/1.0"

- Status-Code: cho biết mã trạng thái của responsẹ Gồm 3 chữ số, được qui định như sau + 1xx: Informational - chưa được sử dung, để dự phòng

+ 2xx: Thành công (Success) - cho biết request được chấp nhận và đáp ụ + 3xx: Chuyển hướng (Redirection) - yêu cầu client chuyển hướng request + 4xx: Lỗi do client (Client Error) - request không hợp lệ

+ 5xx: Lỗi do sever (Server Error) - request hợp lệ nhưng server bị lỗi không thể trả lời Các Status-Code cụ thể hay dùng: + "200" ; OK + "201" ; Created + "202" ; Accepted + "204" ; No Content + "301" ; Moved Permanently + "302" ; Moved Temporarily + "304" ; Not Modified + "400" ; Bad Request + "401" ; Unauthorized + "403" ; Forbiđen + "404" ; Not Found

+ "500" ; Internal Server Error + "501" ; Not Implemented + "502" ; Bad Gateway + "503" ; Service Unavailable

- Reason-Phrase: chứa nội dung text giải thích cho responsẹ

Headers: cú pháp tương tự header của request, cũng gồm General-Header; Response-Header; Entity-

Header

Entity-Body:chứa phần nội dung trả lời của response (ví du nội dung file html)

Ví dụ: Một response cho phương thức GET HTTP/1.0 200 OK<CRLF>

Date: Fri, 31 Dec 1999 23:59:59 GMT<CRLF> Content-Type: text/html<CRLF>

<CRLF> <html> <body>

<h1>Happy New Millennium!</h1> (more file contents)

. . . </body> </html> Dòng 1: Status-Line Dòng 2: General Header Dòng 3,4: Entity-Header

Dòng 5: <CRLF>, báo hiệu kết thúc headers Dòng 6 trở đi: Entity body

Một phần của tài liệu ATMEGA32 GIAO TIẾP VỚI ENC28J60 QUA SPI – AVR WEBSERVER (Trang 115 - 120)