2011-01-23 32 views
7

Tôi cần biết sự khác biệt giữa CURL (trong PHP) và AJAX (trong Javascript) khi nói đến biết Nguồn của yêu cầu.AJAX so với CURL

CẬP NHẬT: Điều tôi muốn biết là tôi tạo yêu cầu bằng AJAX địa chỉ IP người gửi nào sẽ được nhận ở phía máy chủ với gói dưới dạng nguồn? Điều tương tự là với CURL và cho tất cả người dùng nó sẽ gửi một địa chỉ IP duy nhất. Nhưng đó là trường hợp tương tự với JS? JS thực hiện ở phía máy khách vì vậy nó sẽ là địa chỉ IP của khách hàng?

+0

Có thể là bản sao của http://stackoverflow.com/questions/4738380/what-differences-are-there-between-form-submissions-and-curl-requests – arnaud576875

+0

Không. Tôi cần phải biết nguồn yêu cầu khi nó là CURL hoặc AJAX – Neutralizer

Trả lời

14

cURL là quy trình phía máy chủ. Điều này có nghĩa là nó sẽ được gọi trước khi trang được hiển thị và không liên quan gì đến khả năng của khách hàng.

AJAX, tuy nhiên, là cuộc gọi phía máy khách. điều này có nghĩa là nó sẽ không được thực hiện cho đến khi khách hàng tải trang (hoặc ít nhất là đoạn mã được xem và thực hiện, nhưng điều này thường là trên document.ready).

Nếu bạn đang tìm cách truy xuất thông tin và đưa thông tin đó cho người dùng ngay lập tức thì cURL là đặt cược tốt nhất của bạn. Nếu bạn muốn làm một tải tiến bộ (đổ trang, sau đó lấy nội dung cho một "liền mạch" tải cho người dùng) thì AJAX là đặt cược tốt nhất. Tất cả trong khi vẫn ghi nhớ, mặc dù trong ngày và tuổi ngày nay nó bán tầm thường, AJAX có thể không phải lúc nào cũng được hỗ trợ (hoặc vô hiệu hóa trong trường hợp plugin NoScript của FireFox).

Điều đó đang được nói, nguồn của việc thực thi cURL sẽ nằm trên máy chủ. Nguồn của yêu cầu AJAX sẽ trên cơ sở mỗi khách hàng. Cả hai đều không cung cấp phương tiện phát hiện an toàn (phía máy chủ) để biết ai đã gửi gì (vì có thể thay đổi tiêu đề).

0

Nếu bạn đang cố gắng phát hiện phương pháp nào được sử dụng làm nguồn của yêu cầu, không có cách nào để biết chắc chắn. Hầu hết các trình duyệt đều sử dụng tiêu đề HTTP X-Requested-With khi gửi yêu cầu qua AJAX. Thư viện cURL gửi một tác nhân người dùng theo mặc định, nhưng điều này rõ ràng có thể bị thay đổi bởi thư viện. Cả hai phương pháp có thể được giả mạo một cách dễ dàng và không nên được sử dụng để xác nhận nghiêm ngặt.

Chỉnh sửa:

Yêu cầu AJAX sẽ đến từ ứng dụng khách đã thực hiện yêu cầu AJAX. Yêu cầu cURL sẽ đến từ nơi thư viện được sử dụng. (ví dụ: nếu bạn đang sử dụng PHP, nó sẽ đến từ máy chủ PHP. Nếu bạn đang sử dụng nó thông qua CLI, thì nó sẽ đến từ máy chủ bạn đã thực thi lệnh này)

Rõ ràng là các yêu cầu có thể nằm sau proxy , v.v.

0

Địa chỉ IP yêu cầu tệp javascript từ máy chủ sẽ giống với địa chỉ IP đã kích hoạt yêu cầu ajax quay lại máy chủ từ tệp đó. Xem same origin policy.

+0

Theo đó, nếu tôi tạo một trang web sẽ kích hoạt yêu cầu AJAX để nói một số www.nnn.com thì bất kỳ người dùng nào sử dụng trang web của tôi sẽ kích hoạt yêu cầu này từ IP của họ . đúng? – Neutralizer

+1

Vâng, đây là những gì cả Brad và tôi đã nói. Lưu ý: AJAX bị giới hạn bởi cùng một chính sách gốc: bạn không thể thực hiện yêu cầu AJAX đến một tên miền khác với yêu cầu từ đó. – William