Giao thức HTTP - Giao thức truyền siêu văn bản là gì. HTTP là gì

HTTP hoặc HyperText Transfer Protocol là lỗ hổng chính (của world wide web). Nhiệm vụ chính của giao thức là đảm bảo truyền siêu văn bản trong mạng. Giao thức mô tả chính xác định dạng thông báo cho việc trao đổi máy khách và máy chủ.

Đã mô tả giao thức HTTP trong RFC 2616 (HTTP1.1).

Cơ sở của giao thức là cung cấp sự tương tác giữa máy khách và máy chủ bằng cách sử dụng một yêu cầu ASCII và phản hồi tiếp theo cho nó trong tiêu chuẩn RFC 822 MIME.

Trong thực tế, HTTP hoạt động trên cơ sở cổng 80, nhưng nó có thể được cấu hình theo cách khác. Mặc dù TCP / IP là tùy chọn, nó vẫn là lựa chọn ưu tiên vì nó đảm nhận việc phân tích cú pháp và tập hợp lại các thông báo và không làm phiền đến trình duyệt hoặc máy chủ.

Cần lưu ý rằng giao thức HTTP có thể được sử dụng không chỉ trong công nghệ web mà còn trong các ứng dụng OOP khác (hướng mục tiêu).

Url

Cơ sở của giao tiếp web máy khách-máy chủ là yêu cầu. Yêu cầu được gửi bằng URL, Bộ định vị tài nguyên thống nhất của Internet. Hãy để tôi nhắc bạn URL là gì.

Một cấu trúc URL rõ ràng và đơn giản bao gồm các yếu tố sau:

  • Giao thức;
  • Tổ chức;
  • Hải cảng;
  • Tài nguyên gurney;
  • Thẻ (Yêu cầu).

Lưu ý: Giao thức http là một giao thức dành cho các kết nối đơn giản, không an toàn. Kết nối an toàn hoạt động bằng giao thức https. Nó là an toàn hơn để trao đổi dữ liệu.

Phương thức yêu cầu HTTP

Một trong các tham số URL xác định tên của máy chủ lưu trữ mà chúng tôi muốn giao tiếp. Nhưng điều này là không đủ. Cần xác định hành động cần thực hiện. Điều này có thể được thực hiện bằng cách sử dụng một phương pháp được xác định bởi giao thức HTTP.

Phương thức HTTP

  • Phương pháp / Mô tả
  • HEAD / Đọc tiêu đề của một trang web
  • NHẬN / Đọc một trang web
  • ĐĂNG / Thêm vào trang web
  • PUT / Lưu trang web
  • TRACE / Gửi lại yêu cầu
  • XÓA / Xóa trang web
  • OPTIONS / Hiển thị các tùy chọn
  • CONNECT / Được bảo lưu để sử dụng trong tương lai

Chúng ta hãy xem xét các phương thức HTTP chi tiết hơn

Phương thức GET. yêu cầu một trang (tệp, đối tượng) được mã hóa theo tiêu chuẩn MIME. Đây là phương pháp được sử dụng phổ biến nhất. Cấu trúc phương pháp:
NHẬN tên tệp HTTP / 1.1

Phương pháp HEAD. Phương thức này yêu cầu tiêu đề của thư. Trong trường hợp này, trang không tải. Phương pháp này cho phép bạn tìm ra thời gian trang được làm mới lần cuối, điều này cần thiết để quản lý bộ nhớ cache của trang. Phương pháp này cho phép bạn kiểm tra chức năng của URL được yêu cầu.

Phương pháp PUT. Phương pháp này có thể đẩy trang lên máy chủ. Nội dung yêu cầu PUT bao gồm trang được lưu trữ, được mã hóa MIME. Phương pháp này yêu cầu nhận dạng khách hàng.

Phương thức POST. Phương pháp này thêm nội dung vào một trang hiện có. Được sử dụng như một ví dụ để thêm một bài đăng trên diễn đàn.

Phương pháp DELETE. Phương pháp này sẽ phá hủy trang. Phương thức xóa yêu cầu xác nhận quyền xóa của người dùng.

Phương pháp TRACE. Phương pháp này đang gỡ lỗi. Nó yêu cầu máy chủ gửi lại yêu cầu và cho bạn biết liệu yêu cầu của khách hàng có bị sai hay không khi nó trả về từ máy chủ.

Phương thức CONNECT- phương pháp dự trữ, không sử dụng.

Phương pháp OPTIONS cho phép bạn truy vấn thuộc tính máy chủ và thuộc tính của bất kỳ tệp nào.

Trong giao tiếp "yêu cầu-phản hồi" giữa máy khách và máy chủ, máy chủ nhất thiết phải tạo phản hồi. Nó có thể là một trang web hoặc một thanh trạng thái với mã trạng thái. Bạn đã biết rõ về mã trạng thái. Một trong những mã được biết là mã 404 - Không tìm thấy trang.

Nhóm mã trạng thái

1xx: Máy chủ sẵn sàng, Mã 100 - máy chủ sẵn sàng xử lý các yêu cầu của khách hàng;

2xx: Thành công.

  • Mã 200 - yêu cầu đã được xử lý thành công;
  • Mã 204 - Không có nội dung.

3xx: Chuyển hướng.

  • Mã 301 - Trang được yêu cầu đã được chuyển đi;
  • Mã 304 - Trang trong bộ nhớ cache vẫn được cập nhật.

4xx: Lỗi máy khách.

Chẳng bao lâu nữa, Internet sẽ chuyển sang giao thức HTTP / 2, tối ưu hóa đáng kể hoạt động của các site và cả thế giới sẽ chuyển sang các tiêu chuẩn mới về công việc trong mạng toàn cầu, các tiêu chuẩn bảo mật mới và cuối cùng là các tiêu chuẩn về tốc độ truyền thông tin. Tất cả điều này được cung cấp bằng cách sử dụng giao thức HTTP / 2 - một phiên bản cải tiến của giao thức http cổ điển, trên đó hầu như toàn bộ Internet thế giới vẫn hoạt động. Mô tả thuật toán truyền dữ liệu mới trong Mạng.

Nó là gì và tại sao nó lại cần

HTTP, hoặc Giao thức truyền siêu văn bản, hoặc Giao thức truyền siêu văn bản- một tập hợp các quy tắc và giao thức mà web toàn cầu hoạt động ngày nay. Nó hình thành các quy tắc cho việc truyền các tệp đồ họa, tin nhắn văn bản, tệp âm thanh và đa phương tiện - nói cách khác, các quy tắc cho việc trình bày hiển thị trực quan thông tin trên Internet. HTTP / 2 là một thế hệ mới của các giao thức này, vì HTTP / 1.1 đã xuất hiện từ năm 1999 và kể từ đó, hầu hết các trang web hiện đại không còn bằng lòng với việc hỗ trợ công nghệ HTTP lỗi thời. Việc chuyển đổi sang một phiên bản mới sẽ không còn lâu nữa.

Http / 2 khác với http như thế nào

Việc phát triển một phiên bản mới của giao thức gắn liền với việc cải thiện hiệu suất, bảo mật và dễ sử dụng. Tất cả điều này đạt được bằng cách giảm độ trễ của trình duyệt xử lý các hoạt động sản xuất chính trên Internet. Các tính năng như kiểm soát luồng để kiểm soát tốc độ truyền dữ liệu hoặc xử lý lỗi giúp phát triển.

Đồng thời, HTTP / 2 chỉ là một phần mở rộng cho HTTP1, vẫn chưa có kế hoạch thay thế. Phiên bản thứ hai của giao thức sẽ tương thích với phiên bản đầu tiên. Tất cả những ưu điểm của phiên bản mới sẽ chỉ được bổ sung và cải thiện theo thời gian, các thay đổi sẽ được thực hiện thường xuyên, HTTP / 2 sẽ không ngừng phát triển. Giao thức được cập nhật sẽ chứa thuật toán cho tất cả các tùy chọn mã hóa có sẵn với phiên bản cũ, nhưng theo thời gian, các tùy chọn mã hóa phù hợp hơn chắc chắn sẽ mở ra.

Cần phải hiểu rằng rất nhiều thời gian đã trôi qua kể từ khi HTTP1.1 xuất hiện, web đã trải qua những thay đổi to lớn và mở rộng vô cùng, vì vậy cần phải vá tất cả những lỗ hổng đã phát sinh trong hơn một thập kỷ kể từ khi phát triển. của phiên bản đầu tiên.

Khả năng

Giao thức này tối ưu hóa nghiêm túc hoạt động của các trang web do một số ưu điểm:

  • kết nối bền vững: Trước đây, yêu cầu bất kỳ URL cụ thể nào đều yêu cầu tạo các kết nối TCP riêng biệt, bây giờ có một kết nối cho tất cả;
  • ưu tiên luồng: bạn có thể đặt mức độ ưu tiên trên các máy chủ - tài nguyên nào quan trọng hơn đối với bạn;
  • thu nhỏ tiêu đề: bạn có thể nén kích thước của tiêu đề HTTP;
  • đẩy-gửi dữ liệu: máy chủ có thể gửi cho bạn một số dữ liệu nhất định ngay cả trước khi có yêu cầu.

Ghép kênh

Ghép kênh là một kỹ thuật trong HTTP2, với sự trợ giúp của nó, có thể gửi nhiều yêu cầu cùng một lúc, trong khi phản hồi được nhận không đồng bộ thông qua một kết nối duy nhất. Ghép kênh là trung tâm của giao thức http2. Nó cho phép bạn gửi nhiều yêu cầu cùng lúc mà không cần bắt đầu kết nối riêng cho từng yêu cầu.

Khi làm việc với http1, khi tải trang, tải một trang HTML, hệ thống thấy nó cần một số tệp: CSS, hình ảnh, javascripts, v.v. Đầu tiên, trình duyệt của bạn tải trang và sau đó đưa ra yêu cầu CSS. Sau đó, kịch bản được yêu cầu. Sau đó, một bức tranh và như vậy. Bạn chỉ có thể làm việc với một trong số chúng lần lượt.

Sau khi gửi yêu cầu, hệ thống sẽ đợi cho đến khi nhận được phản hồi... Đây không phải là vấn đề của trình duyệt, mà là vấn đề của chính giao thức, vì trình duyệt không cần đợi phản hồi cho tất cả các yêu cầu này, điều này rất mất thời gian. Do đó, một trong những vấn đề chính trên Internet ngày nay là sự chậm chạp của mạng khi liên lạc giữa máy chủ và chính máy khách. Đồng thời, thời gian có thể là mili giây, có thể không nhiều lắm, nhưng khi cộng lại với nhau, chúng thường làm chậm trình duyệt - đặc biệt là khi cấu trúc của các trang web liên tục trở nên phức tạp hơn và truy cập Internet ngày càng trở nên di động hơn (với độ trễ thấp hơn so với Internet thông thường).

HTTP / 2 cho phép gửi nhiều yêu cầu cùng một lúc trong cùng một kết nối, bỏ qua toàn bộ trình tự này. Tất cả các yêu cầu này đi qua Internet đến máy chủ song song. Máy chủ trả lời từng và sau đó trả về.

QUAN TRỌNG: trong HTTP / 1.1 có cái gọi là pipelining, điều này cũng giúp bạn có thể gửi nhiều yêu cầu cùng một lúc. Nhưng nó ít chức năng hơn nhiều so với ghép kênh.

Sự ưu tiên

Khả năng ưu tiên là một tính năng mới khác trong HTTP / 2. Mỗi yêu cầu hiện có thể được chỉ định một mức độ ưu tiên... Có hai cách để chỉ định mức độ ưu tiên: theo trọng số hoặc dựa trên sự phụ thuộc.

Trong khái niệm đầu tiên, mỗi luồng được gán một trọng số. Dựa trên trọng số này, máy chủ phân phối lại tải giữa các luồng.

Cách tiếp cận HTTP / 2 thứ hai và chính giả định rằng trình duyệt đầu tiên yêu cầu máy chủ trả về nội dung cụ thể dựa trên loại; ví dụ: trước tiên, một trình duyệt có thể yêu cầu tệp CSS hoặc JS, sau đó là HTML và sau đó là hình ảnh.

Trong HTTP / 2, ưu tiên là tùy chọn, nhưng được ưu tiên hơn vì ghép kênh sẽ không hoạt động như mong đợi. Tải xuống thậm chí có thể chậm hơn hơn trong HTTP / 1.1. Các tài nguyên ưu tiên thấp nhất sẽ độc quyền băng thông, làm giảm hiệu suất.

Mức độ ưu tiên mang lại:

  • Kết nối mạng hiệu quả hơn.
  • Giảm thời gian sử dụng.
  • Tăng tốc thời gian tải trang web.
  • Tối ưu hóa việc truyền dữ liệu giữa máy chủ-máy khách.

Nén tiêu đề

Ngày nay, các trang web chủ yếu là sự kết hợp của một số lượng lớn các yếu tố khác nhau: hình ảnh, java-script, CSS, v.v. Mỗi khi trình duyệt yêu cầu một trong những phần tử này, nó sẽ gửi tiêu đề HTTP tương ứng. Sau đó máy chủ sẽ đính kèm tiêu đề vào các phần tử được yêu cầu. Nó tiêu tốn tài nguyên đáng kể.

Trong HTTP / 2, tiêu đề được nén... Điều này làm giảm lượng thông tin trao đổi giữa máy chủ và trình duyệt. Thay vì các thuật toán gzip / deflate, HPACK được sử dụng như một cách tiếp cận thuận tiện nhất và đơn giản nhất để nén tiêu đề. Nó cũng làm giảm nguy cơ bị tấn công BREACH. Có nhiều lợi ích khi sử dụng HPACK:

  • Loại bỏ tải bổ sung và tiêu thụ tài nguyên.
  • Giảm kích thước riêng của dữ liệu được truyền sau khi rút ngắn tiêu đề.
  • Miễn nhiễm với các cuộc tấn công bảo mật.

Máy chủ đẩy

HTTP / 2 Server Push là một trong những cải tiến hiệu suất có trong phiên bản 2 của giao thức HTTP. Điều này cho phép máy chủ web cung cấp thông tin trước cho máy khách (thậm chí trước khi có yêu cầu), mà nó có thể yêu cầu trong tương lai. HTTP / 2 Server Push dựa trên thực tế là một máy khách yêu cầu một thông tin khác sẽ yêu cầu thông tin khác trong tương lai. Nói cách khác, trò chơi không vượt trội

Cách Push hoạt động theo ví dụ: Trình duyệt của bạn yêu cầu một trang web (index.html trong ví dụ của chúng tôi) và máy chủ trả về cho bạn ba đối tượng: index.html, cũng như hai đối tượng bổ sung: scripts.js và styles.css, là được lưu trữ trong một bộ nhớ cache đặc biệt dành riêng cho mục đích này. Sau đó, khách hàng phân tích cú pháp index.html và nhận ra rằng cần có ba đối tượng để tải trang: scripts.js, styles.css và image.jpg. Hai cái đầu tiên đã có trong bộ nhớ cache của trình duyệt khi chúng được máy chủ lưu, vì vậy máy khách chỉ cần yêu cầu một image.jpg từ máy chủ để hiển thị trang.

Tính năng này có nhiều ưu điểm:

  • Tài nguyên khách hàng được lưu vào bộ nhớ đệm.
  • Các tài nguyên đã lưu có thể được sử dụng lại trên các trang web khác.
  • Máy khách luôn có thể từ bỏ tài nguyên của họ để duy trì hiệu quả của bộ nhớ đệm lưu trữ hoặc tắt hoàn toàn chức năng máy chủ đẩy.

Giao thức thực hiện ghép kênh và ưu tiên luồng dữ liệu nhúng, để làm cho việc truyền dữ liệu hiệu quả hơn và hiệu quả hơn, điều này có thể thấy rõ nếu bạn xem xét các luồng phản hồi yêu cầu khác.

Ssl và mã hóa

Chuyển sang HTTPS / 2, bạn tự động chuyển sang HTTPS, nghĩa là, đối với một chế độ hoạt động được bảo vệ trên mạng. Hơn nữa, đây là chế độ duy nhất mà trình duyệt web sẽ hoạt động. HTTPS sẽ mã hóa tuyệt đối tất cả lưu lượng truy cập Internet và sẽ yêu cầu chứng chỉ (ngày nay bạn có thể tìm chứng chỉ DV thông thường mà không tốn một xu, ví dụ: thông qua chứng chỉ WoSign SSL hoặc thông qua Lets Encrypt, mặc dù Google có thể ngừng tin tưởng chứng chỉ của họ bất cứ lúc nào , do đó bạn cần phải tuân theo chương trình làm việc một cách cẩn thận).

Binarity

HTTP / 2 là một giao thức nhị phân. Các giao thức nhị phân có hiệu quả hơn trong việc phân tích và giảm lỗi so với các giao thức dựa trên văn bản trong đó mọi người viết yêu cầu theo cách thủ công qua TELNET. Binarity tăng tốc độ truyền dữ liệu và tải ứng dụng khách ít hơn, giúp việc triển khai các tác vụ trở nên dễ dàng hơn nhiều.

Bản chất nhị phân của phiên bản mới của giao thức là cần thiết để đơn giản hóa việc hình thành các gói, cũng như nhận dạng chúng. Ngày của HTTP / 1.1 phần lớn được đánh số bởi vì rõ ràng rằng việc xác định điểm đầu và điểm cuối của một gói tin đã trở nên quá tốn thời gian. Tận dụng những ưu điểm và cải tiến của giao thức này, chúng tôi tránh được việc lặp lại vô tận và ghi lại giống nhau, do đó tối ưu hóa công việc của chính chúng tôi.

Ngoài ra, bây giờ có thể rất đơn giản tách phần liên kết với chính giao thức và với gói dữ liệu, ngược lại với HTTP1 lỗi thời, nơi tất cả điều này được trộn một cách tự nhiên.

Vì vậy, đây là những ưu điểm chính của giao thức nhị phân:

  • Chi phí bổ sung rất nhỏ trong quá trình phân tích dữ liệu.
  • Ít bị lỗi hơn nhiều so với phiên bản trước của giao thức.
  • Dễ dàng làm chủ không gian mạng.
  • Hiệu quả cao hơn trong việc sử dụng tài nguyên mạng.
  • Loại bỏ tất cả các lỗ hổng bảo mật và mã hóa cũng như các cuộc tấn công định kỳ có liên quan đến thực tế là HTTP / 1.1 là dựa trên văn bản.
  • Bản thân các khả năng độc đáo của HTTP / 2, chẳng hạn như đẩy, ghép kênh, ưu tiên, kiểm soát luồng và tối ưu hóa mạng.
  • Đơn giản hóa việc xử lý và thực hiện lệnh.
  • Tăng tốc độ truyền dữ liệu giữa máy khách và máy chủ.
  • Giảm đáng kể độ trễ mạng và tăng băng thông.

Hỗ trợ trình duyệt

Ngày nay, đại đa số các trình duyệt hiện tại, cả máy tính để bàn và thiết bị di động, đều hỗ trợ công nghệ HTTP / 2. Đầu tiên trong số này là những gã khổng lồ như Google Chrome và Mozzila Firefox, đã hỗ trợ giao thức này trong nhiều năm. Sau đó, rõ ràng là theo ví dụ của họ, Apple vào năm 2014 đã bổ sung hỗ trợ công nghệ này cho trình duyệt Safari của mình. Sau đó, các trình duyệt nhỏ hơn cũng bắt đầu hoạt động theo hướng này. Tuy nhiên, IE Explorer yêu cầu ít nhất Windows 8 để hoạt động với giao thức này.

Các trình duyệt di động không bị tụt hậu và đã kết nối giao thức với hầu hết các nền tảng hiện có... Điều này áp dụng cho trình duyệt Android, Chrome dành cho Android và iOS, Safari, bắt đầu từ iOS 8 - các trình duyệt di động này đã hỗ trợ HTTP / 2. Đồng thời, theo thời gian và sự xâm nhập của công nghệ vào cuộc sống hàng ngày, khu vực phân phối cũng không ngừng được mở rộng.

Tối ưu hóa Công cụ Tìm kiếm (SEO)

Tất nhiên, hầu hết những người sở hữu hoặc đã từng sở hữu tài nguyên của riêng mình sẽ hiểu. Một trong những yếu tố quan trọng nhất mà các trang web xếp hạng cho các công cụ tìm kiếm là tốc độ trung bình mà các trang web được tải.

Do đó, các tài nguyên làm việc trên phiên bản mới của giao thức HTTP sẽ nhận được phần thưởng xếp hạng do tốc độ tải trang web. Một điểm cộng nữa là khi bạn chuyển sang http2, bạn sẽ tự động chuyển sang HTTPS, và kết quả là bạn cũng nhận được một phần thưởng trong xếp hạng công cụ tìm kiếm cũng như khi sử dụng HTTPS.

Tối ưu hóa trang web

Đối với phiên bản trước của giao thức, các tối ưu hóa khác nhau đã được sử dụng - điều này là cần thiết để giải quyết các lỗ hổng và hạn chế tồn tại trong HTTP / 1. Một số giải pháp tối ưu hóa này có thể hoạt động trong phiên bản cập nhật của giao thức, nhưng nhiều giải pháp sẽ phải bị loại bỏ hoặc ít nhất là sửa đổi. Mặc dù một số trong số chúng đơn giản là không bắt buộc, bởi vì phiên bản mới của giao thức chỉ là một phần mở rộng của phiên bản cũ, các trang web trong mọi trường hợp sẽ hoạt động với tất cả các tối ưu hóa cũ. Dưới đây là những thứ cần chú ý:

  1. Kết hợp hình ảnh thành CSS sprites... Trong phiên bản đầu tiên của giao thức, việc kết hợp các hình ảnh vừa và nhỏ thành một sprite sẽ rất hiệu quả, vì một kết nối duy nhất là bắt buộc. Nhưng nếu chỉ có một hình ảnh, bạn sẽ phải tải sprite hoàn toàn. Trong HTTP2, nhờ ghép kênh, có thể thực hiện nhiều yêu cầu và thuận tiện hơn khi tải xuống một số hình ảnh nhỏ cùng một lúc. Mặc dù đôi khi chúng ta vẫn nên hợp nhất hình ảnh thành một sprite để cải thiện chất lượng nén và khối lượng tải.
  2. Khả năng nhúng hình ảnh vào nội dung của trang bằng cách sử dụng dữ liệu: URI... Đây là một giải pháp phổ biến khác cho vấn đề với nhiều yêu cầu trong phiên bản cũ của giao thức: hình ảnh được nhúng vào CSS thông qua dữ liệu: URI. Điều này có thể làm tăng kích thước tệp đáng kể, nhưng không cần nhiều kết nối. Trong HTTP2, cách tiếp cận này có thể vẫn phù hợp, nhưng sẽ không cải thiện hiệu suất.
  3. Kết hợp các tệp JS và CSS thành một tệp duy nhất... Bằng cách này, khi trang tải, các bảng định kiểu và mã javascript được tải ngay lập tức. Ngoài ra, trình duyệt lưu trữ toàn bộ tệp này vào bộ nhớ cache và ngay cả những thay đổi nhỏ đối với mã cũng sẽ yêu cầu tải lại toàn bộ tệp. Ghép kênh hoàn toàn giải quyết được vấn đề này và loại bỏ sự bất tiện này.
  4. Mập miền... Trong phiên bản cũ của http, số lượng kết nối mở bị hạn chế. Nếu bạn cần tải xuống nhiều tài nguyên cùng một lúc, thì bạn thường có thể sử dụng chúng từ các miền khác nhau hoặc miền phụ của miền chính. HTTP / 2 tạo ra khả năng tạo bao nhiêu tài nguyên tùy thích, loại bỏ hiệu quả sự cần thiết của tính năng này, trong khi phân vùng miền có tác động tiêu cực đến hiệu suất do có nhiều kết nối TCP mở.

Làm thế nào để kết nối

Để đưa giao thức vào hoạt động, bạn sẽ không cần thay đổi bất kỳ điều gì trong không gian làm việc thông thường: bạn sẽ không cần thay đổi URL của các trang hoặc thực hiện chuyển hướng, thay đổi liên kết, đánh dấu hoặc viết bất kỳ dữ liệu bổ sung nào để bảo vệ. Khi kết nối HTTP2 với trang web, bạn chỉ cần bật HTTPS và thực hiện tất cả các thủ tục thích hợp, không cần thực hiện thêm gì nữa, do đó mã hóa sẽ được bật và trang web sẽ được bảo vệ.

Đến kiểm tra sự hỗ trợ của trình duyệt cho HTTP2 bạn có thể sử dụng các tiện ích mở rộng đặc biệt cho trình duyệt Mozzila Firefox và Google Chrome, cũng như sử dụng công cụ kiểm tra tốc độ trên trang web Ayri.rf: sau khi kiểm tra, một trong các viên xúc xắc sẽ sáng lên - nếu trình duyệt hỗ trợ giao thức HTTP2, thì một thanh màu xanh lục sẽ xuất hiện trong kết quả kiểm tra [HTTP / 2.0]. Có các dịch vụ Internet khác để kiểm tra hỗ trợ cho giao thức được nâng cấp, một trong số đó là dịch vụ từ http2.pro.

Phần kết luận

Một kỷ nguyên mới mà HTTP / 2 sẽ thống trị gần như đang đến gần: giao thức này đã được nhiều trình duyệt hỗ trợ. Thời đại của web mới sẽ nhanh hơn, an toàn hơn và rất thoải mái khi sử dụng, đã có thể hoàn toàn chấp nhận rằng http2 là tiêu chuẩn mà chúng ta sẽ sử dụng trên mạng toàn cầu trong tương lai gần.

HTTP(HyperText Transfer Protocol - "Giao thức truyền siêu văn bản") - một giao thức cấp ứng dụng để truyền dữ liệu (ban đầu - ở dạng tài liệu siêu văn bản). HTTP dựa trên công nghệ "máy khách-máy chủ", có nghĩa là có người tiêu dùng (máy khách) bắt đầu kết nối và gửi yêu cầu và nhà cung cấp (máy chủ) chờ kết nối để nhận yêu cầu, thực hiện các hành động cần thiết và trả về một thông báo cùng với kết quả.

HTTP cũng được sử dụng như một "phương tiện truyền tải" cho các giao thức lớp ứng dụng khác như SOAP, XML-RPC, WebDAV.

Đối tượng chính của thao tác trong HTTP là tài nguyên được chỉ đến bởi URI (Định danh tài nguyên đồng nhất) trong yêu cầu máy khách. Thông thường, các tài nguyên này là các tệp được lưu trữ trên máy chủ, nhưng chúng có thể là các đối tượng logic hoặc một cái gì đó trừu tượng. Một tính năng của giao thức HTTP là khả năng chỉ định trong yêu cầu và phản hồi cách biểu diễn cùng một tài nguyên bằng các tham số khác nhau: định dạng, mã hóa, ngôn ngữ, v.v. Đó là nhờ khả năng chỉ định phương pháp mã hóa thông báo mà máy khách và máy chủ có thể trao đổi dữ liệu nhị phân, mặc dù giao thức này là văn bản.

HTTP là một giao thức lớp ứng dụng, tương tự như FTP và SMTP là một giao thức truyền thư đơn giản. Tin nhắn được trao đổi theo sơ đồ phản hồi yêu cầu thông thường. HTTP sử dụng các URI toàn cầu để xác định tài nguyên. Không giống như nhiều giao thức khác, HTTP là không trạng thái. Điều này có nghĩa là không có sự duy trì trạng thái trung gian giữa các cặp yêu cầu-phản hồi. Các thành phần sử dụng HTTP có thể duy trì độc lập thông tin trạng thái được liên kết với các yêu cầu và phản hồi gần đây nhất. Trình duyệt yêu cầu có thể theo dõi sự chậm trễ phản hồi. Máy chủ có thể lưu trữ địa chỉ IP và tiêu đề yêu cầu của các máy khách mới nhất. Tuy nhiên, bản thân giao thức không nhận thức được các yêu cầu và phản hồi trước đó, nó không cung cấp hỗ trợ trạng thái nội bộ và không có các yêu cầu đó.

    Khả năng mở rộng

Các khả năng của giao thức có thể được mở rộng dễ dàng bằng cách triển khai các tiêu đề riêng của nó trong khi vẫn duy trì khả năng tương thích với các máy khách và máy chủ khác. Họ sẽ bỏ qua các tiêu đề không xác định, nhưng họ vẫn có thể nhận được chức năng cần thiết cho các tác vụ cụ thể.

    HTTP / 1.1- phiên bản hiện tại của giao thức. Điểm mới trong bản phát hành này là chế độ "kết nối liên tục": kết nối TCP có thể vẫn mở sau khi gửi phản hồi cho một yêu cầu, cho phép nhiều yêu cầu được gửi trong một kết nối duy nhất. Bây giờ khách hàng có nghĩa vụ gửi thông tin về tên máy chủ mà anh ta đang đề cập đến, giúp việc tổ chức lưu trữ được chia sẻ dễ dàng hơn.

HTTP không lưu trữ thông tin giao dịch, vì vậy giao dịch tiếp theo phải bắt đầu lại. Ưu điểm là một máy chủ HTTP có thể phục vụ nhiều máy khách hơn trong một khoảng thời gian nhất định, vì chi phí bổ sung của các phiên theo dõi từ một kết nối đến kết nối tiếp theo được loại bỏ. Ngoài ra còn có một nhược điểm là các chương trình CGI phức tạp hơn phải sử dụng các trường đầu vào ẩn hoặc các phương tiện bên ngoài, chẳng hạn như cookie, để lưu trữ thông tin giao dịch.

Phương thức yêu cầu HTTP

Phương thức HTTP- một chuỗi các ký tự bất kỳ, ngoại trừ các ký tự điều khiển và dấu phân cách, cho biết hoạt động chính trên tài nguyên. Thông thường phương pháp là một từ tiếng Anh ngắn được viết bằng chữ in hoa. Lưu ý rằng tên phương thức có phân biệt chữ hoa chữ thường.

Mọi máy chủ phải hỗ trợ ít nhất phương thức GET và HEAD. Nếu máy chủ không nhận ra phương thức được chỉ định bởi máy khách, thì nó sẽ trả về trạng thái 501 (Không được triển khai). Nếu máy chủ biết phương pháp, nhưng nó không thể áp dụng cho một tài nguyên cụ thể, thì một thông báo có mã 405 (Phương thức không được phép) sẽ được trả về. Trong cả hai trường hợp, máy chủ NÊN bao gồm tiêu đề Cho phép trong thông báo phản hồi cùng với danh sách các phương pháp được hỗ trợ.

Ngoài các phương thức GET và HEAD, phương thức POST thường được sử dụng.

  • Yêu cầu HTTP, phản hồi, tiêu đề thực thể (tham số)

    Tất cả các tiêu đề trong giao thức HTTP được chia thành bốn nhóm chính (theo thứ tự bên dưới, bạn nên gửi tiêu đề đến người nhận):

      Tiêu đề chung(Tiêu đề chính) - phải được bao gồm trong bất kỳ thông báo máy khách và máy chủ nào.

      Yêu cầu tiêu đề(Tiêu đề yêu cầu) - chỉ được sử dụng trong các yêu cầu của khách hàng.

      Tiêu đề phản hồi(Tiêu đề phản hồi) - chỉ dành cho phản hồi từ máy chủ.

      Tiêu đề thực thể(Tiêu đề thực thể) - đi kèm với mỗi thực thể của thông báo. Tiêu đề thực thể được tách thành một lớp riêng biệt để không bị nhầm lẫn với tiêu đề yêu cầu hoặc tiêu đề phản hồi khi truyền nhiều nội dung (MIME).

    Tất cả các tiêu đề HTTP cần thiết cho hoạt động được mô tả trong các RFC chính. Nếu cần, bạn có thể tạo tiêu đề của riêng mình. Theo truyền thống, tiền tố "X-" được thêm vào tên của các tiêu đề bổ sung như vậy để tránh xung đột tên với những tên có thể hiện có.

    Các dòng sau dòng yêu cầu chính (GET /index.html HTTP / 1.1) có định dạng sau: Tham số: giá trị. Đây là cách các tham số truy vấn được thiết lập. Đây là tùy chọn, tất cả các dòng sau dòng truy vấn chính có thể bị thiếu; trong trường hợp này, máy chủ chấp nhận giá trị mặc định của chúng hoặc dựa trên kết quả của yêu cầu trước đó (khi làm việc ở chế độ Connection: Keep-Alive).

      Tham số Sự liên quan(kết nối) - có thể là Keep-Alive và đóng. Trong HTTP 1.0, máy chủ gửi dữ liệu được yêu cầu theo sau là ngắt kết nối khỏi máy khách và giao dịch được coi là hoàn tất nếu tiêu đề Connection: Keep Alive không được gửi. Trong HTTP 1.1, máy chủ không bỏ kết nối theo mặc định và máy khách có thể thực hiện các yêu cầu khác. Bởi vì nhiều tài liệu có các tài liệu khác được nhúng trong đó - hình ảnh, khung, applet, v.v. - điều này giúp tiết kiệm thời gian và chi phí cho khách hàng, những người sẽ phải kết nối nhiều lần với cùng một máy chủ để chỉ có được một trang. Do đó, trong HTTP 1.1, một giao dịch có thể được lặp lại cho đến khi máy khách hoặc máy chủ đóng kết nối một cách rõ ràng.

      Tham số Đại lý người dùng- giá trị là "điểm mã" của trình duyệt.

      Tham số Chấp nhận- danh sách các loại nội dung được trình duyệt hỗ trợ theo thứ tự ưu tiên của chúng cho trình duyệt này.

      Tham số Tổ chức- tên miền mà tài nguyên được yêu cầu. Hữu ích nếu máy chủ có nhiều máy chủ ảo dưới cùng một địa chỉ IP. Trong trường hợp này, tên của miền ảo được xác định từ trường này.

      Tham số Sửa đổi lần cuối(sửa đổi lần cuối) (W3C Sửa lần cuối) - Ngày và giờ tài liệu được sửa đổi lần cuối. Khi sử dụng nó, máy khách, giống như trong trường hợp với ETag, có thể liên hệ với máy chủ với yêu cầu "If-Modified-Since" - trong trường hợp này, máy chủ phải so sánh ngày sửa đổi cuối cùng của bản sao được lưu trữ trên máy khách với ngày hiện tại của lần sửa đổi cuối cùng. Nếu chúng khớp nhau, điều đó có nghĩa là bản sao trong bộ nhớ cache của máy khách không bị lỗi thời và không cần tải xuống lại (mã phản hồi "304 Not Modified"). Last-Modified cũng cần thiết cho việc xử lý chính xác trang web bởi các rô bốt sử dụng thông tin về ngày sửa đổi trang để sắp xếp kết quả tìm kiếm theo ngày, cũng như để xác định tần suất cập nhật trang web của bạn.

    Đối với tài liệu SSI, Apache sẽ đưa ra "Last-Modified" nếu chỉ thị "XBitHack full" được chỉ định (ví dụ: trong tệp .htaccess)

      Tham số ETag(thẻ đối tượng) - Được giới thiệu trong HTTP 1.1 (W3C ETag). ETag được sử dụng để gán một mã định danh duy nhất cho mỗi trang, giá trị của nó sẽ thay đổi khi trang (tài liệu) được thay đổi. ETag là một hàm băm ("dấu vân tay") của các byte trong tài liệu, nếu ít nhất một byte trong tài liệu thay đổi, thì ETag cũng sẽ thay đổi. ETag được sử dụng khi lưu vào bộ nhớ đệm một tài liệu. Tiêu đề này được lưu trên máy khách và trong trường hợp truy cập nhiều lần vào tài liệu, nó cho phép trình duyệt liên hệ với máy chủ với yêu cầu 'Nếu-Không-Khớp' và máy chủ, theo giá trị thẻ ETag, xác định tài liệu (trang) đã thay đổi hay chưa, và nếu không, hãy trả lời bằng mã '304 Not Modified'.

      Tham số Hết hạn(hết hạn) (W3C Expires) - nó cho trình duyệt biết khoảng thời gian nào có thể được coi là bản sao của trang trong bộ nhớ cache là mới và hoàn toàn không liên hệ với máy chủ với các yêu cầu. Điều này thuận tiện cho các tệp mà bạn biết chắc rằng chúng sẽ không thay đổi trong giờ / ngày / tháng tiếp theo: chẳng hạn như hình nền của trang.

    Các tiêu đề HTTP khác:

      HTTP_X_FORWARDED_FOR

      HTTP_X_FORWARDED

      HTTP_FORWARDED_FOR

    • HTTP_X_COMING_FROM

      HTTP_COMING_FROM

    • HTTP_X_CLUSTER_CLIENT_IP

    • HTTP_XROXY_CONNECTION

      HTTP_PROXY_CONNECTION

      HTTP_USERAGENT_VIA - proxy

    Ví dụ về phân tích cú pháp một yêu cầu HTTP

    Một yêu cầu HTTP bao gồm ba phần: dòng yêu cầu (phản hồi), phần tiêu đề, theo sau là phần nội dung tùy chọn. Tiêu đề là văn bản thuần túy, với mỗi tiêu đề được phân tách với tiêu đề tiếp theo bằng ký tự dòng mới (\ r \ n), trong khi phần nội dung có thể là văn bản hoặc dữ liệu nhị phân. Phần nội dung được phân tách khỏi tiêu đề bằng hai dòng mới.

    Tiêu đề yêu cầu bao gồm dòng truy vấn chính (đầu tiên) và các dòng tiếp theo sẽ tinh chỉnh truy vấn trong dòng chính. Các dòng tiếp theo cũng có thể bị thiếu.

    Khách hàng bắt đầu giao dịch như sau:

      Máy khách giao tiếp với máy chủ bằng số cổng được chỉ định, số cổng chính thức mặc định là 80. Sau đó máy khách sẽ gửi một yêu cầu tài liệu chỉ định phương thức, địa chỉ tài liệu và số phiên bản HTTP. Ví dụ: trong dòng yêu cầu chính GET /index.html HTTP / 1.1

      phương thức GET được sử dụng, phương thức này yêu cầu tài liệu index.html bằng cách sử dụng phiên bản 1.1 của HTTP.

      Máy khách gửi thông tin tiêu đề (tùy chọn, tiêu đề máy chủ là bắt buộc) để thông báo cho máy chủ về thông tin cấu hình của nó và các định dạng tài liệu mà nó có thể chấp nhận. Tất cả thông tin tiêu đề được liệt kê từng dòng, với tên và giá trị trên mỗi dòng. Ví dụ: tiêu đề bên dưới, do khách hàng gửi, chứa tên và số phiên bản, cũng như thông tin về một số loại tài liệu ưa thích của khách hàng: Máy chủ: list.mail.ru Tác nhân người dùng: Mozilla / 5.0 (Ubuntu; X11 ; Linux x86_64; rv: 8.0) Gecko / 20100101 Firefox / 8.0 Chấp nhận: text / html, application / xhtml + xml, application / xml; q = 0.9, * / *; q = 0.8

      Tiêu đề kết thúc bằng một dòng trống.

      Bằng cách gửi yêu cầu và tiêu đề, khách hàng có thể gửi thêm dữ liệu, ví dụ: cho các tập lệnh CGI.

    Máy chủ đáp ứng yêu cầu của khách hàng như sau:

      Phần đầu tiên của phản hồi máy chủ là thanh trạng thái chứa ba trường: phiên bản HTTP, mã trạng thái và mô tả. Trường phiên bản chứa số phiên bản của HTTP mà máy chủ này đang sử dụng để gửi phản hồi. Mã trạng thái là một số có ba chữ số cho biết kết quả của việc máy chủ xử lý yêu cầu của khách hàng. Mô tả theo sau mã trạng thái đơn giản là văn bản con người có thể đọc được giải thích mã trạng thái. Ví dụ: thanh trạng thái HTTP / 1.1 304 Không được sửa đổi

      chỉ ra rằng máy chủ đang sử dụng HTTP 1.1 cho phản hồi. Mã trạng thái 304 có nghĩa là khách hàng đã yêu cầu tài liệu bằng phương thức GET, đã sử dụng tiêu đề If-Modified-Since hoặc If-None-Match và tài liệu không thay đổi kể từ thời điểm đó.

      Sau thanh trạng thái, máy chủ gửi thông tin tiêu đề đến máy khách chứa thông tin về chính máy chủ và tài liệu được yêu cầu. Dưới đây là tiêu đề ví dụ: Ngày: Thu, ngày 15 tháng 12 năm 2011 09:34:15 GMT Máy chủ: Apache / 2.2.21 (Debian) X-Powered-By: PHP / 5.3.8-1 + b1 Hết hạn: Thứ năm, ngày 19 tháng 11 1981 08:52:00 GMT Cache-Control: no-store, no-cache, must-revalidate, post-check = 0, pre-check = 0 Pragma: no-cache Vary: Accept-Encoding Content-Encoding: gzip Keep - Alive: timeout = 5, max = 100 Kết nối: Keep-Alive Content-Type: text / html; charset = utf-8

      Tiêu đề kết thúc bằng một dòng trống.

      Nếu yêu cầu của khách hàng thành công, thì dữ liệu được yêu cầu sẽ được gửi đi. Nó có thể là một bản sao của một tệp hoặc đầu ra của một chương trình CGI. Nếu yêu cầu của khách hàng không thể được đáp ứng, dữ liệu bổ sung sẽ được gửi dưới dạng giải thích thân thiện với người dùng về lý do tại sao máy chủ không thể thực hiện yêu cầu.

    Mã trạng thái HTTP

    Mã trạng thái HTTP là một phần của dòng phản hồi đầu tiên của máy chủ. Nó là một số nguyên có ba chữ số. Chữ số đầu tiên cho biết lớp của điều kiện. Mã phản hồi thường được theo sau bởi một cụm từ giải thích bằng tiếng Anh, được phân tách bằng dấu cách, giải thích cho người đó lý do cho câu trả lời cụ thể này.

    Máy khách có thể không biết tất cả các mã trạng thái, nhưng khách hàng có trách nhiệm trả lời theo lớp của mã. Hiện tại, có năm loại mã trạng thái:

      1xx: Thông tin. Mã trạng thái thông tin thông báo cho khách hàng rằng máy chủ đang trong quá trình xử lý một yêu cầu. Phản hồi của khách hàng đối với các mã này là không bắt buộc;

      2xx: Sự thành công.

      1. 200 được(Tốt). Được giới thiệu trong HTTP / 1.0. Yêu cầu tài nguyên thành công. Nếu khách hàng đã yêu cầu bất kỳ dữ liệu nào, thì chúng sẽ nằm trong tiêu đề và / hoặc nội dung của thư.

      3xx: Chuyển hướng Các mã lớp 3xx yêu cầu khách hàng thực hiện một yêu cầu khác (thường là ở một URI khác) để hoàn thành hoạt động thành công. Trong lớp này, năm mã 301, 302, 303, 305 và 307 đề cập trực tiếp đến chuyển hướng (redirect). Máy chủ chỉ định địa chỉ mà máy khách sẽ thực hiện yêu cầu trong tiêu đề Vị trí. Nhiều khách hàng, khi chuyển hướng với mã 301 và 302, áp dụng nhầm phương thức GET cho tài nguyên thứ hai, mặc dù thực tế là yêu cầu đầu tiên với một phương thức khác. Để tránh nhầm lẫn trong phiên bản HTTP / 1.1, mã 303 và 307 đã được giới thiệu thay vì 302. Phương thức yêu cầu chỉ được thay đổi nếu máy chủ phản hồi bằng 303. Trong các trường hợp khác, yêu cầu tiếp theo phải được thực hiện với phương thức gốc.

      1. 302 Tìm thấy(Tìm). Được giới thiệu trong HTTP / 1.0. Tài liệu được yêu cầu tạm thời có sẵn tại một URI khác được chỉ định trong tiêu đề trong trường Vị trí.

      4xx: Lỗi máy khách. Lớp mã 4xx nhằm chỉ ra lỗi phía máy khách. Khi sử dụng tất cả các phương pháp ngoại trừ HEAD, máy chủ phải trả về giải thích siêu văn bản cho người dùng trong nội dung thư.

      1. 404 không tìm thấy. Được giới thiệu trong HTTP / 1.0. Máy chủ hiểu yêu cầu, nhưng không tìm thấy tài nguyên phù hợp tại URI được chỉ định.

      5xx: Lỗi máy chủ

    Các liên kết liên quan đến HTTP 1.1

    HTTP / 2

    HTTP / 2 (ban đầu là HTTP / 2.0) là phiên bản chính thứ hai của giao thức mạng HTTP. Giao thức dựa trên SPDY (Giao thức tương thích HTTP do Google phát triển).

    Giao thức HTTP / 2 là nhị phân. So với tiêu chuẩn trước đây, các phương pháp chia dữ liệu thành các mảnh và vận chuyển chúng giữa máy chủ và máy khách đã được thay đổi.

    Trong HTTP / 2, máy chủ có quyền gửi nội dung chưa được máy khách yêu cầu. Điều này sẽ cho phép máy chủ ngay lập tức gửi các tệp bổ sung mà trình duyệt sẽ cần để hiển thị các trang mà không cần trình duyệt phân tích cú pháp trang chính và yêu cầu các tiện ích bổ sung cần thiết.

Bài báo tiết lộ bản chất hoạt động của giao thức HTTP, bên cạnh đó, nó còn cho biết về các sơ đồ hoạt động khác nhau của nó. Đặc biệt chú ý đến bản chất của sự tương tác giữa trình duyệt và máy chủ.

Bản chất của HTTP

Trước hết, bạn nên hiểu quá trình tương tác giữa máy chủ và trình duyệt của người dùng. Để hiển thị một trang của trang web trên màn hình, trình duyệt sẽ gửi một tín hiệu có yêu cầu đến máy chủ, sau đó nội dung được mã hóa của trang web đến từ máy chủ, nội dung này được chuyển đổi thành giao diện thông thường của trang web. Nghiên cứu quy trình này đối với một nhà phát triển web là rất quan trọng vì bằng cách hiểu bản chất của quy trình, bạn có thể tăng tốc hiệu suất của tài nguyên của mình.

Việc trao đổi dữ liệu giữa máy chủ và trình duyệt diễn ra Giao thức HTTP... Bản thân trình duyệt theo quan điểm lập trình là Máy khách HTTP, vì nó sử dụng giao thức này khi gửi yêu cầu và nhận dữ liệu phản hồi.

Bây giờ chúng ta hãy tiết lộ bản chất của giao thức HTTP.

HTTP (Giao thức truyền siêu văn bản)- quá trình mà theo đó tất cả các loại hình trao đổi thông tin trên thế giới Internet đều được thực hiện.

Chúng tôi, với tư cách là những nhà phát triển web, chỉ quan tâm đến quá trình trao đổi và xuất thông tin.

Giao thức đồng bộ hóa

Trao đổi dữ liệu được thực hiện theo sơ đồ "máy khách-máy chủ". Trong lược đồ này, máy khách là thiết bị gửi yêu cầu cung cấp một số thông tin và máy chủ là hệ thống nhận yêu cầu, xử lý và gửi phản hồi trở lại máy khách. Bản thân quá trình giao tiếp có thể được chia thành hai giai đoạn: gửi một yêu cầu HTTP và nhận một phản hồi HTTP.

Yêu cầu và phản hồi không thể được truyền đồng thời; phải duy trì đồng bộ hóa quy trình. Nghĩa là, việc truyền phản hồi sẽ chỉ bắt đầu sau khi hoàn thành việc gửi yêu cầu, không thể làm việc theo một nguyên tắc khác. Để làm rõ hơn, hãy vẽ một phép tương tự với xe buýt: bạn không thể sử dụng nó cho đến khi nó đến bến xe buýt.

Yêu cầu được thực hiện như thế nào?

Quá trình gửi yêu cầu đến máy chủ có thể được chia thành một số thành phần:

  1. Trước hết, một yêu cầu DNS được thực hiện, yêu cầu này phải chuyển đổi địa chỉ trang web từ định dạng URI sang IP (dạng số của địa chỉ URI). Đây là định dạng địa chỉ được sử dụng trên World Wide Web.
  2. Sau khi xác định IP, giao tiếp được thiết lập giữa máy chủ và máy khách HTTP.
  3. Chuyển tiếp yêu cầu.
  4. Độ trễ, bao gồm việc gửi thông tin đến máy chủ, xử lý nó và gửi phản hồi cho yêu cầu. Lập trình viên gọi khoảng thời gian này là chờ phản hồi.
  5. Nhận được phản hồi cho một yêu cầu.

Bạn có thể theo dõi tất cả các giai đoạn này bằng cách sử dụng bảng nhà phát triển web trong trình duyệt.

Từ danh sách của tất cả các giai đoạn, đầu tiên là khá dài. Giao thức phát triển ban đầu HTTPđã sử dụng một sơ đồ xử lý dữ liệu lỗi thời được cung cấp cho việc ngắt kết nối sau khi nhận được phản hồi cho yêu cầu được yêu cầu. Điều này làm chậm rất nhiều quá trình làm việc trong không gian Internet. Tuy nhiên, sau khi tiêu chuẩn hóa mới của giao thức được phát hành HTTP phiên bản 1.1, một chế độ kết nối mới đã có sẵn - cố sống đi, theo đó kết nối trở nên không thể tách rời. Kết quả là, sau khi xử lý yêu cầu đầu tiên, bạn không cần phải trải qua giai đoạn đầu tiên một lần nữa mà chuyển trực tiếp đến giai đoạn thứ hai.

Ghi chú

Liên kết chỉ được duy trì trong một tài nguyên web. Khi bạn chuyển sang máy chủ khác, kết nối bị hỏng và giai đoạn đầu tiên lại trở thành một phần không thể thiếu của quá trình xử lý yêu cầu.

Quá trình lâu nhất trong hoạt động giao thức đang chờ phản hồi. Trong trường hợp này, việc nâng cấp thông số kỹ thuật không làm gì để giảm thời gian xử lý. Ngoài ra, quá trình này không bị ảnh hưởng bởi nguồn của thiết bị mà qua đó tài nguyên bị rút. Máy tính chỉ tham gia vào quy trình ở giai đoạn cuối cùng, khi phản hồi đã đến và cần được xử lý.

Hình thức làm việc này làm giảm cơ hội của các trang web trong cuộc cạnh tranh với các ứng dụng máy tính để bàn. Từ đây là cách đầu tiên để tăng tốc công việc của trang web - bạn cần giảm thiểu số lượng yêu cầu đến máy chủ, được viết bằng mã.

Kết nối HTTP song song

Để giải quyết vấn đề về độ trễ lâu và gián đoạn giao tiếp với máy chủ lưu trữ, một sơ đồ truyền thông song song đã được tạo ra giữa máy khách và máy chủ. Nói cách khác, bạn có thể kết nối với nhiều máy chủ cùng một lúc. Nhà phát triển tiêu chuẩn HTTP 1.1 Nên kết nối không quá 2 kênh kết nối cùng một lúc. Nhưng cần lưu ý rằng đặc điểm kỹ thuật xuất hiện vào thời kỳ khủng long cổ đại. Giờ đây, các trình duyệt dễ dàng hỗ trợ giao tiếp với 4 kênh cùng lúc theo mặc định, và nếu bạn lục trong phần cài đặt máy khách, thì con số này có thể tăng lên 8.

Mỗi kênh hoạt động theo sơ đồ kết nối cũ, nhưng sự gia tăng số lượng của chúng đã dẫn đến những thay đổi đáng kể về thời gian tải tài nguyên.

Kết nối Piped HTTP

Với sự phát triển của công nghệ, quá trình tương tác giữa máy chủ và trình duyệt bắt đầu phát triển đáng kể. Một bước đột phá quan trọng trong vấn đề này là việc tạo ra một sơ đồ đường ống để gửi các yêu cầu đến máy chủ (trong bản gốc - HTTP pipelining). Theo sơ đồ này, có thể gửi một số yêu cầu thông qua một kênh mà không cần đợi phản hồi từ chúng. Đến lượt mình, máy chủ bắt đầu lần lượt gửi phản hồi cho từng yêu cầu.

Sự đổi mới này cũng giúp giảm số lượng Gói TCP / IP... Vì vậy, bạn có thể đặt một số Yêu cầu HTTP... Kết quả là, không chỉ hoạt động của giao thức sẽ được cải thiện mà hiệu quả của Internet nói chung cũng sẽ tăng lên.

Tổng kết

Đặc điểm kỹ thuật ngày nay HTTP 1.1 là một bộ quy tắc lỗi thời về mặt đạo đức. Công việc hiện đại hóa đã được tiến hành trong một thời gian dài, một ví dụ sinh động về điều này là HTTP-NGSPDY... Tiến triển HTTP có thể và bằng cách cải thiện ngôn ngữ lập trình của các trang web HTML5... Tất cả các quy trình này sẽ tăng tốc hoạt động của giao thức, tuy nhiên, quy tắc giảm thiểu quyền truy cập vào máy chủ, điều này sẽ làm tăng tốc độ của tài nguyên, sẽ luôn có liên quan.

Mục đích của bài giảng:để hình thành ý tưởng về hoạt động của giao thức HTTP / HTTPS.

HTTP (HyperText Transfer Protocol) là một trong những giao thức quan trọng nhất để truyền dữ liệu qua Internet. Giao thức HTTP nằm ở lớp ứng dụng thứ bảy của mô hình OSI và hoạt động trên cơ sở giao thức TCP.

Bởi vì giao thức HTTP nằm ở lớp ứng dụng, các ứng dụng ứng dụng có thể sử dụng nó trực tiếp để kết nối mạng. Ngoài ra, giao thức HTTP là một phần thiết yếu của các ứng dụng web. Trong trường hợp này, trình duyệt, sử dụng các khả năng của HTTP, tương tác với máy chủ để lấy dữ liệu cần thiết.

Giao thức HTTP giả định truyền dữ liệu ở chế độ "yêu cầu-phản hồi"... Đồng thời, trong khuôn khổ của sự tương tác như vậy, dữ liệu của hầu hết mọi loại đều có thể được truyền - văn bản thuần túy, siêu văn bản (HTML), biểu định kiểu, tập lệnh máy khách, hình ảnh, tài liệu ở nhiều định dạng khác nhau, thông tin nhị phân, v.v.

Giao thức HTTP luôn phân biệt giữa máy khách và máy chủ. Khách hàng luôn là người khởi xướng tương tác. Đến lượt nó, máy chủ sẽ lắng nghe tất cả các kết nối đến và xử lý từng kết nối đó. Vì giao tiếp HTTP hoạt động theo lược đồ yêu cầu-phản hồi, một yêu cầu HTTP phải được tạo để bắt đầu phiên truyền dữ liệu. Là một phần của yêu cầu này, máy khách mô tả tài nguyên mà anh ta muốn nhận từ máy chủ và cũng chỉ định các tham số bổ sung khác nhau. Sau đó, yêu cầu được gửi đến máy chủ, máy chủ này sẽ xử lý yêu cầu và tạo phản hồi HTTP, chứa thông tin dịch vụ và nội dung của tài nguyên được yêu cầu. Nói chung, quá trình này có thể được mô tả bằng sơ đồ như sau.


Yêu cầu HTTP và phản hồi HTTP có cấu trúc tương tự nhau và được gọi là Tin nhắn HTTP... Trên thực tế, tất cả các thông tin liên lạc trong giao thức HTTP đều được tổng hợp để chuyển tiếp các thông điệp HTTP. Mỗi thông báo HTTP là thông tin văn bản thuần túy ở một định dạng cụ thể. Chúng ta hãy xem xét kỹ hơn định dạng thông báo HTTP.

Mỗi thông báo HTTP bao gồm nhiều dòng. Dòng đầu tiên luôn là dòng chào mừng; nó khác nhau đáng kể đối với một yêu cầu HTTP và một phản hồi HTTP. Nó thường chứa thông tin chung về yêu cầu. Sau dòng đầu tiên trong thông điệp HTTP, có các tiêu đề HTTP - mỗi tiêu đề trên một dòng mới. Tiêu đề HTTP có trong cả yêu cầu HTTP và phản hồi HTTP. Điểm của tiêu đề HTTP là tinh chỉnh thông điệp HTTP để phía nhận thông báo HTTP có thể xử lý thông điệp đến một cách chính xác nhất. Số lượng tiêu đề thông báo HTTP có thể thay đổi và phụ thuộc vào thông báo HTTP cụ thể. Nếu người gửi tin rằng tiêu đề HTTP này là bắt buộc trong thông báo HTTP này, thì nó sẽ thêm nó, nếu không, thì không. Mỗi tiêu đề HTTP bắt đầu trên một dòng mới. Tiêu đề HTTP bao gồm tên và giá trị, tên tiêu đề xác định mục đích của nó. Theo sau tập hợp các tiêu đề HTTP là một dòng trống, theo sau là nội dung của thông báo HTTP. Do đó, cấu trúc chung của một thông điệp HTTP có thể được biểu diễn như sau.


Yêu cầu HTTPđược tạo trên máy khách và được gửi đến máy chủ để nhận thông tin từ máy khách. Nó chứa thông tin về tài nguyên để tải xuống, cũng như thông tin bổ sung. Dòng đầu tiên chứa phương thức yêu cầu (mà chúng ta sẽ trình bày ở phần sau của chương này), tên tài nguyên (với một đường dẫn tương đối trên máy chủ) và phiên bản giao thức. Ví dụ: loại lời chào có thể được định nghĩa là " NHẬN /images/corner1.png HTTP / 1.1". Yêu cầu như vậy giải quyết máy chủ với yêu cầu cấp một hình ảnh nằm trong thư mục" hình ảnh"và được đặt tên là" angle1.png ". Tiêu đề HTTP rất quan trọng đối với một yêu cầu HTTP vì chúng chỉ định chi tiết của yêu cầu - phiên bản trình duyệt, khả năng của khách hàng để chấp nhận nội dung nén, khả năng lưu vào bộ nhớ đệm và các thông số quan trọng khác có thể ảnh hưởng đến việc hình thành một phản hồi. Nội dung của một yêu cầu HTTP thường chứa thông tin phải được truyền đến máy chủ. Ví dụ: nếu bạn cần tải tệp lên máy chủ, nội dung của tệp sẽ nằm trong nội dung của yêu cầu HTTP. Tuy nhiên , việc đặt dữ liệu trong phần nội dung của một yêu cầu HTTP không được phép đối với tất cả các phương thức HTTP. Ví dụ: phần nội dung của một yêu cầu HTTP luôn trống khi sử dụng phương thức GET. Do đó, một yêu cầu HTTP tiêu chuẩn có thể trông như thế này.


Trong yêu cầu HTTP ở trên, máy khách liên hệ với máy chủ " microsoft.com", yêu cầu một tài nguyên" hình ảnh / góc.png"và chỉ ra rằng nó có khả năng chấp nhận nội dung nén bằng cách sử dụng thuật toán" gzip "hoặc" deflate ", ngôn ngữ của nó là tiếng Anh và nó cho biết phiên bản trình duyệt của nó. Như đã lưu ý trước đó, số lượng và tập hợp các tiêu đề có thể thay đổi đáng kể. Khác ví dụ về yêu cầu HTTP.


Yêu cầu này khác với yêu cầu trước đó là nó sử dụng phương thức POST, phương thức này cũng tải dữ liệu lên máy chủ. Trong trường hợp này, bản thân dữ liệu được chứa trong phần nội dung của yêu cầu HTTP sau một dòng trống.

Phản hồi HTTPđược tạo bởi máy chủ web để phản hồi một yêu cầu HTTP đến. Cấu trúc của nó tương tự như một yêu cầu HTTP, nhưng nó có những điểm khác biệt nhất định. Sự khác biệt chính là ở dòng đầu tiên. Thay vì tên của tài nguyên được yêu cầu và phương thức yêu cầu, nó chỉ ra trạng thái của phản hồi. Trạng thái cho biết mức độ thành công của yêu cầu HTTP. Ví dụ: nếu một tài liệu được tìm thấy trên máy chủ và có thể được trả lại cho máy khách, thì trạng thái là " VÂNG", cho biết rằng yêu cầu đã thành công. Tuy nhiên, các ngoại lệ có thể xuất hiện - ví dụ: tài liệu bị thiếu trên máy chủ hoặc người dùng không có quyền lấy tài nguyên. Chúng tôi sẽ xem xét một tập hợp tất cả các thông báo trạng thái phản hồi HTTP có thể có ở phần sau của chương này., dòng đầu tiên của phản hồi HTTP có thể được đặt thành "HTTP / 1.1 200 OK". Tiêu đề HTTP trong phản hồi HTTP cũng là một phần tử quan trọng. Chúng đặc trưng cho nội dung được gửi đến máy khách. Đối với ví dụ, các tiêu đề HTTP này có thể chứa thông tin về loại nội dung (tài liệu HTML, hình ảnh, v.v.), độ dài nội dung (kích thước tính bằng byte), ngày sửa đổi, chế độ bộ nhớ đệm, v.v. Tất cả các tiêu đề này ảnh hưởng đến cách dữ liệu được hiển thị trên máy khách và cũng đặt các quy tắc để lưu trữ dữ liệu trong bộ đệm ẩn của máy khách. Một phản hồi HTTP điển hình có thể như sau.


Trong ví dụ này, máy chủ cho biết rằng tài nguyên đã được tìm thấy, loại của nó là tài liệu HTML và cũng cho biết kích thước và ngày sửa đổi. Theo sau dòng trống là nội dung của tài liệu HTML, tức là về cơ bản những gì khách hàng yêu cầu. Đối với yêu cầu HTTP, số lượng tiêu đề trong phản hồi HTTP có thể thay đổi theo quyết định của máy chủ web.

Khi xem xét cấu trúc của một yêu cầu HTTP, khái niệm Phương thức yêu cầu HTTP... Phương thức yêu cầu HTTP xác định cách yêu cầu HTTP được chỉ định sẽ được xử lý, tức là theo một nghĩa nào đó xác định ngữ nghĩa của nó. Vì các yêu cầu HTTP có thể có nhiều ý nghĩa khác nhau, nên việc chỉ định một phương thức là một phần quan trọng trong việc xây dựng một yêu cầu HTTP. Yêu cầu HTTP có thể có các ý nghĩa sau: yêu cầu tài nguyên từ máy chủ, tạo hoặc sửa đổi tài nguyên trên máy chủ, xóa tài nguyên trên máy chủ, v.v.

Các phương thức yêu cầu HTTP phổ biến nhất là các loại phương thức sau:

HIỂU ĐƯỢC cho phép bạn lấy thông tin từ máy chủ, phần thân yêu cầu luôn trống;
CÁI ĐẦU tương tự như GET, nhưng phần thân phản hồi luôn trống, cho phép bạn kiểm tra tính khả dụng của tài nguyên được yêu cầu và đọc các tiêu đề phản hồi HTTP;
BÀI ĐĂNG cho phép bạn tải thông tin lên máy chủ, nghĩa là thay đổi tài nguyên trên máy chủ, nhưng thường được dùng để tạo tài nguyên trên máy chủ, phần thân yêu cầu chứa tài nguyên cần thay đổi / tạo;
ĐẶT tương tự như POST, nhưng về bản chất, nó xử lý việc tạo tài nguyên và không sửa đổi nó, phần thân yêu cầu chứa tài nguyên đã tạo;
XÓA BỎ xóa tài nguyên khỏi máy chủ.

Ngoài các phương thức HTTP này, có nhiều phương thức khác được định nghĩa trong đặc tả giao thức HTTP. Tuy nhiên, mặc dù vậy, các trình duyệt thường chỉ sử dụng phương thức GET và POST. Tuy nhiên, các ứng dụng khác có thể sử dụng các phương thức HTTP khi chúng thấy phù hợp.

Như chúng ta đã thấy trước đó, phản hồi HTTP chứa mã trạng thái hoặc trả lại mã... Trạng thái này hiển thị trạng thái của phản hồi HTTP đã nhận được từ máy chủ. Cơ chế này cần thiết cho hoạt động của giao thức HTTP, vì có thể xảy ra nhiều trường hợp không chuẩn khác nhau khi xử lý một yêu cầu. Tất cả các mã trạng thái đều là số có ba chữ số. Ngoài ra, mô tả trạng thái bằng văn bản có thể được đưa vào phản hồi HTTP. Tất cả các mã trạng thái được chia thành năm nhóm.

Mỗi nhóm mã trạng thái xác định tình huống mà yêu cầu tự tìm thấy. Nhóm được xác định bằng chữ số đầu tiên của mã trạng thái. Ví dụ: mã trạng thái của nhóm 2xx cho biết sự thành công của yêu cầu HTTP. Các mã trạng thái được sử dụng phổ biến nhất được hiển thị trong bảng dưới đây.

Mã số Sự miêu tả
1xx Mã thông tin
2xx Thực hiện thành công yêu cầu
200 Yêu cầu đã được xử lý thành công
201 Đối tượng được tạo
202 Thông tin được chấp nhận
203 Thông tin không đáng tin cậy
204 Không có nội dung
205 Đặt lại nội dung
206 Nội dung một phần (ví dụ: khi "tải xuống" tệp)
3xx Chuyển hướng (cần một số hành động để hoàn thành yêu cầu)
300 Một số tùy chọn để lựa chọn
301 Tài nguyên đã được di chuyển vĩnh viễn
302 Tài nguyên đã được chuyển tạm thời
303 Xem tài nguyên khác
304 Nội dung không thay đổi
305 Sử dụng máy chủ proxy
4xx Vấn đề không phải ở máy chủ mà là do yêu cầu
400 Yêu cầu không hợp lệ
401 Không có quyền xem tài nguyên
402 Yêu cầu thanh toán
403 Truy cập bị từ chối
404 Các nguồn tài nguyên không thể được tìm thấy
405 Phương thức không hợp lệ
406 Yêu cầu không được chấp nhận
407 Đăng ký trên máy chủ proxy là bắt buộc
408 Yêu cầu đã hết thời gian chờ
409 Cuộc xung đột
410 Không còn tài nguyên
411 Chiều dài phải được chỉ định
412 Điều kiện tiên quyết không được đáp ứng
413 Mặt hàng được yêu cầu quá lớn
414 Định danh tài nguyên (URI) quá dài
415 Loại tài nguyên không được hỗ trợ
5xx Lỗi máy chủ
500 Lỗi máy chủ nội bộ
501 Chức năng không được triển khai
502 Khiếm khuyết cổng
503 Dịch vụ Không sẵn có
504 Thời gian đi qua cổng đã hết
505 Phiên bản HTTP không được hỗ trợ

Các mã trạng thái này và các mã trạng thái khác được sử dụng để truyền tải thông tin về trạng thái của một yêu cầu từ máy khách đến máy chủ.

Một tính năng đặc biệt của giao thức HTTP là thông tin được truyền dưới dạng văn bản trong giao thức này. Điều này có nghĩa là làm việc với một giao thức như vậy là khá đơn giản. Ngoài ra, ngay cả với chế độ bảo mật nghiêm ngặt, các kỹ sư bảo mật vẫn để ngỏ giao thức HTTP. Do đó, việc triển khai tương tác mạng trong khuôn khổ giao thức HTTP là một trong những lĩnh vực đầy hứa hẹn.

Tuy nhiên, bất chấp sự đơn giản của giao thức, có một vấn đề là rò rỉ thông tin được truyền. Vì thông tin được truyền dưới dạng văn bản thuần túy nên việc đánh chặn thông tin đó khá đơn giản. Trong một số tình huống, vấn đề này không phải là nghiêm trọng. Tuy nhiên, đối với các ứng dụng web làm việc với thông tin bí mật, đây là một nhược điểm khá đáng kể.

Vì lý do này, có một sự sửa đổi của giao thức này - HTTPS, I E. Giao thức HTTP có hỗ trợ mã hóa.

Như bạn đã biết, có những thuật toán mã hóa mạnh về mặt mật mã cổ điển mã hóa dữ liệu dựa trên một khóa hiện có. Cùng một khóa được sử dụng để mã hóa và giải mã dữ liệu - nếu ai đó biết khóa của thông tin được mã hóa, anh ta có thể giải mã nó. Khóa là một chuỗi các bit thông thường có độ dài nhất định. Độ dài khóa càng lớn thì thuật toán mã hóa càng khó phá vỡ. Vì vậy, để bảo vệ thông tin của bạn, bạn cần phải giữ bí mật khóa mã hóa. Tuy nhiên, làm thế nào điều này có thể được thực hiện trong giao tiếp HTTP? Rốt cuộc, nếu bạn chuyển khóa này dưới dạng văn bản rõ ràng, thì ý nghĩa của mã hóa sẽ biến mất. Trong trường hợp này, một loại mã hóa bổ sung được sử dụng - không đối xứng. Trong trường hợp này, có một cặp khóa công khai và riêng tư. Sử dụng khóa công khai, bạn chỉ có thể mã hóa thông tin và sử dụng khóa cá nhân, bạn có thể giải mã thông tin đó. Thông thường, với cách tiếp cận này, khóa cá nhân được giữ bí mật và khóa công khai là công khai. Tuy nhiên, thuật toán bất đối xứng chậm hơn thuật toán đối xứng, vì vậy nó được sử dụng để trao đổi các khóa đối xứng ban đầu. Chúng ta hãy xem xét toàn bộ thuật toán của một kết nối HTTP được mã hóa.


Khi một máy khách truy cập vào máy chủ thông qua một kênh an toàn, máy chủ sẽ lưu trữ các khóa công khai và riêng tư. Ban đầu, máy chủ gửi khóa công khai mã hóa bất đối xứng cho máy khách. Máy khách tạo ngẫu nhiên một khóa mã hóa đối xứng và mã hóa nó bằng khóa công khai nhận được từ máy chủ. Sau đó, máy khách gửi khóa đã mã hóa đến máy chủ và tại thời điểm này, máy khách và máy chủ có cùng khóa để mã hóa đối xứng. Tiếp theo là giao tiếp HTTP, được mã hóa bằng khóa đối xứng này. Khóa đối xứng vẫn là bí mật và không thể bị chặn vì khóa riêng (có thể giải mã thông điệp đầu tiên chứa khóa đối xứng) vẫn bí mật trên máy chủ. Do đó, tính bảo mật và toàn vẹn của dữ liệu được truyền qua giao thức HTTP được đảm bảo.

Bản tóm tắt ngắn gọn

Tất cả các ứng dụng web đều dựa trên giao thức HTTP. Giao thức HTTP truyền thông tin văn bản và hoạt động ở chế độ phản hồi yêu cầu. Yêu cầu HTTP và phản hồi HTTP có cấu trúc được xác định rõ ràng - dòng chào mừng, tiêu đề và nội dung thư. Số lượng tiêu đề HTTP có thể thay đổi. Một dòng trống phân tách các tiêu đề HTTP khỏi nội dung thư. Mỗi yêu cầu HTTP được gửi đến máy chủ như một phần của phương thức HTTP. Phương thức HTTP xác định ngữ nghĩa của yêu cầu (lấy tài nguyên, thêm, thay đổi, xóa, v.v.). Trong phản hồi HTTP, ngoài thông tin dịch vụ và tải trọng, trạng thái của yêu cầu được gửi, thông báo cho khách hàng về sự thành công của yêu cầu. Tất cả các mã trạng thái được chia thành các nhóm. Do dữ liệu truyền qua giao thức HTTP có thể bị chặn nên không đảm bảo tính bảo mật của thông tin được truyền. Nếu mức độ bảo mật như vậy được yêu cầu, thì bạn cần sử dụng giao thức HTTPS, giao thức này cung cấp mã hóa thông tin được truyền dựa trên sự kết hợp của các thuật toán mã hóa đối xứng và bất đối xứng.