Tất cả về HTTP message (Tài liệu được dịch từ cuốn sách: http_the_definitive_guide)

33 187 0
Tất cả về HTTP message (Tài liệu được dịch từ cuốn sách: http_the_definitive_guide)

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

Thông tin tài liệu

Nếu HTTP là người đưa tin internet, HTTP message là gói tin mà nó sử dụng để chuyển thông tin xung quanh. Ở chapter 1, chúng ta đã tìm hiểu về chương trình HTTP gửi mỗi message như thế nào. Chapter này nói cho bạn biết tất cả về HTTP message, cách tạo ra chúng và hiểu chúng như thế nào. Sau khi đọc chapter này, bạn sẽ biết hầu hết những gì cần để biết viết một ứng dụng HTTP của bạn. Cụ thể, bạn sẽ hiểu: Message flow -3 phần của HTTP message (start line, header, entity body) -Sự khác nhau giữa request message và response message. -Các funtion khác nhau hỗ trợ request message -Các codes status khác nhau được trả về trong respone message. -Ý nghĩa các HTTP header khác nhau

Người dịch: Nguyễn Trường Hận HTTP message Tài liệu dịch từ sách: http_the_definitive_guide Chương 3: HTTP MESSAGE Nếu HTTP người đưa tin internet, HTTP message gói tin mà sử dụng để chuyển thơng tin xung quanh Ở chapter 1, tìm hiểu chương trình HTTP gửi message Chapter nói cho bạn biết tất HTTP message, cách tạo chúng hiểu chúng Sau đọc chapter này, bạn biết hầu hết cần để biết viết ứng dụng HTTP bạn Cụ thể, bạn hiểu: Message flow - phần HTTP message (start line, header, entity body) Người dịch: Nguyễn Trường Hận - Sự khác request message response message - Các funtion khác hỗ trợ request message - Các codes status khác trả respone message - Ý nghĩa HTTP header khác 3.1 The flow of message HTTP message khối data gửi ứng dụng HTTP Những khối data bắt đầu với chuỗi text gọi meta-information, chuỗi mô tả nội dung message ý nghĩa, kèm với data (không bắt buộc) Những message lưu thông clients, server, proxies Những điều kiện “inbound” , “outbound” “upstream” “downstream” mô tả hướng message Con đường message mạng nội tới server HTTP sử dụng điều kiện inbound outbound để mô tả hướng giao dịch (transactional) Message di chuyển mạng nội tới server chúng làm việc xong, chúng di chuyển bên trở lại user agent Messages flow downstream HTTP message chảy dòng sơng Tất message chạy xuống hạ lưu, chúng request message hay response message Nơi gửi message thượng nguồn nơi nhận Như hình 3-2, proxy thượng nguồn proxy với request message hạ lưu proxy với response message Người dịch: Nguyễn Trường Hận 3.2 Thành phần message HTTP message có cấu trúc đơn giản, định dạng khối data Xem hình 33 để hình dung Mỗi message bao gồm request từ client response từ server Chúng gồm phần startline mô tả message, khối headers bao gồm thuộc tính phần body khơng bắt buộc chứa data Starline header văn ASCII trình bày dạng dòng Mỗi dòng kết thúc với cụm ký tự, bao gồm carriage return (ASCII 13) kí tự line-feed (ASCII 10) Kí tự kết thúc dòng viết tắt “CRLF” Nó giá trị đặc tả HTTP cho kí tự kết thúc dòng CRLF, ứng dụng mạnh mẽ nên chấp nhận kí tự line-feed Một vài ứng dụng HTTP cũ bị hỏng không luôn gửi carriage return line feed Phần body (message body) có liệu khơng Khơng giống startline header, body chứa liệu dạng text binary để trống Ở ví dụ hình 3-3, header đưa cho bạn vài thơng tin body Dòng content-type dạng liệu chứa body text, plain-text document Dòng Content-Length cho bạn biết kích thước body, ví dụ 19byte Người dịch: Nguyễn Trường Hận Message Syntax (Cú pháp message) Tất HTTP message rơi vào loại: request message response message Request message massage yêu cầu hành động từ server Response message mang kết request quay trở client Cả request response message có cấu trúc đơn giản giống Trong hình 3-4 request response message lấy gif Dưới định dạng cho request message: Dưới định dạng response messsage (chú ý cú pháp khác dòng bắt đầu): Người dịch: Nguyễn Trường Hận Dưới mô tả nhanh giá trị: - Method: Hành động mà client muốn server thực tài nguyên server Nó từ đơn “GET”, “HEAD” “POST” - Request-URL: Một URL hoàn chỉnh đặt tên cho tài nguyên request thành phần đường dẫn URL Nếu bạn giao tiếp với server, thành phần đường dẫn URL thường xuyên chấp nhận miễn đường dẫn tuyệt đối tới tài ngun, server giả định host/port URL - Version: Mô tả phiên HTTPmessage sử dụng, có định dạng như: Major minor số nguyên - Status-code: Một cụm số mơ tả xảy suốt q trình request Số code mơ tả chung lớp status (“success”, “error”, …) Một danh sách đầy đủ status code xác định đặc tả HTTP - Reason-phrase: Một cho phép đọc status code, bao gồm tất text gặp kí tự kết thúc dòng Danh sách reason-phrase cho tất status code xác định đặc tả HTTP Reason phrase có nghĩa dành cho người, vậy, ví dụ response line “HTTP/1.0 200 NOT OK” “HTTP/1.0 200 OK” nên coi tương đương dẫn thành công, reason phrase mang ý nghĩa khác - Header: nhiều header, số chúng tên theo sau dấu chấm với khoảng trắng: theo sau giá trị Header kết thúc CRLF đánh dấu kết thúc header bắt đầu trường body Một vài phiên HTTP HTTP/1.1 yêu cầu số header định trình bày cho request response message hợp lệ - Entity-body: Entity body bao gồm khối liệu tùy ý, tất message chứa entity body, message kết thúc với CRLF Người dịch: Nguyễn Trường Hận Chú ý tập hợp tiêu đề HTTP nên luôn kết thúc CRLF, header hay khơng có body Tuy nhiên nhiều client server bỏ qua CRLF cuối khơng có entity boby Để tương thích với điều này, client server nên chấp nhận message kết thúc mà khơng có CRLF Start lines Tất HTTP message bắt đầu với start line Start line request message cho biết “làm gì” start line response message cho biết “diễn gì?” 3.2.2.1 Request line Request message yêu cầu server làm điều với tài ngun Start line request message gọi request line bao gồm phương thức mô tả hoạt động server nên thực request URL mô tả tài nguyên mà thực phương thức Request line bao gồm HTTP version nói cho server biết phiên HTTP mà client sử dụng Tất trường phân chia khoảng trắng Trong hình 3-5a, phương thức request GET, request URL /test/hi-there.txt version HTTP/1.1 3.2.2.2 Response line Response message mang thơng tin status liệu kết từ server trả cho client Start line response message gọi response line bao gồm HTTP version mà response message sử dụng, status code reason phrase mô tả trạng thái hoạt động Tất trường phân tách khoảng trắng, hình 3-5b, HTTP version HTTP/1.0, status code 200, reason phrase OK, có nghĩa document trả thành công Các phiên trước phiên HTTP/1.0, response không cần phải bao gồm response line 3.2.2.3 Method Dòng method bắt đầu startline request message, nói cho server biết cần làm gì, ví dụ dòng “GET/ /specials/saw-blade.gif HTTP/1.0,” method GET Đặc tả HTTP có định nghĩa tập method Ví dụ method GET dùng để lấy document từ server, method POST dùng để gửi data từ server tới tiến trình method OPTIONS xác định khả chung web server khả web server cho tài nguyên cụ thể Người dịch: Nguyễn Trường Hận Bảng 3-1 mô tả method Chú ý vài method có body request message method lại khơng có Khơng phải tất server thực tất bảy method bảng 3-1 Hơn nữa, HTTP thiết kế để dễ dàng mở rộng, server khác thực method yêu cầu riêng ngồi method Các method bổ sung gọi method mở rộng, chúng nằm ngồi đặc tả HTTP 3.2.2.4 Status code Status code nói cho client biết điều xảy Status code nằm start line response message Ví dụ, dòng “HTTP/1.0 200 OK”, status code 200 Khi client gửi request message tới HTTP server, nhiều điều xảy Nếu bạn may mắn, request thành công Nhưng lúc bạn may mắn Server nói cho bạn biết tài ngun mà bạn request khơng thể tìm thấy, bạn khơng có quyền truy cập tới tài ngun đó, phần tài nguyên bị di chuyển tới nơi khác Status code trả start line response message Cả số status người đọc được trả cho client Số code làm cho việc xử lí lỗi dễ dàng chương trình máy tính Trong reason phrase hiển thị dễ hiểu người Những status code khác gom thành lớp khác dựa theo mã số gồm chữ số chúng Status nằm khoảng 200 đến 299 đại diện cho giao dịch thành công Status code nằm khoảng 300 đến 399 biểu thị tài nguyên bị di chuyển status code nằm khoảng 400 đến 499 có nghĩa client làm sai request Status code nằm khoảng 500 đến 599 có nghĩa có điều khơng server Người dịch: Nguyễn Trường Hận Phiên HTTP định nghĩa không vài code cho loại status Như protocol phát triển sau này, nhiều status code định nghĩa thức đặc tả HTTP Nếu bạn nhận status code mà bạn khơng nhận nó, định nghĩa giá trị mở rộng cho protocol Bạn nên coi thành viên chung class mà rơi vào Ví dụ, Nếu bạn nhận status code 515 (Giá trị nằm giá trị status code định nghĩa class 5XX liệt kê bảng 3-2.), bạn nên coi thông tin response lỗi server, status code chung class với 5XX Bảng 3-3 liệt kê vài giá trị status code thông dụng mà bạn gặp Chúng ta giải thích tất status code HTTP đoạn sau chapter 3.2.2.5 Reason phrase Reason phrase thành phần cuối start line response message Nó cung cấp diễn giải text status code Ví dụ, dòng “HTTP/1.0 200 OK: reason phrase OK Reason phrase ghép nối một với status code Reason phrase cung cấp dạng đọc status code mà nhà phát triển ứng dụng chuyển đến client cho biết điều xảy q trình request Đặc tả HTTP khơng cung cấp luật cứng nhanh cho reson phrase nên trông Đoạn sau chapter , liệt kê status code vài gợi ý cho reason phrases Người dịch: Nguyễn Trường Hận 3.2.2.6 Version numbers Version number xuất request response message start line có dạng HTTP/x.y Nó cung cấp phương tiện cho ứng dụng HTTP nói cho biết version protocol mà chúng sử dụng Version number dự định cung cấp cho ứng dụng nói HTTP với đầu mối khả định dạng thông điệp Một ứng dụng HTTP version 1.2 giao tiếp với ứng dụng HTTP version 1.1 nên biết rắng khơng nên sử dụng đặc điểm version 1.2, chúng có khả không chấp nhận ứng dụng version cũ Version number cho biết phiên cao HTTP mà ứng dụng hỗ trợ Trong vài trường hợp điều dẫn đến nhầm lẫn ứng dụng, ứng dụng HTTP/1.0 diễn dịch response với HTTP/1.1 ứng dụng để response response 1.1, thật level protocol sử dụng ứng dụng response Chú ý version number không hiểu số thập phân Mỗi số version number hiểu số riêng lẻ Vì vậy, so sánh HTTP version, số phải so sánh riêng để xác định version cao Ví dụ, HTTP 2.22 cao HTTP/2.3 22 > Headers Phần trước tập trung tìm hiểu dòng request response message Sau dòng là header đánh số, 0,1,2,… HTTP header bổ sung thêm thông tin cho request response message Chúng đơn giản danh sách giá trị/tên Ví dụ, theo sau header line định giá trị 19 cho trường header Content-Length: 3.2.3.1 Header classifications (Phân loại header) Đặc tả HTTP định nghĩa vài trường header Các ứng dụng tự việc tạo thêm header riêng họ HTTP header phân thành loại: - General headers: Có thể xuất request response message Người dịch: Nguyễn Trường Hận - Request headers: Cung cấp nhiều thông tin request - Response headers: Cung cấp nhiều thông tin response - Entity headers: Mô tả kích thước độ dài nội dung, tài ngun - Extension headers: Header định nghĩa đặc tả Mỗi HTTP header có cú pháp đơn giản: tên theo sau dấu chấm, theo sau dấu khoảng trắng (có thể có khơng), theo sau trường giá trị, theo sau CRLF (1 dấu xuống dòng) Bảng 3-4 liệt kê vài header phổ biến 3.2.3.2 Header continuation lines Dòng header dài chia nhỏ thành nhiều dòng để dễ đọc hơn, dòng cách khoảng trắng dấu tab Ví dụ: Trong ví dụ này, response message gồm server header mang giá trị chia thành nhiều dòng liên tục Giá trị cuối header “Test Server Version 1.0” Chúng ta mô tả ngắn gọn tất HTTP header sau chapter Chúng ta cung cấp tài liệu tham khảo chi tiết tất header Appendix C Entity Bodies Phần thứ HTTP message phần entity body (khơng bắt buộc phải có) Entity bodies payload HTTP message Chúng thứ mà HTTP thiết kế để vận chuyển 10 Người dịch: Nguyễn Trường Hận Nếu lý mà server nhận vài (hoặc tất cả) entity trước có hội gửi phản hồi với status code 100-continue, khơng cần gửi status code này, client định tiếp tục Khi server đọc xong request, nhiên cần gửi status code cuối cho request (nó status 100-continue) Cuối cùng, server nhận request với status code 100-continue định kết thúc request trước đọc xong entity body, khơng nên gửi response đóng kết nối, điều ngăn cản client nhận response (lỗi “TCP close and reset errors” nói rõ chapter 4) 3.4.1.3 Proxies and 100 Continue Một proxy nhận từ client request kèm với status code 100-continue cần làm vài điều Nếu proxy biết server hop mạng sử dụng HTTP/1.1 khơng biết server sử dụng HTTP version nên chuyển tiếp request với Expect header request Nếu biết server hop mạng sử dụng HTTP version nhỏ 1.1, nên response với status code 417 Expectation Failed error Nếu proxy định gửi kèm với request Expect header status code 100continue thay cho client sử dụng HTTP version thấp 1.1, khơng nên chuyển tiếp response 100 continue (Nếu nhận response 100 continue từ server) tới client, client khơng biết phải làm với response đó) 200-299: Success Status Codes Nếu client tạo request, request đa phần thành cơng Server có dãy status code để biểu thị cho thành công giao dịch, kết hợp chúng với loại request khác Bảng 3-7 liệt kê dạng success status code 19 Người dịch: Nguyễn Trường Hận 300-399: Redirection status codes Redirection status codes nói cho client biết cách sử dụng vị trí thay cho tài nguyên mà quan tâm cung cấp response thay cho nội dung Nếu tài nguyên bị di chuyển, redirection status code Location header khơng bắt buộc gửi tới client nói cho client biết tài ngun bị di chuyển vị trí mà tài ngun tìm thấy Điều cho phép trình duyệt tới vị trí tài ngun cách rõ ràng mà khơng làm phiền tới người dùng chúng 20 Người dịch: Nguyễn Trường Hận Một vài redirection status code sử dụng để xác minh tài nguyên cục ứng dụng với server gốc Ví dụ, ứng dụng HTTP kiểm tra tài nguyên cục cập nhật tài nguyên sửa đổi server gốc Trong hình 3-15 ví dụ vấn đề Client gửi header đặc biệt If-Modified-Since, header nói lấy document chỉnh sửa từ năm 1997 Document khơng thay đổi từ ngày này, server replies với status code 304 thay nội dung document request 21 Người dịch: Nguyễn Trường Hận Nhìn chung, thực tế response tốt cho request no HEAD bao gômg redirection status code để chứa entity với mô tả liên kết tới URL chuyển hướng Bảng 3-8 liệt kê redirection status code 22 Người dịch: Nguyễn Trường Hận Từ bảng 3-8, bạn ý có vài trùng lặp staus code 302, 303 307 Có vài dòng nói cách sử dụng status code này, hầu hết chúng xuất phát từ khác biệt cách mà ứng dụng HTTP/1.0 HTTP 1/1 xử lý status code Khi client sử dụng HTTP/1.0 gửi request nhận 302 redirect status code response message, theo dõi URL redirect Location header với message GET URL (thay tạo POST request làm với request ban đầu Server HTTP/1.0 chờ đợi client HTTP/1.1 thực điều server HTTP/1.0 gửi status code 302 sau nhận POST request từ client HTTP 1.0, server chờ đợi client theo chuyển hướng GET request để lấy redirect URL 400-499: Client error Status codes Thỉnh thoảng client gửi vài thứ cho server server xử lí, ví dụ request message tạo ta cách tệ thường xuyên request URL không tồn tài Chúng ta thấy gặp lỗi 404 Not found thường xuyên xuất trình duyệt, điều server nói với request tới tài nguyên mà server 23 Người dịch: Nguyễn Trường Hận Nhiều clỗi client xử lý với trình duyệt bạn, mà khơng làm phiền bạn Một vài status code giống 404 qua 24 Người dịch: Nguyễn Trường Hận 500-599: Server error Status code Thỉnh thoảng client giử request hợp lệ server gặp lỗi Điều client request tới giới hạn server lỗi thành phần phụ server Proxies thường xuyên gặp cố cố gắng nói cho server thay cho client Vấn đề Proxy server status code 5XX mô tả vấn đề 25 Người dịch: Nguyễn Trường Hận 3.5 Header Header method làm việc với nhằm xác định client server cần thực Phần nội dung nói mục đích header tiêu chuẩn vài header không định nghĩa đặc tả HTTP/1.1 Các header đặc tả cho loại message loại header có chung mục đích, cung cấp thơng tin cho request response message Header có loại chính: - General header: Những header sử dụng client server Chúng phục vụ mục đích chung giúp ích cho client, server mà ứng dụng khác nhằm cung cấp cho Ví dụ, Date header có mục đích cho phép bên hiển trị thời gian ngày tháng message có dạng: - Request header: Dạng header mô tả request message, chúng cung cấp ngắn gọn thơng tin tới server ví dụ loại data mà client sẵn sàng nhận, Ví dụ Accept header nói cho server client chấp nhận loại đa phương tiện trùng với request nó: - Response header: Dạng header cung cấp thơng tin cho client Ví dụ, Server header nói cho client biết HTTp version mà server sử dụng có dạng: - Entity header: Dạng header bổ sung thơng tinn cho entity body Ví dụ, entity header nói cho bạn biết loại data chứa entity body Ví dụ header Content-Type cho phép ứng dụng biết loại data HTML document có dạng: - Extension header: Dạng header dạng header tiêu chuẩn mà tạo nhà phát triển ứng dụng chưa thêm vào đặc tả HTTP 26 Người dịch: Nguyễn Trường Hận Chương trinh HTTP cần cho phép chuyển tiếp header này, khơng biết header có ý nghĩa General Header: Một vài header cung cấp thông tin message Những header gọi general header Chúng cung cấp thơng tin hữu ích message message thuộc loại Ví dụ, Bạn xây dựng request message response message, ngày thời gian message tạo có nghĩa giống nhau, header cung cấp loại thơng tin chung cho loại message 3.5.1.1 General caching headers HTTP/1.0 giới thiệu header cho phép ứng dụng HTTP lưu nhớ cache đối tượng local thay phải lấy chúng trực tiếp từ server Phiên cuối HTTP có tập nhiều thông số nhớ cache Request header 27 Người dịch: Nguyễn Trường Hận Header header nằm request message Chúng cung cấp thông tin người gửi request, nguồn gốc request ưu tiên khả client Server dùng thơng tin mà header đem lại để đưa cho client response tốt 3.5.2.1 Accept header Header cung cấp cho client cách để nói với server ưu tiên khả nó, muốn, dùng quan trọng khơng muốn Server sau dùng thơng tin để định thơng gửi cho client Header có lợi với client server kết nối Client nhận muốn server khơng lãng phí thời gian băng thông để gửi vài thứ client dùng 28 Người dịch: Nguyễn Trường Hận 3.5.2.2 Conditional request headers Thỉnh thoảng client muốn gửi vài hạn chế request Ví dụ client chép document rồi, muốn yêu cầu server gửi document khác với document mà có Sử dụng header này, client gửi ngoại lệ request, yêu cầu server đảm bảo thỏa mãn điều kiện trước xác nhận thỏa mãn request 3.5.2.3 Request security headers HTTP nguyên hỗ trợ kịch challenge/response xác thực đơn giản cho request Nó cố gắng tạo giao dịch an toàn việc yêu cầu client phải xác thực trước truy cập vào tài nguyên Chúng ta thảo luận điều chapter 14, kèm với kịch bảo mật hàng đầu HTTP 3.5.2.4 Proxy request headers Proxy ngày trở nên phổ biến mạng internet, vài header định nghĩa để giúp chúng hoạt động tốt Trong chapter tìm hiểu header cách chi tiết 29 Người dịch: Nguyễn Trường Hận Response Headers Header nằm response message Header cung cấp cho client thơng tin xúc tích, ví dụ người gửi response, khả server gửi response chí hướng dẫn đặc biệt respone Những header giúp client xử lí response thực request tương lai 3.5.3.1 Negotiation headers HTTP/1.1 cung cấp cho server client khả thực với tài ngun có nhiều khả hợp lệ, ví dụ, Khi Pháp Đức đểu dịch HTML document server Chapter 17 nói chi tiết vấn đề 30 Người dịch: Nguyễn Trường Hận 3.5.3.2 Response security headers Header dạng đơn giảng response phụ kịch xác thực HTTP’s challenge/response Chúng ta nói chi tiết ội dung chương 14 Entity Headers Header mô tả phần payload HTTP message Bởi request message response message chưa entity, nên header xuất dạn message request response Header cung cấp loạt thông tin entity nội dung nó, từ thơng tin loại đối tượng đến method request hợp lệ phép thực tài ngun Nhìn chung, header nói với nơi nhận message mà xử lí 3.5.4.1 Content header Header cung cấp thơng tin đặc tả nội dung entity, cho biết loại, kích thước thơng tin hữu ích khác cho tiến trình Ví dụ, trình duyệt web nhìn thấy loại content trả lại biết làm để trình diễn nội dung 31 Người dịch: Nguyễn Trường Hận 3.5.4.2 Entity caching headers Header cung cấp thị cách thức thời điểm lưu liệu vào nhớ cache Header natfy cung cấp thông tin entity lưu nhớ cache Ví dụ, thơng tin cần xác thực liệu lưu tài nguyên lưu nhớ cache hợp lệ hay khơng gợi ý làm ước tính xác tài nguyên lưu nhớ cache khơng hợp lệ 32 Người dịch: Nguyễn Trường Hận 33 ... khác request message response message - Các funtion khác hỗ trợ request message - Các codes status khác trả respone message - Ý nghĩa HTTP header khác 3.1 The flow of message HTTP message khối... Nguyễn Trường Hận Message Syntax (Cú pháp message) Tất HTTP message rơi vào loại: request message response message Request message massage yêu cầu hành động từ server Response message mang kết... chuyển bên trở lại user agent Messages flow downstream HTTP message chảy dòng sơng Tất message chạy xuống hạ lưu, chúng request message hay response message Nơi gửi message thượng nguồn nơi nhận

Ngày đăng: 27/10/2018, 00:16

Từ khóa liên quan

Tài liệu cùng người dùng

Tài liệu liên quan