Sự khác biệt giữa PUT, POST và PATCH là gì? Sự khác biệt giữa YÊU CẦU HTTP POST và PUT là gì? Nhận bài đặt yêu cầu xóa.

7 câu trả lời

TIN NHẮN

HTTP.POST có thể được sử dụng khi máy khách gửi dữ liệu đến máy chủ và máy chủ xác định URI cho tài nguyên mới được tạo. Phương thức POST được sử dụng để yêu cầu máy chủ gốc chấp nhận đối tượng có trong yêu cầu dưới dạng tài nguyên nô lệ mới, được xác định bởi URI yêu cầu trong chuỗi yêu cầu.

ĐẶT

HTTP.PUT có thể được sử dụng khi máy khách gửi dữ liệu đến máy chủ và máy khách xác định URI cho tài nguyên mới được tạo. Phương thức PUT yêu cầu đối tượng đính kèm được lưu trữ theo URI yêu cầu được cung cấp. Nếu URI yêu cầu tham chiếu đến tài nguyên đã tồn tại thì đối tượng đính kèm NÊN được coi là phiên bản sửa đổi được tìm thấy trên máy chủ gốc. Nếu URI yêu cầu không trỏ đến tài nguyên hiện có và URI đó có thể được tác nhân người dùng yêu cầu xác định là tài nguyên mới thì máy chủ gốc có thể tạo tài nguyên với URI đó.

HTTP.PATCH có thể được sử dụng khi máy khách gửi một hoặc nhiều thay đổi sẽ được máy chủ áp dụng. Phương thức PATCH yêu cầu áp dụng tập hợp các thay đổi được mô tả trong đối tượng yêu cầu cho tài nguyên được xác định bởi URI yêu cầu. Một tập hợp các thay đổi được trình bày ở định dạng gọi là tài liệu vá lỗi.

Để biết thêm thông tin, vui lòng tham khảo URL bên dưới

Sự khác biệt giữa PUT, POST, GET, DELETE và PATCH IN HTTP Verbs:

Các động từ HTTP được sử dụng phổ biến nhất POST, GET, PUT, DELETE tương tự như các thao tác CRUD (Tạo, Đọc, Cập nhật và Xóa) trong cơ sở dữ liệu. Chúng tôi chỉ định các động từ HTTP này trong trường hợp thủ đô. Vì vậy, dưới đây là sự so sánh giữa hai.

  1. tạo - ĐĂNG
  2. đọc - NHẬN
  3. cập nhật - PUT
  4. xóa - XÓA

VÁ: Cung cấp sửa đổi một phần của tài nguyên. Nếu bạn chỉ cần cập nhật một trường cho tài nguyên, bạn có thể sử dụng phương thức PATCH.

Ghi chú:
Vì POST, PUT, DELETE thay đổi nội dung nên công cụ kiểm tra URL bên dưới chỉ bắt chước các bản cập nhật. Nó không thực sự xóa hoặc thay đổi. Chúng ta có thể chỉ cần nhìn vào mã trạng thái để kiểm tra xem việc chèn, cập nhật, xóa có xảy ra hay không.

1) LẤY:

GET là cách đơn giản nhất để thực hiện yêu cầu HTTP; cái mà trình duyệt sử dụng bất cứ khi nào bạn nhấp vào một liên kết hoặc nhập URL vào thanh địa chỉ. Nó hướng dẫn máy chủ chuyển dữ liệu được xác định bởi URL tới máy khách. Dữ liệu không được sửa đổi ở phía máy chủ do yêu cầu GET. Theo nghĩa này, yêu cầu GET là chỉ đọc.

Trả lời: bạn sẽ nhận được phản hồi như:

"userId": 1, "id": 1, "title": "sunt aut...", "body": "quia et suscipit..."

Trong đường dẫn "vui vẻ" (hoặc không có lỗi), GET trả về biểu diễn XML hoặc JSON và mã phản hồi HTTP là 200 (OK). Trong trường hợp có lỗi, nó thường trả về 404 (KHÔNG TÌM THẤY) hoặc 400 (YÊU CẦU BẤT CỨ).

2) BÀI ĐĂNG:

Động từ POST chủ yếu được sử dụng cho sự sáng tạo nguồn tài nguyên mới. Đặc biệt, nó được sử dụng để tạo ra tài nguyên nô lệ. Nghĩa là, nó phụ thuộc vào tài nguyên khác (ví dụ: nguồn gốc).

Khi tạo thành công, hãy trả về trạng thái HTTP 201 bằng cách trả về tiêu đề Vị trí có liên kết đến tài nguyên mới được tạo có trạng thái HTTP 201.

Xác thực bằng Fiddler hoặc PostMan: chúng ta có thể sử dụng fiddler để kiểm tra câu trả lời. Mở tập lệnh và chọn tab Soạn. Cung cấp động từ và URL như hiển thị bên dưới và nhấp vào "Chạy" để kiểm tra câu trả lời.

Nội dung yêu cầu:

dữ liệu: (tiêu đề: "foo", nội dung: "bar", userId: 1000, Id: 1000)

Trả lời. Bạn sẽ nhận được mã phản hồi là 201.

Nếu chúng ta muốn kiểm tra bản ghi đã chèn có Id = 1000, hãy thay đổi động từ Get và sử dụng cùng một url rồi nhấp vào Thực thi.

Như đã nói trước đó, URL trên ở dạng chỉ đọc (GET), chúng tôi không thể đọc dữ liệu cập nhật theo thời gian thực.

PUT thường được sử dụng nhất cho các khả năng cập nhật, PUT vào một URI tài nguyên đã biết với phần thân yêu cầu chứa bản trình bày được cập nhật của tài nguyên gốc.

Xác thực bằng Fiddler hoặc PostMan: chúng ta có thể sử dụng fiddler để kiểm tra câu trả lời. Mở tập lệnh và chọn tab Soạn. Cung cấp động từ và URL như hiển thị bên dưới và nhấp vào "Chạy" để kiểm tra câu trả lời.

Nội dung yêu cầu:

dữ liệu: (tiêu đề: "foo", nội dung: "bar", userId: 1, Id: 1)

Trả lời. Nếu cập nhật thành công, nó sẽ trả về 200 (hoặc 204 nếu nó không trả về bất kỳ nội dung nào trong nội dung) từ PUT.

4) XÓA:

DELETE khá dễ hiểu. Nó dùng để gỡ bỏ tài nguyên được xác định bởi một URI.

Khi xóa thành công, hãy trả về trạng thái HTTP 200 (OK) cùng với nội dung phản hồi, có thể là biểu thị của phần tử đã xóa (thường yêu cầu quá nhiều băng thông) hoặc phản hồi được bao bọc (xem "Giá trị trả về" bên dưới). Hoặc là vậy hoặc trả về trạng thái HTTP 204 (KHÔNG CÓ NỘI DUNG) mà không có nội dung phản hồi. Nói cách khác, phản hồi được đề xuất là trạng thái 204 không có nội dung hoặc phản hồi JSEND và trạng thái HTTP 200.

Xác thực bằng Fiddler hoặc PostMan: chúng ta có thể sử dụng fiddler để kiểm tra câu trả lời. Mở tập lệnh và chọn tab Soạn. Cung cấp động từ và URL như hiển thị bên dưới và nhấp vào "Chạy" để kiểm tra câu trả lời.

Động từ: XÓA BỎ

Trả lời. Nếu xóa thành công, nó sẽ trả về trạng thái HTTP 200 (OK) cùng với nội dung phản hồi.

Ví dụ giữa PUT và PATCH

ĐẶT

Nếu tôi phải đổi tên, hãy gửi yêu cầu PUT để cập nhật:

("first": "Nazmul", "last": "hasan") Vì vậy, ở đây, để cập nhật tên, chúng ta cần gửi lại tất cả các tham số dữ liệu.

Yêu cầu vá lỗi cho biết rằng chúng tôi sẽ chỉ gửi dữ liệu mà chúng tôi cần thay đổi mà không thay đổi hoặc ảnh hưởng đến các phần khác của dữ liệu. Ví dụ: Nếu chúng tôi chỉ cần cập nhật tên, chúng tôi chỉ chuyển tên.

Để biết thêm thông tin, hãy xem các liên kết dưới đây:

PUT = thay thế TÀI NGUYÊN ĐẦY ĐỦ bằng chế độ xem mới

PATCH = thay thế các phần của tài nguyên ban đầu bằng các giá trị được cung cấp bởi AND | HOẶC các phần khác của tài nguyên được cập nhật mà bạn đã cung cấp (dấu thời gian) VÀ | HOẶC cập nhật hiệu ứng tài nguyên với các tài nguyên khác (quan hệ)

GET/PUT - một bản vá bình thường đôi khi có thể bình thường

Trở nên bình thường có nghĩa là nếu chúng ta chạy một truy vấn nhiều lần thì nó sẽ không ảnh hưởng đến kết quả của nó (kết quả tương tự. Giả sử một con bò đang mang thai và nếu chúng ta nhân giống nó lần nữa thì nó không thể mang thai nhiều lần).

lấy: -

chỉ cần lấy nó. Nhận dữ liệu từ máy chủ và hiển thị cho người dùng

bưu kiện: -

tạo một tài nguyên mới trong cơ sở dữ liệu. Điều này có nghĩa là nó đang thêm dữ liệu mới. Nó không phải là bình thường.

đặt: -

Tạo một tài nguyên mới, nếu không thì thêm vào tài nguyên hiện có. Idempotent vì nó sẽ cập nhật cùng một tài nguyên mọi lúc và kết quả sẽ giống nhau. bán tại.- dữ liệu ban đầu

( id:1 tên:parth email: [email được bảo vệ] }

( id: 1 email: [email được bảo vệ] }

vì vậy bây giờ bản vá đã đến, yêu cầu PATCH đôi khi có thể không có giá trị

Id:1 tên:parth email: [email được bảo vệ] }

Tên bản vá: W

( id:1 tên:w email: [email được bảo vệ]) Phương thức HTTP NHẬN có POST không PUT có VÁ không* TÙY CHỌN có ĐẦU có XÓA có

Định nghĩa dưới đây được lấy từ một ví dụ thực tế.

Đánh giá mẫu
Với mỗi thông tin khách hàng, chúng tôi lưu trữ một ID để tìm ra dữ liệu khách hàng đó và chúng tôi sẽ gửi ID này cho khách hàng để tham khảo.

  1. TIN NHẮN

    • Nếu Client gửi dữ liệu không có ID bằng phương thức POST, chúng tôi sẽ lưu dữ liệu đó và gán ID mới.
    • Nếu Khách hàng gửi lại những thông tin đó hoặc dữ liệu không có ID bằng phương thức POST, chúng tôi lưu nó và gán ID mới.
    • Ghi chú: được phép sao chép ở đây
  2. ĐẶT

    • Nếu Khách hàng gửi dữ liệu có ID, chúng tôi sẽ kiểm tra xem ID đó có tồn tại hay không. Nếu ID tồn tại, chúng tôi sẽ cập nhật dữ liệu, nếu không, chúng tôi sẽ tạo dữ liệu và gán ID mới.
    • Nếu Khách hàng gửi dữ liệu có ID, chúng tôi sẽ kiểm tra xem ID đó có tồn tại hay không. Nếu ID tồn tại, chúng tôi sẽ cập nhật dữ liệu, nếu không chúng tôi sẽ đưa ra một ngoại lệ.

Ghi chú. Trong phương pháp Đặt chúng tôi không đưa ra ngoại lệ nếu không tìm thấy id. Nhưng trong phương pháp chúng tôi đưa ra một ngoại lệ nếu không tìm thấy id.

Hãy cho tôi biết nếu bạn có bất kỳ câu hỏi nào về những điều trên.

Đây là sự khác biệt giữa các phương thức POST, PUT và PATCH của giao thức HTTP.

BƯU KIỆN

Phương thức HTTP.POST luôn tạo tài nguyên mới trên máy chủ. Truy vấn không bình thường của nó, tức là Nếu người dùng truy cập cùng một yêu cầu 2 lần, nó sẽ tạo một tài nguyên mới nếu không có hạn chế.

Phương thức http post giống như truy vấn INSERT trong SQL, luôn tạo một bản ghi mới trong cơ sở dữ liệu.

Ví dụ. Sử dụng phương thức POST để lưu người dùng, đơn hàng mới, v.v. khi phần phụ trợ phân giải ID tài nguyên cho tài nguyên mới.

ĐẶT

Trong phương thức HTTP.PUT, tài nguyên trước tiên được xác định từ URL và nếu nó tồn tại thì nó sẽ được cập nhật, nếu không thì tài nguyên mới sẽ được tạo. Khi tài nguyên đích tồn tại, nó sẽ ghi đè tài nguyên đó bằng một nội dung hoàn toàn mới. Phương thức HTTP.PUT này được sử dụng để TẠO hoặc CẬP NHẬT tài nguyên.

Phương thức http put giống như một truy vấn MERGE trong SQL, nó chèn hoặc cập nhật một bản ghi tùy thuộc vào việc bản ghi đó có tồn tại hay không.

Yêu cầu PUT là bình thường, tức là nhấn cùng một truy vấn hai lần sẽ cập nhật bản ghi hiện có (không có bản ghi mới nào được tạo). Trong phương thức PUT, ID tài nguyên được khách hàng xác định và được chỉ định trong URL yêu cầu.

Ví dụ. Sử dụng phương pháp PUT để cập nhật người dùng hoặc đơn hàng hiện có.

Phương thức HTTP.PATCH được sử dụng để sửa đổi một phần bản cập nhật tài nguyên, nghĩa là bản cập nhật delta.

Phương thức vá http giống như một truy vấn CẬP NHẬT trong SQL, chỉ thiết lập hoặc cập nhật các cột đã chọn chứ không phải toàn bộ hàng.

Ví dụ. Bạn có thể sử dụng phương pháp PATCH để cập nhật trạng thái đơn hàng.

PATCH/api/người dùng/40450236/đặt hàng/10234557

Theo như tôi hiểu tất cả những điều này, nếu bạn so sánh các thao tác PUT và POST trong MySQL, thì POST là INSERT và PUT là UPDATE hoặc INSERT

Hãy xem ví dụ về một diễn đàn. Nó có chủ đề và tin nhắn. Chúng tôi đưa ra yêu cầu trong chủ đề xin chào

POST /topic/hello?message = Ở đây POST /topic/hello?message = was POST /topic/hello?message = Vasya

Truy vấn đầu tiên sẽ tạo ( CHÈN) xin chào chủ đề với thông báo "Ở đây", 2 yêu cầu còn lại cũng sẽ tạo ( CHÈN) tin nhắn mới trong chủ đề. Kết quả là chúng ta nhận được chủ đề xin chào có nội dung: Vasya đã ở đây.

PUT /topic/hello?message = Ở đây PUT /topic/hello?message = đã PUT /topic/hello?message = Vasya

Truy vấn đầu tiên sẽ tạo ( CHÈN) xin chào topic với tin nhắn "Ở đây", 2 request còn lại sẽ cập nhật ( CẬP NHẬT) tin nhắn trong chủ đề. Kết quả là chúng ta nhận được chủ đề xin chào có chứa: Vasya.

sự bình thường ĐẶTở đây nó thể hiện ở chỗ số lượng tin nhắn trong cơ sở dữ liệu trong các hoạt động tiếp theo vẫn không thay đổi. Về liên kết, sơ đồ trang web sẽ không thay đổi. Chỉ nội dung của các chủ đề sẽ được cập nhật.

hoặc: mọi yêu cầu POST/bài viết/xin chào sẽ được tạo nên chương mới trong bài viết xin chào. Yêu cầu đầu tiên sẽ tự tạo ra bài viết.

mọi yêu cầu PUT /article/hello sẽ cập nhật Chương DUY NHẤT trong bài viết xin chào. Yêu cầu đầu tiên sẽ tự tạo ra bài viết.

Đây là những gì GET sẽ trả về cho chúng ta nếu chúng ta thực hiện POST

NHẬN /topic/xin chào 201 Vasya đã ở đây

Trong trường hợp này, chúng tôi cũng sẽ có sẵn các URI này

NHẬN /topic/hello/1 201 Ở đây NHẬN /topic/hello/2 201 là GET /topic/hello/3 201 Vasya

Đây là những gì GET sẽ trả về cho chúng ta nếu chúng ta thực hiện PUT

NHẬN /chủ đề/xin chào 201 Vasya

Trong trường hợp này, chúng tôi sẽ chỉ có sẵn một URI

NHẬN /topic/hello/1 201 Vasya GET /topic/hello/2 404 GET /topic/hello/3 404

VÍ DỤ #2 Ví dụ với người dùng.

POST /user/eugen?age=7 POST /user/eugen?age=10 POST /user/eugen?age=5

Sẽ tạo 3 người dùng với tên eugen và age 7, 10, 5 tương ứng.

PUT /user/eugen?age=7 PUT /user/eugen?age=10 PUT /user/eugen?age=5

Chỉ có một người dùng sẽ được tạo tên là eugen với 5 tuổi

Nói cách khác: PUT bắt buộc phải cập nhật ghi lại nếu dữ liệu đã tồn tại

Do đó, ví dụ của bạn String userId = this.request["USER_ID"]; lưu trữ giá trị trong một biến. Cho dù bạn có nằm xuống bao nhiêu lần ( ĐẶT) thành một biến - sẽ luôn có một biến.

Sinh ra từ đây VÍ DỤ #3

Tôi không biết sự tương tự này đúng đến mức nào, nhưng tôi nghĩ câu nói này sẽ đúng:

POST: đẩy biến $, giá trị; -- tạo ra một mảng các giá trị PUT: $variable = value; -- cuối cùng là một giá trị

trong trường hợp POST, tác hại có thể xảy ra là bộ nhớ của máy chủ sẽ đầy. Trong trường hợp PUT, không có hại gì, chỉ có bọ ve bị loại bỏ ;-)

Nhân tiện, tôi đã tìm thấy một nguồn tài nguyên tốt về bảo mật và tính bình thường

612

ĐẶT HTTP:

PUT đặt một tệp hoặc tài nguyên tại một URI cụ thể và nó nằm tại URI đó. Nếu đã có tệp hoặc tài nguyên trong URI này, PUT sẽ thay thế tệp hoặc tài nguyên đó. Nếu không có tệp hoặc tài nguyên ở đó, PUT sẽ tạo một tệp hoặc tài nguyên. PUT là bình thường, nhưng nghịch lý thay, các phản hồi PUT không thể lưu vào bộ nhớ đệm.

BÀI ĐĂNG HTTP:

POST gửi dữ liệu đến một URI cụ thể và đợi tài nguyên tại URI đó xử lý yêu cầu. Máy chủ web tại thời điểm này có thể xác định phải làm gì với dữ liệu trong bối cảnh tài nguyên được chỉ định. Phương thức POST không bình thường nhưng phản hồi POST thì có : được lưu vào bộ đệm nếu máy chủ đặt tiêu đề Kiểm soát bộ đệm và Hết hạn thích hợp.

HTTP RFC chính thức định nghĩa POST là:

  • Tóm tắt các tài nguyên hiện có;
  • Đăng tin nhắn lên bảng thông báo, nhóm tin tức, danh sách gửi thư hoặc nhóm bài viết tương tự;
  • Cung cấp một khối dữ liệu, chẳng hạn như kết quả của việc gửi biểu mẫu, cho quá trình xử lý dữ liệu;
  • Mở rộng cơ sở dữ liệu bằng thao tác chắp thêm.

Sự khác biệt giữa POST và PUT:

Bản thân RFC giải thích sự khác biệt của kernel:

Sự khác biệt cơ bản giữa các yêu cầu POST và PUT được phản ánh ở giá trị URI yêu cầu khác nhau. URI trong yêu cầu POST xác định tài nguyên sẽ xử lý đối tượng kèm theo. Tài nguyên này có thể là quá trình nhận dữ liệu, một cổng vào giao thức khác hoặc một thực thể riêng biệt nhận chú thích. Ngược lại, URI trong yêu cầu PUT xác định thực thể có trong yêu cầu - tác nhân người dùng biết rằng URI được dự định và máy chủ KHÔNG NÊN cố gắng áp dụng yêu cầu cho một số tài nguyên khác. Nếu máy chủ muốn yêu cầu được áp dụng cho một URI khác, nó PHẢI gửi phản hồi 301 (đã di chuyển liên tục); Sau đó, tác nhân người dùng CÓ THỂ tự đưa ra quyết định về việc có nên chuyển hướng yêu cầu hay không.

Sử dụng đúng phương pháp, không liên quan sang một bên:

Gần đây tôi khá khó chịu vì quan niệm sai lầm phổ biến của các nhà phát triển web rằng POST được sử dụng để tạo tài nguyên và PUT được sử dụng để cập nhật/thay đổi.

Nếu bạn xem trang 55 của RFC 2616 ("Giao thức truyền siêu văn bản - HTTP/1.1"), Phần 9.6 ("PUT"), bạn sẽ thấy PUT thực sự dành cho:

Phương thức PUT yêu cầu một đối tượng riêng tư được lưu trữ trong URI yêu cầu được yêu cầu.

Ngoài ra còn có một điểm hữu ích để giải thích sự khác biệt giữa POST và PUT:

Sự khác biệt cơ bản giữa các yêu cầu POST và PUT được phản ánh ở giá trị URI yêu cầu khác nhau. URI trong yêu cầu POST xác định tài nguyên sẽ xử lý đối tượng kèm theo. Tài nguyên này có thể là một quy trình chấp nhận dữ liệu, một cổng vào giao thức khác hoặc một thực thể riêng biệt chấp nhận chú thích. Ngược lại, URI trong yêu cầu PUT xác định thực thể được bao quanh bởi yêu cầu - tác nhân người dùng biết URI là gì và máy chủ KHÔNG NÊN cố gắng áp dụng yêu cầu cho tài nguyên khác.

Nó không nói bất cứ điều gì về sự khác biệt cập nhật/tạo, bởi vì đó không phải là nội dung của nó. Đó là về sự khác biệt giữa điều này:

Obj.set_attribute(value) # Một yêu cầu POST.

Obj.attribute = value # Một yêu cầu PUT.

Vì vậy, hãy ngừng lan truyền quan niệm sai lầm phổ biến này. Đọc RFC của bạn.

9

Nó có vẻ vô dụng theo cách thô lỗ và ít hữu ích hơn. Trong ví dụ PUT mà bạn trích dẫn, đối tượng mới trong api RESTful là mục nhập "mới" và có sẵn tại vị trí đó. Không nghi ngờ gì liệu việc cho phép các kiểu con như thế này có phải là một lựa chọn thiết kế tốt hay không (tôi nghĩ nó không lý tưởng), nhưng ngay cả khi bạn sử dụng một kiểu con để tấn công những thông tin hữu ích hơn. Trong hầu hết các trường hợp, phần mô tả thường được coi là một tuyên bố xuất sắc về nội dung của RFC, được tóm tắt và là một tuyên bố về thông lệ và thông lệ. Ngoài ra, việc lịch sự sẽ không làm tổn thương bạn. - người sử dụng công cụ 06 tháng 4 15 2015-04-06 23:49:56

60

1) GET: - Được sử dụng khi client yêu cầu tài nguyên từ web server.

2) HEAD: - Được sử dụng khi client yêu cầu một số thông tin về một tài nguyên nhưng không yêu cầu chính tài nguyên đó.

3) POST: - Được sử dụng khi máy khách gửi thông tin hoặc dữ liệu đến máy chủ, chẳng hạn như bằng cách điền vào biểu mẫu trực tuyến (tức là gửi một lượng lớn dữ liệu phức tạp đến máy chủ web).

4) PUT: - Được sử dụng khi client gửi tài liệu thay thế hoặc tải tài liệu mới lên máy chủ web theo URL yêu cầu.

5) DELETE: - Được sử dụng khi máy khách cố gắng xóa một tài liệu khỏi máy chủ web được xác định bởi URL yêu cầu.

6) TRACE: - Được sử dụng khi khách hàng yêu cầu các proxy có sẵn hoặc máy chủ trung gian sửa đổi yêu cầu quảng cáo chính nó.

7) OPTIONS: - Được sử dụng khi client muốn xác định các phương thức có sẵn khác để truy xuất hoặc xử lý tài liệu trên máy chủ web.

8) KẾT NỐI: - Được sử dụng khi máy khách muốn thiết lập kết nối trong suốt với máy chủ từ xa, thường là để cung cấp giao tiếp được mã hóa SSL (HTTPS) thông qua proxy HTTP.

15

  • DELETE: Xóa dữ liệu khỏi máy chủ.
  • TRACE: Cung cấp cách kiểm tra máy chủ nào đang nhận. Nó chỉ đơn giản trả về những gì đã được gửi.
  • TÙY CHỌN: Cho phép khách hàng lấy thông tin về các phương thức yêu cầu được dịch vụ hỗ trợ. Tiêu đề phản hồi tương ứng là "Cho phép" với các phương thức được hỗ trợ. Cũng được sử dụng trong CORS như một yêu cầu trước chuyến bay để thông báo cho máy chủ về phương thức yêu cầu thực tế và hỏi về các tiêu đề tùy chỉnh.
  • HEAD: Chỉ trả về tiêu đề phản hồi.
  • KẾT NỐI: Được trình duyệt sử dụng khi biết nó đang giao tiếp với proxy và URI cuối cùng bắt đầu bằng https://. Mục đích của CONNECT là cho phép phiên TLS được mã hóa hai đầu để proxy không thể đọc được dữ liệu.
  • HTTP (tiếng Anh: HyperText Transfer Protocol) là 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 ở định dạng HTML). Cơ sở của HTTP là công nghệ máy khách-máy chủ, nghĩa là nó giả định sự tồn tại của người tiêu dùng (máy khách) khởi tạo 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 thao tác cần thiết. hành động và trả lại một tin nhắn với kết quả. HTTP hiện được sử dụng rộng rãi trên World Wide Web để lấy thông tin từ các trang web.

    HTTP cũng được sử dụng làm “phương tiện truyền tải” cho các giao thức cấp ứng dụng khác, chẳng hạn như SOAP, XML-RPC, WebDAV.

    Đối tượng thao tác chính trong HTTP là tài nguyên được trỏ đến bởi URI (Uniform Resource Identifier) ​​​​trong yêu cầu của 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 thứ 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 phương thức biểu diễn cùng một tài nguyên theo các tham số khác nhau: định dạng, mã hóa, ngôn ngữ, v.v. (Đặc biệt, tiêu đề HTTP được sử dụng cho việc này.) Nó Nhờ khả năng chỉ định phương thức mã hóa tin nhắn 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 dựa trên văn bản.

    HTTP là một giao thức cấp ứng dụng, tương tự như FTP và SMTP. Tin nhắn được trao đổi theo sơ đồ yêu cầu-phản hồi thông thường. HTTP sử dụng 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 không có trạng thái. Điều này có nghĩa là không có sự tồn tại của 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 liên quan đến các yêu cầu và phản hồi gần đây (ví dụ: “cookie” ở phía máy khách, “phiên” ở phía máy chủ). Trình duyệt gửi yêu cầu có thể theo dõi độ 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 máy khách mới nhất. Tuy nhiên, bản thân giao thức không nhận biết đượ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ó yêu cầu nào được áp đặt cho nó.

    Thuận lợi

      Giao thức này rất đơn giản để triển khai và có khả năng mở rộng cao bằng cách giới thiệu các tiêu đề riêng bổ sung chức năng cho ứng dụng và sẽ bị các ứng dụng khác coi là không xác định bỏ qua:

      Sự đơn giản. Giao thức dễ thực hiện, giúp dễ dàng tạo các ứng dụng khách.

      Khả năng mở rộng. Các khả năng của giao thức có thể dễ dàng được mở rộng bằng cách giới thiệu các tiêu đề của riêng bạn, với sự trợ giúp của chúng, bạn có thể có được chức năng cần thiết khi giải quyết một vấn đề cụ thể. Đồng thời, khả năng tương thích với các máy khách và máy chủ khác vẫn được duy trì: chúng sẽ đơn giản bỏ qua các tiêu đề mà chúng không biết.

      Sự phổ biến.

    Khi chọn giao thức HTTP để giải quyết các vấn đề cụ thể, một yếu tố quan trọng là mức độ phổ biến của nó. Kết quả là, đây là nơi có rất nhiều tài liệu khác nhau về giao thức bằng nhiều ngôn ngữ trên thế giới, bao gồm các công cụ phát triển dễ sử dụng trong các IDE phổ biến, hỗ trợ giao thức với tư cách là ứng dụng khách trong nhiều chương trình, và có nhiều lựa chọn giữa các công ty cung cấp dịch vụ lưu trữ có máy chủ HTTP.

    Cấu trúc giao thức

      Mỗi thông báo HTTP bao gồm ba phần, được truyền theo thứ tự đã chỉ định:

      Dòng bắt đầu - xác định loại tin nhắn;

      Tiêu đề - mô tả nội dung của tin nhắn, thông số truyền và thông tin khác;

    Tiêu đề và nội dung của thư có thể bị thiếu, nhưng dòng bắt đầu là thành phần bắt buộc vì nó cho biết loại yêu cầu/phản hồi. Một ngoại lệ là phiên bản 0.9 của giao thức, trong đó thông báo yêu cầu chỉ chứa dòng bắt đầu và thông báo phản hồi chỉ chứa nội dung của thông báo.

    Dòng đầu

    Các dòng bắt đầu là khác nhau cho yêu cầu và phản hồi. Chuỗi truy vấn trông như thế này:

    NHẬN URI - dành cho giao thức phiên bản 0.9.

    Phương thức HTTP URI/Phiên bản - dành cho các phiên bản khác.

      Phương thức - tên của yêu cầu, một từ viết hoa. Trong HTTP 0.9, chỉ phương thức GET được sử dụng; danh sách các yêu cầu dành cho phiên bản 1.1 được trình bày bên dưới.

      URI chỉ định đường dẫn đến tài liệu được yêu cầu.

      Phiên bản - một cặp số cách nhau bởi dấu chấm. Ví dụ: 1.0

    Dòng bắt đầu của phản hồi của máy chủ có định dạng sau: Giải thích mã HTTP/VersionState, Ở đâu:

      Phiên bản - một cặp số cách nhau bằng dấu chấm, như trong yêu cầu.

      Mã trạng thái - ba chữ số. Mã trạng thái xác định nội dung tiếp theo của tin nhắn và hành vi của khách hàng.

      Giải thích (Cụm từ lý do bằng tiếng Anh) - một đoạn văn bản giải thích ngắn gọn về mã phản hồi cho người dùng. Không ảnh hưởng đến tin nhắn dưới bất kỳ hình thức nào và là tùy chọn.

    Ví dụ: dòng bắt đầu phản hồi của máy chủ đối với yêu cầu trước đó có thể trông như thế này:

    phương pháp

    Phương thức HTTP - một chuỗi gồm bất kỳ ký tự nào, ngoại trừ các điều khiển và dấu phân cách, cho biết thao tác chính trên tài nguyên. Thông thường phương pháp này là một từ tiếng Anh ngắn được viết bằng chữ in hoa. Xin 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 các phương thức GET và HEAD. Nếu máy chủ không nhận ra phương thức do máy khách chỉ định thì nó sẽ trả về trạng thái 501 (Chưa triển khai). Nếu máy chủ biết phương thức này nhưng nó không thể áp dụng cho một tài nguyên cụ thể thì 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 thức đượ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.

    TÙY CHỌNĐược sử dụng để xác định khả năng của máy chủ web hoặc thông số kết nối cho một tài nguyên cụ thể. Máy chủ NÊN bao gồm tiêu đề Cho phép trong phản hồi của nó cùng với danh sách các phương thức được hỗ trợ. Tiêu đề phản hồi cũng có thể bao gồm thông tin về các tiện ích mở rộng được hỗ trợ.

    Dự kiến ​​yêu cầu của khách hàng có thể chứa nội dung thông báo để cho biết thông tin mà khách hàng quan tâm. Định dạng của phần thân và quy trình làm việc với nó hiện chưa được xác định. Máy chủ nên bỏ qua nó bây giờ. Tình huống tương tự với nội dung trong phản hồi của máy chủ.

    Để tìm hiểu khả năng của toàn bộ máy chủ, máy khách phải chỉ định dấu hoa thị - “*” trong URI. TÙY CHỌN * Yêu cầu HTTP/1.1 cũng có thể được sử dụng để kiểm tra tình trạng của máy chủ (tương tự như ping) và để kiểm tra xem máy chủ có hỗ trợ HTTP phiên bản 1.1 hay không.

    Kết quả của phương pháp này không được lưu trữ.

    Được sử dụng để truy vấn nội dung của một tài nguyên được chỉ định. Bạn cũng có thể bắt đầu một quá trình bằng phương thức GET. Trong trường hợp này, thông tin về tiến trình của quá trình phải được đưa vào nội dung của thông báo phản hồi.

    Máy khách có thể chuyển các tham số thực hiện yêu cầu trong URI của tài nguyên đích sau ký tự "?"

    NHẬN /path/resource?param1=value1¶m2=value2 HTTP/1.1

    Tương tự như phương thức GET, ngoại trừ việc không có phần nội dung trong phản hồi của máy chủ. Yêu cầu HEAD thường được sử dụng để truy xuất siêu dữ liệu, kiểm tra sự tồn tại của tài nguyên (xác thực URL) và xem liệu nó có thay đổi kể từ lần truy cập cuối cùng hay không.

    Tiêu đề phản hồi có thể được lưu trữ. Nếu siêu dữ liệu của tài nguyên không khớp với thông tin tương ứng trong bộ nhớ đệm thì bản sao của tài nguyên đó sẽ được đánh dấu là lỗi thời.

    Được sử dụng để chuyển dữ liệu người dùng đến một tài nguyên được chỉ định. Ví dụ: trên blog, khách truy cập thường có thể nhập nhận xét về bài đăng vào biểu mẫu HTML, sau đó chúng được ĐĂNG lên máy chủ và đặt trên trang. Trong trường hợp này, dữ liệu được truyền (trong ví dụ với blog, văn bản nhận xét) được bao gồm trong nội dung của yêu cầu. Tương tự, bằng cách sử dụng phương thức POST, các tệp thường được tải lên máy chủ.

    Không giống như phương thức GET, phương thức POST không được coi là bình thường, nghĩa là việc lặp đi lặp lại cùng một yêu cầu POST có thể trả về các kết quả khác nhau (ví dụ: sau khi mỗi nhận xét được gửi, một bản sao khác của nhận xét đó sẽ xuất hiện).

    Nếu kết quả thực hiện là 200 (Ok), thông báo về việc hoàn thành yêu cầu sẽ được đưa vào nội dung phản hồi. Nếu tài nguyên đã được tạo, máy chủ NÊN trả về phản hồi 201 (Đã tạo) với URI của tài nguyên mới trong tiêu đề Vị trí.

    Thông báo phản hồi của máy chủ đối với phương thức POST không được lưu vào bộ đệm.

    Được sử dụng để tải nội dung yêu cầu vào URI được chỉ định trong yêu cầu. Nếu không có tài nguyên tại URI đã cho, máy chủ sẽ tạo tài nguyên đó và trả về trạng thái 201 (Đã tạo). Nếu tài nguyên đã bị thay đổi, máy chủ trả về 200 (Ok) hoặc 204 (Không có nội dung). Máy chủ KHÔNG PHẢI bỏ qua các tiêu đề Content-* không hợp lệ được máy khách gửi cùng với tin nhắn. Nếu bất kỳ tiêu đề nào trong số này không thể được nhận dạng hoặc không hợp lệ trong các điều kiện hiện tại thì phải trả về mã lỗi 501 (Chưa triển khai).

    Sự khác biệt cơ bản giữa phương thức POST và PUT là sự hiểu biết về mục đích của URI tài nguyên. Phương thức POST giả định rằng URI được chỉ định sẽ xử lý nội dung do máy khách gửi. Bằng cách sử dụng PUT, máy khách giả định rằng nội dung được tải xuống khớp với tài nguyên nằm tại URI đã cho.

    Thông báo phản hồi của máy chủ đối với phương thức PUT không được lưu vào bộ đệm.

    Tương tự như PUT, nhưng chỉ áp dụng cho một phần tài nguyên.

    Xóa tài nguyên được chỉ định.

    Trả về yêu cầu đã nhận để khách hàng có thể xem thông tin nào máy chủ trung gian thêm hoặc thay đổi trong yêu cầu.

    Thiết lập kết nối giữa tài nguyên được chỉ định và các tài nguyên khác.

    Loại bỏ kết nối của tài nguyên được chỉ định với tài nguyên khác.

    Chuyển đổi kết nối yêu cầu thành đường hầm TCP/IP trong suốt, thường để tạo điều kiện thuận lợi cho việc thiết lập kết nối SSL an toàn thông qua proxy không được mã hóa.