Monthly Archives: June 2017

http request

HTTP – Responses

Sau khi nhận và phân tích thông điệp request, server sẽ phản hồi bằng một thông điệp HTTP response:

  • Một dòng Status-line
  • Không có hoặc có thêm các thành phần header (General|Response|Entity) và theo sau là các ký hiệu CRLF(Carriage Return Line Feed – báo hiệu trở về đầu dòng tiếp theo).
  • Một dòng trống (VD một dòng không có nội dung gì và kết thúc bởi CRLF) dùng để báo hiệu kết thúc các thành phần header
  • Có hoặc không có phần nội dung của thông điệp (message-body)

Phần tiếp theo sẽ giải thích các thực thể được sử dụng bên trong một thông điệp HTTP response.

Status-Line của thông điệp

Một status-line (dòng trạng thái) bao gồm thông tin về phiên bản của giao thức theo sau một con số thể hiện mã của trạng thái và các nội dung văn bản liên quan. Các thành phần được phân tách bởi dấu cách (space).

Status-Line = HTTP-Version SP Status-Code SP Reason-Phrase CRLF

HTTP Version

Một server hỗ trợ HTTP phiên bản 1.1 sẽ trả về thông tin phiên bản như sau:

HTTP-Version = HTTP/1.1

Mã trạng thái (status code)

Thành phần Status-Code là một số nguyên gồm ba chữ số, trong đó chữ số đầu tiên dùng để xác định phân lớp của response (phản hồi) và hai chữ số sau không đóng vai trò phân loại. Dưới đây là 5 giá trị dành cho chữ số đầu tiên của Status-Code:

 

# Mã và mô tả
1 1xx: Informational

Số này có nghĩa là request đã được nhận và đang được xử lý.

2 2xx: Success

Số này báo hiệu sự thành công, hành động đã được nhận, được hiểu và chấp nhận.

3 3xx: Redirection

Số này báo hiệu rằng phải thực hiện thêm hành động để hoàn tất request.

4 4xx: Client Error

Số này báo hiệu request chứa các sai sót về cú pháp hoặc không thể thực thi.

5 5xx: Server Error

Số này có nghĩa là server bị lỗi, nó không thực hiện được request mặc dù đó là request hợp lệ.

Các mã trạng thái HTTP có thế mở rộng và các ứng dụng HTTP không đòi hỏi phải hiểu ý nghĩa của tất cả các mã trạng thái đã được đăng ký. Một danh sách các mã trạng thái được trình bày trong một chương riêng để bạn có thể tham khảo.

Các thành phần của Response Header

Chúng ta sẽ nghiên cứu về General-header và Entity-header trong một chương riêng khi tìm hiểu về các các thành phần của HTTP header. Bây giờ, chúng ta sẽ tìm hiểu xem Response gồm những thành phần gì.

Các thành phần của response-header cho phép server bổ sung các thông tin bổ sung response khi không thể đưa chúng vào Status-Line. Những thành phần header này cung cấp các thông tin về server và về việc truy xuất các tài nguyên được xác định bởi Request-URI.

  • Accept-Ranges
  • Age
  • ETag
  • Location
  • Proxy-Authenticate
  • Retry-After
  • Server
  • Vary
  • WWW-Authenticate

Bạn có thể thêm các trường của mình, trong trường hợp đó bạn phải viết riêng cho mình Web Client và Web Server.

Ví dụ về Response Message

Bây giờ hãy tập hợp các thông tin lại để tạo dựng một HTTP response cho một request đến server về trang hello.htm thuộc website  tutorialspoint.com

HTTP/1.1 200 OK
Date: Mon, 27 Jul 2009 12:28:53 GMT
Server: Apache/2.2.14 (Win32)
Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT
Content-Length: 88
Content-Type: text/html
Connection: Closed


<html>
<body>
<h1>Hello, World!</h1>
</body>
</html>

Ví dụ dưới đây trình bày một thông điệp (message) HTTP response mô tả về lỗi khi web server không tìm thấy trang web được yêu cầu:

HTTP/1.1 404 Not Found
Date: Sun, 18 Oct 2012 10:36:20 GMT
Server: Apache/2.2.14 (Win32)
Content-Length: 230
Connection: Closed
Content-Type: text/html; charset=iso-8859-1
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
   <title>404 Not Found</title>
</head>
<body>
<h1>Not Found</h1>
<p>The requested URL /t.html was not found on this server.</p>
</body>
</html>

Ví dụ sau là một thông điệp HTTP response mô tả lỗi khi web server gặp lỗi về phiên bản HTTP được gửi lên từ HTTP request:

HTTP/1.1 400 Bad Request
Date: Sun, 18 Oct 2012 10:36:20 GMT
Server: Apache/2.2.14 (Win32)
Content-Length: 230
Content-Type: text/html; charset=iso-8859-1
Connection: Closed

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html>
<head>
   <title>400 Bad Request</title>
</head>
<body>
<h1>Bad Request</h1>
<p>Your browser sent a request that this server could not understand.</p>
<p>The request line contained invalid characters following the protocol string.<p>
</body>
</html>