CodeGym/Blog Java/Ngẫu nhiên/Phần 3. HTTP/HTTPS
John Squirrels
Mức độ
San Francisco

Phần 3. 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: Phần 3. HTTP/HTTPS - 1CHÀO! Hôm nay chúng ta sẽ tìm hiểu về 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 gửi dữ liệu qua mạng ở cấp độ ứng dụng của mô hình OSI. Bạn có thể nhớ lại rằng chúng ta đã biết mô hình OSI trong một trong những bài viết trước. Nếu bạn không nhớ điều đó, nó đây .

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

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

Cấu trúc của HTTP

Chúng ta nên lưu ý ngay rằng giao thức HTTP chỉ bao gồm văn bản. Điều chúng tôi quan tâm nhất là 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 — Điều này xác định một số dữ liệu vệ sinh.
  2. Tiêu đề — Những tiêu đề này mô tả các thông số của thông báo.
  3. Body — Đây là nội dung của tin nhắn. Nội dung phải được phân tách khỏi các tiêu đề bằng một dòng trống.
Giao thức HTTP được sử dụng để gửi yêu cầu đến máy chủ và nhận phản hồi từ máy chủ. Các tham số của yêu cầu và phản hồi hơi khác nhau.

Đây là giao diện của một yêu cầu HTTP đơn giản:

GET / HTTP/1.1
Host: codegym.cc
User-Agent: firefox/5.0 (Linux; Debian 5.0.8; en-US; rv:1.8.1.7)
Dòng bắt đầu chỉ ra:
  • NHẬN - Phương thức của yêu cầu
  • / — Đường dẫn của yêu cầu
  • HTTP/1.1 — Phiên bản giao thức
Sau đó đến các tiêu đề:
  • Máy chủ — Máy chủ mà yêu cầu được gửi đến
  • Tác nhân người dùng - Khách hàng gửi yêu cầu
Nội dung thư bị thiếu. Trong yêu cầu HTTP, chỉ bắt buộc 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ứ từng bước một. Một yêu cầu HTTP phải chứa một số phương thức. 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à đủ lúc đầu. NHẬN — Phương thức này yêu cầu nội dung từ máy chủ. Theo đó, các yêu cầu với phương thức GET không có nội dung thư. Nhưng nếu cần, bạn có thể truyền tham số qua đường dẫn (ở dòng bắt đầu) theo định dạng sau:
https://cdn.codegym.cc/images/article/155cea79-acfd-4968-9361-ad585e939b82/original.pngsend?name1=value1&name2=value2
trong đó codegym.cc là máy chủ, /send là đường dẫn của yêu cầu và ? là dấu phân cách cho biết rằng các tham số truy vấn tuân theo. Cuối cùng, các cặp khóa-giá trị ("key=value") được liệt kê, phân tách bằng dấu và. POST — Phương thức này xuất bản thông tin trên máy chủ. Yêu cầu POST có thể gửi nhiều loại thông tin khác nhau: tham số dưới dạng cặp "key=value", JSON, mã HTML hoặc thậm chí cả tệp. Tất cả thông tin được gửi trong phần thân 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: codegym.cc

{
  "Id": 12345,
  "User": "John"
}
Yêu cầu được gửi đến codegym.cc/user/create/json và phiên bản giao thức là HTTP/1.1. "Chấp nhận" cho biết định dạng phản hồi mà khách hàng muốn nhận. "Loại nội dung" cho biết định dạng của nội dung thư được gửi trong yêu cầu. "Content-Length" là số ký tự trong phần nội dung. Một yêu cầu HTTP có thể chứa nhiều tiêu đề khác nhau. Để biết thêm thông tin, hãy xem đặc điểm kỹ thuật của giao thức .

phản hồi HTTP

Sau khi nhận được yêu cầu, máy chủ sẽ xử lý yêu cầu đó 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 của phản hồi chứa phiên bản giao thức (HTTP/1.1), mã trạng thái (200) và mô tả trạng thái (OK). Tiêu đề của nó bao gồm loại và độ dài của nội dung. Nội dung phản hồi chứa mã HTML mà trình duyệt hiển thị dưới dạng trang HTML.

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

Mọi thứ đều rõ ràng về nội dung thư và tiêu đề, nhưng chúng ta nên nói một 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ố. Chữ số đầu tiên của mã cho biết loại 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 tiếp nhận, hiểu và xử lý.
  • 3xx — Chuyển hướng. Các hành động bổ sung 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ủ. Yêu cầu được soạn chính xác, nhưng máy chủ không thể xử lý nó.
Chữ số thứ hai và thứ ba trong mã biểu thị phản hồi cụ thể hơn. 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 hoặc phiên bản mới.
  • 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. Các yêu cầu tiếp theo đối với nó sẽ được thực hiện bằng đị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, nó có thể được truy cập bằng chuyển tiếp tự động.
  • 403 Forbidden — Yêu cầu đã được hiểu, 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 Không được triển khai — Máy chủ không hỗ trợ chức năng cần thiết để đáp ứng yêu cầu.
  • 505 Phiên bản HTTP 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. Điều này giúp làm rõ ý nghĩa của từng trạng thái cụ thể. Giao thức HTTP rất thiết thực: nó cung cấp một số lượng lớn tiêu đề mà bạn có thể sử dụng để sắp xếp giao tiếp rất linh hoạt giữa máy khách và máy chủ. Việc xem xét đầy đủ 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 sẽ là quá nhiều cho một bài viết. Nếu cần, bạn có thể đọc thông số kỹ thuật chính thức của giao thức, mô tả tất cả các sắc thái. Theo thông lệ, giao thức HTTP được sử dụng trên cổng 80, vì vậy khi bạn thấy một URL kết thúc bằng cổng 80, bạn có thể yên tâm rằng mình cần sử dụng HTTP để truy cập URL đó. Khi công nghệ phát triển và dữ liệu cá nhân bắt đầu được gửi qua Internet, cần 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 gửi đến máy chủ. Kết quả của suy nghĩ này là giao thức HTTPS.

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

Về cú pháp, HTTPS giống hệt với giao thức HTTP. Đó là, nó sử dụng các dòng bắt đầu và tiêu đề giống nhau. 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, tức là giữa lớp ứng dụng và lớp vận chuyển. Nếu bạn quên điều đó có nghĩa là gì, hãy xem bài viết về mô hình OSI . Tiêu chuẩn mã hóa ngày nay là TLS. Chúng ta sẽ không đi sâu vào chủ đề này, nhưng hãy nhớ rằng quá trình mã hóa xảy ra trước khi thông tin đến tầng vận chuyển. Trong HTTPS, tất cả thông tin đều được mã hóa hoàn toàn, ngoại trừ máy chủ và cổng nơi gửi yêu cầu. Chuyển đổi máy chủ để sử dụng giao thức HTTPS thay vì HTTP không yêu cầu sử dụng để 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ẽ thảo luận trong các bài viết tiếp theo. Và đó là tất cả cho ngày hôm nay. Trên thực tế, chờ một chút. Để thực hiện một số yêu cầu HTTP, hãy mở Google Chrome, nhấn F12 và chọn tab "Mạng". Tất cả các yêu cầu và phản hồi được gửi/nhận bởi trình duyệt của bạn sẽ được hiển thị ở đây. Phần 4. Khái niệm cơ bản về Maven Phần 5. Servlet và Java Servlet API. Viết một ứng dụng web đơn giản Phần 6. Bộ chứa Servlet Phần 7. Giới thiệu mẫu MVC (Model-View-Controller)
Bình luận
  • Phổ biến
  • Mới
Bạn phải đăng nhập để đăng nhận xet
Trang này chưa có bất kỳ bình luận nào