2009-12-09 38 views
21

Tại sao có các yêu cầu GET và POST trong AJAX vì nó không ảnh hưởng đến URL trang? Điều gì làm cho nó khác biệt bằng cách truyền dữ liệu nhạy cảm qua GET trong AJAX khi dữ liệu không được phản ánh tới URL trang?GET và POST trong AJAX?

+2

Dữ liệu được phản ánh trong URL trang bằng GET. Có một cái nhìn vào những gì đang xảy ra với một màn hình TCP/IP hoặc thậm chí chỉ là Header Monitor add-on cho Firefox. –

+0

Có thể trùng lặp: http://stackoverflow.com/questions/715335/get-vs-post-in-ajax/ – trante

Trả lời

41

Bạn nên sử dụng đúng động từ HTTP theo những gì bạn yêu cầu từ dịch vụ web của mình.


Khi giao dịch với một Collection URI như: http://example.com/resources/

GET: Liệt kê các thành viên của bộ sưu tập, hoàn chỉnh với các URI thành viên của họ để điều hướng hơn nữa. Ví dụ, liệt kê tất cả các xe để bán.

PUT: Có nghĩa là được định nghĩa là "thay thế toàn bộ bộ sưu tập bằng một bộ sưu tập khác".

POST: Tạo mục nhập mới trong bộ sưu tập trong đó ID được chỉ định tự động bởi bộ sưu tập. ID được tạo thường được bao gồm như là một phần của dữ liệu được trả về bởi thao tác này.

DELETE: Có nghĩa là được xác định là "xóa toàn bộ bộ sưu tập".


Khi giao dịch với một Member URI như: http://example.com/resources/7HOU57Y

GET: Lấy một đại diện của thành viên giải quyết của bộ sưu tập thể hiện bằng một kiểu MIME thích hợp.

PUT: Cập nhật thành viên được chỉ định của bộ sưu tập hoặc tạo bộ sưu tập đó với ID được chỉ định.

POST: Xử lý thành viên được giải quyết dưới dạng bộ sưu tập theo cách riêng của mình và tạo cấp dưới mới.

DELETE: Xóa thành viên được chỉ định của bộ sưu tập.


Nguồn: Wikipedia

+1

Có ai thực sự bận tâm với PUT và DELETE không? – carl

+10

"Có ai thực sự bận tâm với PUT và DELETE không?" - bao giờ nghe nói về Amazon S3? –

+3

Có, khi xác định các dịch vụ web RESTful, bạn hoàn toàn làm. – Red3

18

Vâng, với GET, bạn vẫn có giới hạn độ dài url. Ngoài ra, nó hoàn toàn có thể hiểu rằng máy chủ xử lý các yêu cầu POST và GET khác nhau; do đó cần phải có khả năng xác định yêu cầu bạn đang làm.

+0

Ngoài ra, bạn có thể sử dụng cả hai loại yêu cầu khi phát triển ứng dụng. Đối với hầu hết chúng, cờ is_ajax' là đủ. Tốt hơn để có sự lựa chọn như vậy thì không có. –

+1

Tôi chấp nhận câu trả lời của dnl.vssll vì GET giới hạn độ dài url không được áp đặt bởi HTTP hoặc AJAX, bạn có thể kiểm tra câu trả lời này cho http://stackoverflow.com/questions/812925/what-is-the-maximum-possible- length-of-a-query-string. Nó bị giới hạn bởi trình duyệt/máy chủ và tại sao giới hạn của nó thực sự là một điểm thảo luận ..HTTP dựa trên văn bản, trình duyệt gửi yêu cầu HTTP nói chung .. Nó bao gồm chuỗi truy vấn, vì vậy nếu không có giới hạn về độ dài yêu cầu (Giả sử trường hợp lý tưởng) thì điểm giới hạn chuỗi truy vấn là gì? – Xinus

+5

Tôi đã không đưa ra một lý lẽ để bảo vệ giới hạn chiều dài, tôi chỉ nói rằng nó ở đó, và bạn sẽ phải cân nhắc nó, bởi vì khi phát triển web, bạn thực sự không thể bỏ qua * trình duyệt *. nhưng hey, bạn không cần phải thúc đẩy chấp nhận của bạn; Câu trả lời của dnl là một câu trả lời hay nhất =) –

6

Có hai lý do chính cho việc họ:

  1. GET yêu cầu có một số hạn chế khá hạn chế về kích thước; POST thường có khả năng chứa nhiều thông tin hơn.

  2. Phụ trợ có thể mong đợi GET hoặc POST, tùy thuộc vào cách thiết kế được thiết kế. Chúng tôi cần sự linh hoạt khi thực hiện GET nếu chương trình phụ trợ mong đợi một hoặc POST nếu đó là những gì nó mong đợi.

4

Bạn thường gửi các thông số để kịch bản AJAX, nó sẽ trả về dữ liệu dựa trên các thông số này. Nó hoạt động giống như một form có method = "get" hoặc method = "post". Khi sử dụng phương thức GET, các tham số được truyền trong chuỗi truy vấn. Khi sử dụng phương thức POST, các tham số được gửi trong nội dung bài đăng.

Thông thường, nếu thông số của bạn có rất ít ký tự và không chứa thông tin nhạy cảm thì bạn gửi chúng qua phương thức GET. Dữ liệu nhạy cảm (ví dụ: mật khẩu) hoặc văn bản dài (ví dụ: sinh học dài 8000 ký tự của một người) được gửi tốt hơn thông qua phương thức POST.

+0

Các phương thức GET và POST của AFAIK chỉ khác nhau ở định dạng yêu cầu của chúng, vì vậy tôi không nghĩ POST là an toàn hơn GET. GET được coi là không an toàn vì các tham số được phản ánh tới url nhưng AJAX khắc phục được vấn đề đó. Ngoài ra tất cả các trình duyệt hiện đại không giới hạn lượng dữ liệu chúng tôi có thể gửi qua yêu cầu GET .. Chỉ có thể giải thích từ AJAX được thiết kế để tồn tại với giao thức HTTP được thiết lập tốt. – Xinus

+0

@Xinus: Cuối cùng tôi nghe nói, cả hai trình duyệt * và * máy chủ vẫn áp dụng các chiều dài URL đáng kể (ví dụ: 'GET') giới hạn, cũng như thông số HTTP IIRC. Bạn có thể gửi một tài liệu tham khảo cho tuyên bố của bạn rằng họ không? –

+1

Bạn nói đúng. Nhưng lý do tại sao một số người coi POST là * hơi * an toàn hơn GET là vì các tham số GET có thể được lưu trữ ở nhiều vị trí khác nhau, bao gồm nhật ký máy chủ và lịch sử trình duyệt dưới dạng URL. POST không có vấn đề này. –

0

Những người khác đã đề cập đến các điểm chính (ngữ cảnh/idempotency và kích thước), nhưng tôi sẽ thêm một điểm khác: mã hóa. Nếu bạn đang sử dụng SSL và muốn mã hóa đầu vào của bạn, bạn cần sử dụng POST.

+1

Điều này không đúng. Tất cả dữ liệu được truyền qua SSL đều được mã hóa. GET và POST không tạo ra sự khác biệt nào. –

+1

Tôi đồng ý với Joel L. Toàn bộ thông tin liên lạc được mã hóa nên câu hỏi về phương pháp được sử dụng ở đâu? – Xinus

9

Sự khác biệt giữa GETPOST là cách bộ nhớ đệm được xử lý trong trình duyệt. POST phản hồi không bao giờ được lưu trong bộ nhớ cache. GET có thể hoặc không thể được lưu trữ dựa trên các quy tắc lưu trong bộ nhớ cache được chỉ định trong tiêu đề phản hồi của bạn.

0

Khi chúng tôi sử dụng phương thức GET trong Ajax, chỉ nội dung của giá trị của trường được gửi chứ không phải định dạng nội dung. Ví dụ: nội dung trong vùng văn bản chỉ được thêm vào URL trong trường hợp phương thức GET (không có ký tự dòng mới). Đó không phải là trường hợp trong phương thức POST.

1

Cảm ơn .. tôi chủ yếu sử dụng phương thức GET với Ajax và tôi đã không có bất kỳ vấn đề cho đến nay ngoại trừ như sau:

Internet Explorer (không giống như Firefox và Google Chrome) bộ nhớ cache GET gọi nếu sử dụng cùng một GET giá trị.

Vì vậy, việc sử dụng một khoảng thời gian bằng Ajax GET có thể hiển thị kết quả tương tự trừ khi bạn thay đổi URL với việc sử dụng số ngẫu nhiên không liên quan cho mỗi GET Ajax.

6

Đơn giản là giảm sự tôn trọng các quy tắc của giao thức http.

Nhận - cuộc gọi phải là không có giá trị. Điều này có nghĩa là nếu bạn gọi nó nhiều lần, bạn sẽ nhận được kết quả tương tự. Nó không có ý định thay đổi dữ liệu cơ bản. Bạn có thể sử dụng điều này cho một hộp tìm kiếm, v.v.

Bài viết - các cuộc gọi KHÔNG phải là không cần thiết. Nó được phép thay đổi dữ liệu cơ bản, vì vậy có thể được sử dụng trong một phương thức tạo. Nếu bạn gọi nó nhiều lần, bạn sẽ tạo nhiều mục nhập.