2009-04-03 50 views
67

Sự khác nhau giữa GETPOST cho Ajax yêu cầu là gì?GET so với POST trong Ajax

Tôi không thấy bất kỳ sự khác biệt nào giữa hai trường hợp này, ngoại trừ khi tôi sử dụng GET, các tham số được gửi bằng URL, điều này không thực sự khác biệt, vì tất cả các yêu cầu đều được thực hiện trên nền và người dùng không tìm thấy bất kỳ sự khác biệt nào.

chỉnh sửa: là gì PUTDELETE phương pháp sử dụng cho?

+7

BTW, có cũng được PUT và DELETE yêu cầu ngoài phải POST yêu cầu. Bạn cũng nên hỏi về chúng. –

+1

Đối với người đọc trong tương lai: đây là [câu hỏi liên quan của Fooker một năm trước] (http://stackoverflow.com/q/18395523/4043409). – Gideon

Trả lời

129

GET được thiết kế để nhận dữ liệu từ máy chủ. POST (và bạn bè ít được biết đến PUT và DELETE) được thiết kế để sửa đổi dữ liệu trên máy chủ.

Yêu cầu GET sẽ không bao giờ khiến dữ liệu bị xóa khỏi ứng dụng. Nếu bạn có một liên kết, bạn có thể nhấp vào với một GET để loại bỏ dữ liệu, sau đó Google spidering trang web của bạn có thể nhấp vào tất cả các liên kết "Xóa" của bạn.

Câu trả lời kinh điển có thể được tìm thấy here, mà trích HTML 2.0 spec:

Nếu việc xử lý một hình thức là idempotent (tức là nó không có kéo dài hiệu ứng quan sát được về tình trạng của thế giới ) , sau đó phương thức biểu mẫu phải là NHẬN. Nhiều tìm kiếm cơ sở dữ liệu không có các tác dụng phụ có thể nhìn thấy và làm cho các ứng dụng lý tưởng của biểu mẫu truy vấn lý tưởng.

Nếu dịch vụ liên quan đến việc xử lý biểu mẫu có các tác dụng phụ (ví dụ: sửa đổi cơ sở dữ liệu hoặc đăng ký dịch vụ ), phương thức phải được BÀI ĐĂNG.

Trong cuộc gọi AJAX, bạn cần sử dụng bất kỳ phương thức nào mà máy chủ của bạn hỗ trợ. Bạn nên luôn luôn thiết kế máy chủ của bạn để các hoạt động sửa đổi dữ liệu được gọi bởi POST/PUT/DELETE. Các nhận xét khác có liên kết đến REST, thường là ánh xạ C/R/U/D thành "POST hoặc PUT" (Tạo)/GET (Đọc)/PUT (Cập nhật)/DELETE (Xóa).

+6

+1: Định nghĩa khái quát về GET - tính không cần thiết. Tất cả các thay đổi phải xảy ra với POST, PUT và DELETE. –

+0

máy chủ của tôi đang đưa ra lỗi 403 nếu tôi gửi biểu mẫu bằng cách sử dụng bài đăng, nhận được đang hoạt động. Tôi nghĩ điều này là do cấu hình máy chủ. Tôi không có quyền truy cập vào máy chủ. Làm thế nào để có được xung quanh nó? –

+0

Tôi đồng ý với @ S.Lott. Định nghĩa hoàn toàn tốt đẹp và đầy đủ về phương thức GET./vỗ tay giao phối. –

24

Nếu bạn đang gửi một lượng lớn dữ liệu hoặc dữ liệu nhạy cảm qua HTTPS, bạn sẽ muốn sử dụng POST. Nếu nó chỉ là một tham số đơn giản, tôi sẽ sử dụng GET.

Yêu cầu GET có giới hạn về lượng dữ liệu có thể được gửi. Tôi quên số chính xác, nhưng điều này có thể gây ra vấn đề nếu bạn đang gửi bất cứ điều gì đáng kể. Về cơ bản sự khác biệt giữa GET và POST là trong một yêu cầu GET, các tham số được truyền trong URL trong POST, các thông số được bao gồm trong nội dung thư.

+2

yep, quan trọng để chỉ ra rằng có những giới hạn về kích thước liên quan đến GET và chúng khác nhau tùy thuộc vào phần mềm máy khách và máy chủ –

19

AJAX của nó hay không là không liên quan. Đó là về hành động mà bạn đang thực hiện. Tôi khuyên bạn nên làm theo các nguyên tắc của REST. Có nhiều điều khoản bổ sung cho việc cập nhật, xóa, vv ...

+3

+1: Nguyên tắc yên tĩnh là rất cần thiết. –

3

Nhiều máy chủ web giới hạn độ dài của dữ liệu có thể được chuyển như một phần của URL, vì vậy yêu cầu GET có thể bị hỏng theo các cách lẻ khó gỡ lỗi .

Ngoài ra, phần lớn máy chủ ghi nhật ký URL trong nhật ký truy cập, vì vậy nếu bạn chuyển thông tin nhạy cảm (chẳng hạn như mật khẩu) vào yêu cầu GET, điều này sẽ được ghi vào đĩa trong văn bản thuần túy.

Từ phối cảnh REST, yêu cầu GET sẽ không có tác dụng phụ - chúng không được sửa đổi dữ liệu. Vì vậy, nếu bạn chỉ GET một tài nguyên bằng ID, điều này có ý nghĩa, nhưng nếu bạn cam kết thay đổi tài nguyên, bạn nên sử dụng PUT, POST hoặc UPDATE cho động từ http.

-2

Nếu bạn đang chuyển bất kỳ đối số nào với các ký tự có thể bị rối tung lên trong URL (chẳng hạn như dấu cách), bạn sử dụng POST. Nếu không, bạn có thể sử dụng GET.

Nói chung, nếu bạn chỉ chuyển một vài đối số nhỏ, bạn sẽ sử dụng GET. Tuy nhiên, để truyền tải thông tin người dùng gửi như các mục blog, văn bản, v.v ..., một cách thực hành tốt để sử dụng POST.

Ngoài ra còn có một số khuôn khổ dựa hoàn toàn vào các url phân đoạn dựa (như site.com/products/133 hơn site.com/products.php?id=333 và những khuôn khổ bỏ đặt biến GET để bảo mật. Trong trường hợp này bạn sẽ sử dụng POST allt thời điểm đó.

0

Sự khác biệt là như nhau giữa GETPOST cho dù bạn đang sử dụng Ajax, HTML form s, hoặc curl Dưới đây là các định nghĩa liên quan:.

1

Về tôi, tôi thích POST. Tôi dự trữ nhận được để các sự kiện tôi biết giá trị gửi được giới hạn dữ liệu tôi có "kiểm soát", ví dụ, để truy xuất một mục với một id. Ví dụ: "getitem? Id = 123", "deleteImtem? Id = 123", ... Đối với các trường hợp khác, khi tôi có biểu mẫu có thể điền bởi người dùng, tôi thích POST.

Giống như Ryan Smith đã nói, tốt hơn nên sử dụng POST để gửi một lượng lớn dữ liệu, và ít hơn trong trường hợp sử dụng ngôn ngữ khác/ký tự đặc biệt (thường là tất cả các khung javascript chuyên ngành không có bất kỳ vấn đề nào đối phó với điều đó nhưng tôi nghĩ là ít hơn wories để sử dụng POST).

Đối với phối cảnh REST, theo ý kiến ​​của tôi, bạn có thể sử dụng điều này với một dự án mới (để giữ sự nhất quán với toàn bộ dự án).

Cuối cùng, maybee một số chương trình được sử dụng trong mạng (URL loguers (ví dụ: để xem nhân viên có bị mất thời gian trên các trang web không được tự động, ...) proxys, ...) hay bất kỳ loại công cụ nào khác có thể chặn truy vấn. Somes sẽ hiển thị trong báo cáo các thông số bạn đã gửi với GET, xem xét nó giống như một trang web khác. Nhưng trong tình huống này, có thể không phải là vấn đề của bạn, đó là những thay đổi từ dự án này sang dự án khác! ;)

4

Yêu cầu GET dễ khai thác hơn trong các cuộc tấn công CSRF (yêu cầu qua trang web chéo). Yêu cầu POST giả mạo yêu cầu Javascript phải được bật ở phía người dùng, trong khi các yêu cầu GET giả vẫn có thể chỉ với img, thẻ tập lệnh.

0

Đầu tiên, thông tin chung. Sử dụng GET nếu bạn chỉ đọc dữ liệu, sử dụng POST nếu bạn thay đổi một cái gì đó trên cơ sở dữ liệu, tệp txt, v.v.

Nhưng vấn đề là, một số bộ nhớ cache của trình duyệt GET kết quả. Tôi gặp sự cố với yêu cầu AJAX trong IE7, nhưng cuối cùng tôi phát hiện ra rằng trình duyệt lưu trữ kết quả GET.Tôi đã suy nghĩ lại luồng và thay đổi yêu cầu của tôi thành POST.

Vì vậy, không sử dụng GET nếu bạn không muốn lưu vào bộ nhớ cache.

(Tất nhiên bạn có thể vô hiệu hóa bộ nhớ đệm trong hoạt động GET. Nhưng tôi không thích nó)

2

Cả hai đều được sử dụng để gửi một số dữ liệu và nhận được một số phản ứng sử dụng dữ liệu đó.

NHẬN: Nhận thông tin lưu trữ trong máy chủ. I E. Tìm kiếm, tweet, Thông tin cá nhân. Nếu bạn muốn gửi thông tin thì nhận yêu cầu gửi yêu cầu bằng cách sử dụng process.php? Name = subroto Vì vậy, về cơ bản nó gửi thông tin qua url. Url không thể xử lý hơn 2083 char. Vì vậy, cho bài đăng blog bạn có thể nhớ nó là không thể?

BÀI ĐĂNG: Bài đăng cũng giống như vậy. Đăng ký người dùng, Đăng nhập người dùng, Gửi dữ liệu lớn, Đăng blog. Nếu bạn cần gửi thông tin bảo mật, hãy sử dụng bài đăng hoặc dữ liệu lớn vì nó không đi qua url.

AJAX: $ .get() và $ .post() chứa các đối tượng địa lý là tập con của $ .ajax(). Nó có nhiều cấu hình.

Phương thức $ .get(), là một loại viết tắt cho $ .Ajax(). Khi sử dụng $ .get(), thay vì truyền vào một đối tượng, bạn chuyển đối số. Tối thiểu, bạn sẽ cần hai đối số đầu tiên, là URL của tệp bạn muốn truy xuất (ví dụ: ‘test.txt’) và một cuộc gọi lại thành công.

Tóm tắt:

$.get(url [, data ] [, success ] [, dataType ]) 
$.post(url [, data ] [, success ] [, dataType ]) // for sending secure or Large information 
$.ajax(url [, settings ]) // More Configaration