Đầu tuần này, tôi đã phải làm một cái gì đó mà cảm thấy giống như một vi phạm ngữ nghĩa. Hãy để tôi giải thích.HTTP GET và POST ngữ nghĩa và hạn chế
Tôi đã tạo một ứng dụng khách AJAX đơn giản, đó là yêu cầu một dịch vụ với một số tham số nhất định. Vì toàn bộ ứng dụng về cơ bản là chỉ đọc, tôi nghĩ rằng việc sử dụng HTTP GET là cách để đi. Một số thông số mà tôi phải chuyển là đơn giản (chẳng hạn như thứ tự sắp xếp hoặc số trang).
Tuy nhiên, một trong các thông số bắt buộc có thể có độ dài thay đổi và điều này làm tôi lo lắng. Vì tôi đã mã hóa tất cả các tham số trong chuỗi truy vấn của yêu cầu GET, có vẻ như với tôi rằng điều này đã đặt một số upper limit of (roughly) 2000 characters for the request URL không cần thiết. Và bất kể, tôi không thích nhìn thấy các URL yêu cầu dài 500 ký tự.
Vì vậy, vì yêu cầu POST không có giới hạn như vậy nên tôi đã quyết định chuyển đổi. Nhưng điều này không cảm thấy đúng. Tôi theo ấn tượng rằng một POST biểu thị sửa đổi dữ liệu - nhưng tôi đang sử dụng nó cho một yêu cầu chỉ đọc đơn giản.
Có cách nào tốt hơn để thực hiện việc này không? Để thực hiện một GET, với nhiều tham số? Tôi đã nghe nói về một phương pháp - nơi bạn thực hiện POST sơ bộ của các thông số và sau đó thực hiện GET. Tuy nhiên, kỹ thuật này lá nhiều để được mong muốn.
Nhưng nhìn qua trường hợp cụ thể này, ngữ nghĩa và giới hạn thực sự của phương thức yêu cầu HTTP là gì? Và tại sao GET không hỗ trợ bất kỳ loại tải trọng tham số nào? Sử dụng chuỗi truy vấn trong URL gần như cảm thấy giống như một hack với tôi.
Tại sao bạn cảm thấy bài đăng đó biểu thị sửa đổi dữ liệu? –
@ConradFrix: Bởi vì nó được sử dụng trong việc gửi biểu mẫu, trong việc tải lên tệp và [hành động không phải là idempotent chung.] (Http://en.wikipedia.org/wiki/POST_ (HTTP) #Affecting_server_state) – voithos
Nếu bạn viết một ứng dụng Ajax, tại sao bạn quan tâm đến độ dài của URL?Cũng lưu ý rằng giới hạn ký tự 2000 chỉ áp dụng cho các URL trình duyệt, chứ không phải các yêu cầu Ajax (như đã lưu ý trong các nhận xét cho liên kết mà bạn đã trình bày). –