JavaRush /Blog Java /Random-VI /Phần 3. Giao thức HTTP/HTTPS

Phần 3. Giao thức HTTP/HTTPS

Xuất bản trong nhóm
Tài liệu này là một phần của loạt bài “Giới thiệu về Phát triển Doanh nghiệp”. Các bài viết trước: Xin chào! Hôm nay chúng ta sẽ hiểu các giao thức HTTP và HTTPS. Nhưng trước tiên, hãy làm rõ một điểm: chúng ta đang nói về các giao thức truyền dữ liệu qua mạng ở lớp ứng dụng của mô hình OSI. Như bạn còn nhớ, chúng ta đã thảo luận về mô hình OSI ở một trong những bài viết trước. Và nếu bạn không nhớ thì đây . Phần 3. Giao thức HTTP/HTTPS - 1

Giao thức truyền dữ liệu là gì

Đây là tên được đặt cho thỏa thuận được chấp nhận chung, nhờ đó các nhà phát triển dịch vụ khác nhau gửi thông tin dưới một hình thức duy nhất. Ví dụ: sử dụng Google Chrome, bạn có thể lấy thông tin từ cả Facebook và Twitter, vì các nhà phát triển truyền tải thông tin đó bằng giao thức HTTP tiêu chuẩn và trình duyệt của bạn có thể xử lý thông tin đó. Các quy tắc thống nhất cũng rất thuận tiện cho chính các nhà phát triển phía máy chủ: có nhiều thư viện có thể chuyển đổi thông tin cho bạn và gửi nó bằng giao thức được yêu cầu. HTTP ban đầu được hình thành như một giao thức để chuyển các trang HTML. Điều này đã xảy ra từ lâu nhưng hiện nay các lập trình viên thường chuyển cả chuỗi và tệp phương tiện qua nó. Nhìn chung, giao thức này rất linh hoạt và thực sự dễ sử dụng. Bây giờ chúng ta hãy tìm hiểu làm thế nào để làm điều này.

Cấu trúc HTTP

Điều đáng chú ý ngay là giao thức HTTP chỉ bao gồm văn bản. Chà, chúng tôi quan tâm nhất đến cấu trúc của văn bản này. Mỗi tin nhắn bao gồm ba phần:
  1. Dòng bắt đầu—xác định dữ liệu dịch vụ.
  2. Tiêu đề - mô tả các thông số tin nhắn.
  3. Nội dung tin nhắn (Body) - dữ liệu tin nhắn. Phải cách nhau khỏi tiêu đề bằng một dòng trống.
Sử dụng giao thức HTTP, bạn có thể gửi yêu cầu đến máy chủ (request) và nhận phản hồi từ máy chủ (response). Yêu cầu và phản hồi có các tham số hơi khác nhau.

Một yêu cầu HTTP đơn giản trông như thế nào

GET / HTTP/1.1
Host: javarush.com
User-Agent: firefox/5.0 (Linux; Debian 5.0.8; en-US; rv:1.8.1.7)
Dòng bắt đầu có:
  • NHẬN - phương thức yêu cầu;
  • / - đường dẫn yêu cầu (đường dẫn);
  • HTTP/1.1 - phiên bản của giao thức truyền dữ liệu.
Sau đó làm theo các tiêu đề:
  • Máy chủ - máy chủ mà yêu cầu được gửi tới;
  • Tác nhân người dùng là ứng dụng khách gửi yêu cầu.
Không có nội dung thư. Trong yêu cầu HTTP, chỉ cần có dòng bắt đầu và tiêu đề Máy chủ. Bây giờ chúng ta hãy xem xét mọi thứ theo thứ tự. Một yêu cầu HTTP phải chứa một số phương thức. Tổng cộng có chín trong số chúng: GET, POST, PUT, OPTIONS, HEAD, PATCH, DELETE, TRACE, CONNECT. Phổ biến nhất là GET và POST. Hai phương pháp này sẽ đủ lúc đầu. NHẬN - yêu cầu nội dung từ máy chủ. Do đó, các yêu cầu bằng phương thức GET không có nội dung thư. Nhưng nếu cần, bạn có thể gửi tham số qua đường dẫn ở định dạng này: https://cdn.javarush.com/images/article/155cea79-acfd-4968-9361-ad585e939b82/origen.pngsend?name1=value1&name2=value2 Tại đây: javarush .com — máy chủ, /gửi — đường dẫn yêu cầu, ? — một dấu phân cách cho biết các tham số yêu cầu tuân theo. Cuối cùng, các tham số được liệt kê ở định dạng khóa=giá trị, được phân tách bằng dấu và. POST - xuất bản thông tin trên máy chủ. Yêu cầu POST có thể chuyển nhiều thông tin khác nhau: tham số ở định dạng khóa=giá trị, JSON, mã HTML hoặc thậm chí cả tệp. Tất cả thông tin được truyền đi trong nội dung của tin nhắn. Ví dụ:
POST /user/create/json HTTP/1.1
Accept: application/json
Content-Type: application/json
Content-Length: 28
Host: javarush.com

{
  "Id": 12345,
  "User": "John"
}
Yêu cầu được gửi đến javarush.com/user/create/json, phiên bản giao thức là HTTP/1.1. Chấp nhận chỉ định định dạng phản hồi mà khách hàng mong muốn nhận được, Content-Type chỉ định định dạng nội dung thư được gửi. Độ dài nội dung - số lượng ký tự trong nội dung. Một yêu cầu HTTP có thể chứa nhiều tiêu đề khác nhau. Thông tin chi tiết có thể được tìm thấy trong đặc tả giao thức .

Phản hồi HTTP

Sau khi nhận được yêu cầu, máy chủ sẽ xử lý nó và gửi phản hồi cho máy khách:
HTTP/1.1 200 OK
Content-Type: text/html; charset=UTF-8
Content-Length: 98

<html>
  <head>
    <title>An Example Page</title>
  </head>
  <body>
    <p>Hello World</p>
  </body>
</html>
Dòng bắt đầu trong phản hồi chứa phiên bản giao thức (HTTP/1.1), Mã trạng thái (200), Mô tả trạng thái (OK). Tiêu đề cho biết loại và độ dài của nội dung. Phần thân của phản hồi chứa mã HTML mà trình duyệt sẽ đưa vào trang HTML.

Mã trạng thái phản hồi

Mọi thứ đều rõ ràng với nội dung và tiêu đề thư, nhưng cần nói vài lời về mã trạng thái. Mã trạng thái phản hồi luôn có ba chữ số và chữ số đầu tiên của mã cho biết danh mục phản hồi:
  • 1xx - thông tin. Yêu cầu đã được nhận, máy chủ sẵn sàng tiếp tục;
  • 2xx - thành công. Yêu cầu đã được nhận, hiểu và xử lý;
  • 3xx - chuyển hướng. Các bước sau đây phải được thực hiện để xử lý yêu cầu;
  • 4xx - lỗi máy khách. Yêu cầu có lỗi hoặc không tuân thủ giao thức;
  • 5xx - lỗi máy chủ. Máy chủ không thể xử lý yêu cầu, mặc dù nó được soạn chính xác;
Chữ số thứ hai và thứ ba trong mã nêu chi tiết câu trả lời. Ví dụ:
  • 200 OK — yêu cầu đã được nhận và xử lý thành công;
  • 201 Đã tạo - yêu cầu đã được nhận và xử lý thành công, dẫn đến việc tạo một tài nguyên mới hoặc phiên bản của nó;
  • 301 Đã di chuyển vĩnh viễn - tài nguyên được yêu cầu đã được di chuyển vĩnh viễn và các yêu cầu tiếp theo đối với tài nguyên đó phải xảy ra tại địa chỉ mới;
  • 307 Chuyển hướng tạm thời - tài nguyên đã được di chuyển tạm thời. Hiện tại, bạn có thể truy cập nó bằng cách sử dụng tính năng chuyển hướng tự động;
  • 403 Bị cấm - yêu cầu rõ ràng, nhưng cần có sự cho phép;
  • 404 Not Found - máy chủ không tìm thấy tài nguyên tại địa chỉ này;
  • 501 Chưa được triển khai - máy chủ không hỗ trợ chức năng đáp ứng yêu cầu này;
  • Phiên bản HTTP 505 không được hỗ trợ - máy chủ không hỗ trợ phiên bản được chỉ định của giao thức HTTP.
Ngoài mã trạng thái phản hồi, một mô tả trạng thái cũng được gửi, giúp bạn hiểu ý nghĩa của một trạng thái cụ thể một cách trực quan. Giao thức HTTP rất thiết thực: nó cung cấp một số lượng lớn các tiêu đề, nhờ đó bạn có thể thiết lập giao tiếp linh hoạt giữa máy khách và máy chủ. Tất cả các tiêu đề yêu cầu và phản hồi, phương thức yêu cầu và mã trạng thái phản hồi không thể được xem xét trong một bài viết. Nếu cần, bạn có thể đọc đặc tả giao thức chính thức , mô tả tất cả các sắc thái. Giao thức HTTP thường được sử dụng trên cổng 80, vì vậy khi bạn thấy một địa chỉ kết thúc trên cổng 80, bạn có thể chắc chắn rằng địa chỉ đó phải được truy cập qua HTTP. Với sự phát triển của công nghệ và sự chuyển động tích cực của dữ liệu cá nhân trên Internet, chúng tôi đã phải suy nghĩ về cách cung cấp sự bảo vệ bổ sung cho thông tin mà khách hàng truyền đến máy chủ. Kết quả là giao thức HTTPS.

Sự khác biệt giữa HTTPS và HTTP là gì

HTTPS giống hệt về mặt cú pháp với giao thức HTTP, nghĩa là nó sử dụng cùng dòng bắt đầu và tiêu đề. Sự khác biệt duy nhất là mã hóa bổ sung và cổng mặc định (443) . HTTPS được mã hóa giữa HTTP và TCP, nghĩa là giữa lớp ứng dụng và lớp vận chuyển. Nếu bạn quên nó là gì thì hãy xem lại bài viết về mô hình OSI . Tiêu chuẩn mã hóa hiện đại là TLS. Chúng ta sẽ không đi sâu vào chủ đề này nhưng hãy nhớ rằng mã hóa xảy ra trước khi thông tin đến lớp vận chuyển . HTTPS mã hóa hoàn toàn tất cả thông tin ngoại trừ máy chủ và cổng mà yêu cầu được gửi tới. Để chuyển máy chủ sang sử dụng giao thức HTTPS thay vì HTTP, chúng ta không cần thay đổi mã máy chủ. Tính năng này được kích hoạt trong các thùng chứa servlet mà chúng ta sẽ nói đến trong các bài viết sau. Đó là tất cả cho ngày hôm nay. Nhưng đợi một chút. Để nhận biết các yêu cầu HTTP, hãy mở Google Chrome, nhấn F12, chọn tab Mạng. Tất cả các yêu cầu và phản hồi được trình duyệt của bạn gửi/nhận sẽ được hiển thị tại đây. Phần 4. Thông tin cơ bản về Maven Phần 5. Servlets. Viết một ứng dụng web đơn giản Phần 6. Thùng chứa Servlet Phần 7. Giới thiệu mẫu MVC (Model-View-Controller) Phần 8. Viết một ứng dụng spring-boot nhỏ
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION