2011-12-13 38 views
10

Tôi biết sự khác biệt giữa phương thức nhận và đăng HTTP (như được chi tiết chi tiết lớn trong câu hỏi this).
Câu hỏi của tôi là tại sao không phải lúc nào cũng sử dụng phương thức đăng bài cho các cuộc gọi AJAX, an toàn. Có yêu cầu nhanh hơn không? là có lý do để thích nhận được sau đó đăng bài?Tại sao không phải lúc nào cũng sử dụng bài đăng HTTP cho cuộc gọi ajax?

Đối none gọi ajax có một lý do - để chia sẻ một liên kết đến các url đó, nhưng đối với AJAX lập luận này đó là không tốt ...

Trả lời

10

yêu cầu GET có kích thước nhỏ hơn và nhanh hơn; và tận dụng bộ nhớ đệm, cả ở phía máy khách và trên một phần của bất kỳ proxy nào có thể đang hoạt động.

Đối với dữ liệu không được dự kiến ​​thay đổi thường xuyên, các yêu cầu GET thường rất hợp lý, vì chúng có nhiều cơ hội không bị gửi lại trừ khi cần thiết.

Đối với dữ liệu được dự kiến ​​sẽ thay đổi thường xuyên hơn, tuy nhiên, POST thực sự là tùy chọn an toàn hơn vì nó sẽ luôn được gửi lại cho máy chủ, đảm bảo rằng các thay đổi luôn được tôn trọng.

Ngoài ra còn có các vấn đề ngữ nghĩa phát sinh. Yêu cầu POST chỉ thực sự được sử dụng khi mục đích là sửa đổi dữ liệu trên máy chủ.

5

Câu hỏi của tôi là lý do tại sao không phải lúc nào sử dụng phương pháp bài cho AJAX gọi

Bởi vì trong một ứng dụng RESTful nó sẽ không làm cho cảm giác sử dụng động từ POST cho những hành động mà không sửa đổi trạng thái trên máy chủ. Trong một ứng dụng RESTful nó không thực sự quan trọng như thế nào yêu cầu đã được thực hiện: cho dù đó là một bình thường, AJAX, hoặc một robot.

Yêu cầu GET thường nhanh hơn và được lưu trong bộ nhớ cache bởi trình duyệt.

+1

Phần thứ hai là đủ để thích GET sau đó Bưu chính, Nhưng tôi sẽ không bị thuyết phục để _follow_ các tiêu chuẩn REST của nó không phải là nhanh hơn và được lưu vào bộ nhớ cache.Có lý do nào khác không sử dụng phương thức Post cho các hoạt động không chính trị? – gdoron

+0

@gdoron, cá nhân tôi luôn tuân theo các tiêu chuẩn REST trong các ứng dụng của tôi, vì vậy đây là đối số số 1 cho tôi. –

2

GET sử dụng một yêu cầu duy nhất cho máy chủ so với hai cho POST.

Theo nhóm YSlow của Yahoo, bạn nên chọn GET khi nội dung được truyền ít hơn giới hạn 2K của IE. Đọc thêm ở đây: http://developer.yahoo.com/performance/rules.html#ajax_get

+2

Điều gì mang lại cho bạn ấn tượng rằng POST có 2 yêu cầu? – Gareth

+0

@Gareth, có lẽ đó là liên kết mà anh ấy cung cấp ...? – gdoron

+2

@gdoron gói TCP không giống với yêu cầu HTTP. Bất kỳ loại yêu cầu nào cũng có thể được chia thành nhiều gói TCP, nó chỉ xảy ra khi hầu hết (không phải tất cả) trình duyệt [sử dụng tối thiểu 2 gói] (http://josephscott.org/archives/2009/08/xmlhttprequest-xhr-uses -multiple-packet-for-http-post /) cho một bài đăng AJAX. Hãy rõ ràng rằng việc đếm các gói TCP là tối ưu hóa vi mô tốt nhất, và tối ưu hóa vi mô hiếm khi đưa ra một câu trả lời tuyệt vời cho một câu hỏi về việc liệu bạn có nên "luôn luôn" làm điều gì đó hay không. – Gareth

7

Tôi đã đọc các thông lệ Yahoo tốt nhất để tăng tốc trang web của bạn một ngày nào đó trở lại và họ đã giải thích rất rõ tại sao chúng ta nên thích vượt qua bưu chính, đây là đoạn bài để bạn tham khảo

sử dụng XMLHttpRequest, POST được triển khai trong trình duyệt dưới dạng quy trình gồm hai bước: gửi tiêu đề đầu tiên, sau đó gửi dữ liệu. Vì vậy, tốt nhất là sử dụng GET, chỉ mất một gói TCP để gửi (trừ khi bạn có nhiều cookie). Độ dài URL tối đa trong IE là 2K, vì vậy nếu bạn gửi nhiều hơn 2K dữ liệu, bạn có thể không sử dụng được GET.

Một tác động phụ thú vị là POST mà không thực sự đăng bất kỳ dữ liệu nào hoạt động như GET. Dựa trên các thông số HTTP, GET có nghĩa là để lấy thông tin, do đó, nó có ý nghĩa (ngữ nghĩa) để sử dụng GET khi bạn chỉ yêu cầu dữ liệu, trái với việc gửi dữ liệu được lưu trữ phía máy chủ.

Đối với chi tiết tham khảo có trang để biết chi tiết

Yahoo Best Practices for speed up

Các vấn đề liên quan