Label

Thứ Bảy, 16 tháng 10, 2010

Gửi các request và xử lý response – Giao thức HTTP



Trước hết chúng ta cùng tìm hiểu hoạt đông của giao thức HTTP truyền thống – Hypertext Transfer Protocol, xem xét các bản tin – message của giao thức này. Thay vì quan tâm đến các bit hay byte, chúng ta để ý đến các từ ngữ (thông báo) được xác định trong đặc tả HTTP và các quy tắc kết hợp chúng lại với nhau.
Một HTTP message bắt đầu với một dòng request hay status, tiếp theo có thể là nhiều loại headers và phần message body.

Cấu trúc của HTTP Message


HTTP là một giao thức kiểu client/server; client đưa ra các request, và server sẽ trả lời các request này. Cấu trúc các HTTP message vì thế cũng thay đổi theo yếu tố này. Có một định dạng cho HTTP request và cho các response.
HTTP Request
Mỗi request bắt đầu với một Request-Line. Dòng này chỉ ra phương thức mà client yêu cầu, tài nguyên, và phiên bản của HTTP mà client có thể hỗ trợ. Request-Line có thể có tiếp sau một hay nhiều header và một message body.

Một HTTP request bắt đầu với một Request-Line và có thể bao gồm các header và message body. Phần header có thể mô tả quá việc truyền dữ liệu, xác định các yêu cầu hay phần message body kèm theo.
Code:
GET / HTTP/1.1
Accept: */*
Accept-Language: en-us A
ccept-Encoding: gzip, deflate
User-Agent: Mozilla/4.0 (compatible; MSIE 5.5; Windows NT 5.0)
Host: www.ft.com
Connection: Keep-Alive

Request-Line chứa ba mục phân biệt, đó là method, uri, và phiên bản HTTP, mỗi mục được phân tách bởi một hay nhiều khoảng trống.

Một HTTP Request-Line có một phương thức, một địa chỉ định danh tài nguyên (URI), và thông báo phiên bản HTTP.

Phương thức được xác định trên dòng đầu tiên của Request-Line. HTTP định nghĩa tất cả là 8 phương thức. Một HTTP server chỉ được yêu cầu hỗ trợ các phương thức GET và HEAD; nếu chúng hỗ trợ các phương thức HTTP khác, sự hỗ trợ đó phải được gắn với các quy tắc của HTTP. Đặc tả HTTP cũng có các mở rộng để các phương thức khác có thể được bổ sung trong tương lai.

Bảng HTTP Method

Mục tiếp theo trong Request-Line là Request-uri. Mục này cung cấp địa chỉ định danh tài nguyên cho một tài nguyên. Ví dụ, Request-uri là /, chỉ ra một request cho tài nguyên gốc. Cho các request không yêu cầu một tài nguyên cụ thể (như là TRACE request hay trong một số trường hợp cả OPTIONS request), client có thể dùng một dấu * cho Request-uri.

Mục cuối cùng trong Request-Line là phiên bản HTTP. Như trong ví dụ, phiên bản HTTP là 1.1 chứa trong đoạn text HTTP/1.1.

Tiếp sau Request-Line, một HTTP request có thể bao gồm một hay nhiều dòng message header. Một message header có thể chứa các loại general header, request header, hoặc entity header. General header áp dụng trong truyền dữ liệu; request header áp dụng cho các request cụ thể, và entity header áp dụng cho message body trong request.

Một HTTP request luôn chứa một dòng trống sau Request-Line và bất kỳ header nào. Nếu request bao gồm một message body, phần body đi sau một dòng trống. Dòng trống – blank line rất quan trọng vì server xác định được phần kết của request, hoặc phần kết của header. Không có dòng trống, server nhận các message sẽ không biết được các header khác nữa có tiếp tục được truyền không.

Nguon: http://my.opera.com/nguyenhung2709/blog/show.dml/493169

2 nhận xét:

  1. Bạn ơi, làm cách nào để xem được nội dung của HTTP request và http response?

    Tức là làm sao để có được nội dung sau:

    GET / HTTP/1.1
    Accept: */*
    Accept-Language: en-us
    Accept-Encoding: gzip, deflate
    User-Agent: Mozilla/4.0
    (compatible; MSIE 5.5; Windows NT 5.0)
    Host: www.ft.com
    Connection: Keep-Alive

    Trả lờiXóa
  2. Àh, mặc định thì các Web Browser không hiển thị các thông tin này, bạn có thể dùng WebClient này để xem nội dung: http://www.mediafire.com/?dbkdp1co9h728n1

    //yêu cầu máy bạn phải cài java runtime rồi. Chạy file jar bằng cách run > cmd > java -jar WebClient.jar(hoặc double click nếu bạn ko cài Winrar)

    *Hướng dẫn cách chạy: Host: google.com, Port:80 rồi nhấn Submit Request, các thông tin trả về sẽ ở dạng nguyên bản, sẽ có phần header ở đầu, tiếp theo là tag HTML

    Trả lờiXóa