문제

과거의 AJAX 응용 프로그램 중 일부는 GET 요청을 사용했지만 이제는 포스트 요청을 대신 사용하기 시작했습니다. 사후 요청은 약간 더 안전하고 확실히 URL 친화적/예쁘게 보입니다. 따라서 GET 요청을 전혀 사용해야하는 이유가 있는지 궁금합니다.

도움이 되었습니까?

해결책

나는 일반적으로 질문을 다음과 같이 설정합니다. 요청 후 중요한 변경 사항이 있습니까? (로깅 등에도 불구하고). 그렇다면 게시물 요청이어야합니다. 그렇지 않은 경우 GET 요청이어야합니다.

나는 당신이 포스트 요청을 "약간"더 안전하게 부르는 것을 기쁘게 생각합니다. 왜냐하면 그것이 그것들이 무엇인지가 많기 때문입니다. 사용자가 페이지에 게시하는 게시물 요청을 속이는 것은 사소한 일입니다. 그러나 게시물 요청으로 만들면 웹 가속기 또는 재 장전이 실수로 작업을 다시 트리거하는 것을 방지합니다.

Ajax로서 한 가지 더 고려 사항이 있습니다. 콜백 지원으로 JSON을 반환하는 경우 다른 웹 사이트가 여기에서 볼 수없는 민감한 데이터를 넣지 않도록주의하십시오. Wikipedia는 이러한 라인을 따라 사용자 anti-CSRF 토큰이 JSON API를 통해 공개 된 취약점을 가졌습니다.

다른 팁

부작용이없는 요청을받는 곳을 사용해야합니다. 예를 들어 정보를 가져 오기 만하면됩니다. 이 요청은 다음과 같습니다.

  • 아무런 문제없이 반복됩니다 - 브라우저가 오류를 감지하면 조용히 재 시도 할 수 있습니다.
  • 브라우저에서 결과를 캐시하십시오
  • 프록시로 캐시됩니다

이것들은 모두 좋습니다. 데이터 (특히 공개 데이터) 만 검색하는 것은 실제로 얻어야합니다. 서버는 현명한 최종 수정을 보내야합니다. 그리고 만료 : 필요한 경우 캐싱을 허용하도록 헤더.

그러나 모든 좋은 점은 질문에 대한 답변에 따라 요청 이후의 요청을 통해 특정 시나리오에서 더 유용합니다.

  1. 그들은 북마크 될 수 있습니다
  2. 캐시 될 수 있습니다
  3. 그들은 더 빠릅니다
  4. 그들은 결과를 알고 있으므로 (데이터를 변경하지 않는다고 가정), 여러 번 방문하는 것은 문제가되지 않습니다.

후손을 위해, 블로그 노트 로이 의견을 업데이트하기 위해 : Point #3 여기, Omar Al Zabir (참조 저자의 저자)에 대한 모든 크레딧 블로그 게시물):

"Atlas는 기본적으로 모든 Ajax 호출에 대한 HTTP 게시물을 만듭니다. HTTP 게시물은 HTTP가 얻는 것보다 비싸다. 와이어를 통해 더 많은 바이트를 전송하므로 귀중한 네트워크 시간이 걸리고 ASP.NET은 서버 끝에서 추가 처리를 수행하게한다. , 당신은 HTTP를 가능한 한 많이 사용해야합니다. 그러나 HTTP get은 객체를 매개 변수로 전달할 수 없습니다. 숫자, 문자열 및 날짜 만 전달할 수 있습니다. 해당 URL에 대한 인기를 얻으므로 URL이 2048 Chars보다 커지는 컨텐츠를 너무 많이 전달해서는 안됩니다. 내가 아는 한, 그것이 모든 URL의 최대 길이입니다.

HTTP Post의 또 다른 악한 점은 실제로 2 개의 전화입니다. 첫 번째 브라우저는 HTTP Post 헤더를 보내고 서버는 "HTTP 100 계속"으로 답장을 보냅니다. 브라우저가 이것을 받으면 실제 몸체를 보냅니다. "

이렇게하면 Get을 사용할 위치와 게시물을 어디에서 사용할 수 있는지 결정하는 데 도움이 될 수 있습니다.

URI, 주소 및 HTTP 사용 및 게시물 사용.

다른 사람은 언급하지 않은 다른 차이가 있습니다.

GET 요청은 URL 문자열에 전달되므로 일반적으로 브라우저에 따라 길이 제한이 적용됩니다.

사후 요청은 훨씬 더 클 수 있습니다. 실제로는 제한되지 않습니다. 따라서 웹 서버에서 데이터를 요청해야하고 많은 매개 변수 정보를 전달하는 경우 게시물 요청이 유일한 옵션 일 수 있습니다.

따라서 이전에 언급 한 바와 같이 실제로 GET 요청은 데이터를 요청하는 것 (부작용 없음)이며, 게시물 요청은 일반적으로 데이터를 서버로 전송하여 (부작용으로) 저장하는 데 사용됩니다. 예를 들어 게시물을 사용하여 파일을 업로드하십시오. 파일을 검색하십시오.

즉, URL 문자열이 매우 짧다고 생각하는 시간이있었습니다. Lotus Notes와 같은 일부 응용 프로그램은 많은 수의 임의 문자를 사용하여 문서 ID를 나타냅니다. 임의의 문자열을 생성 한 다른 제품을 사용하는 것이 불만을 가졌으므로 매번 페이지 URL이 고유했습니다. 임의의 문자열은 엄청났습니다. 그리고 항상 메모리에서 IE6에서 작동하지는 않았습니다.

게시물 요청은 얻는 것만 큼 불안합니다. 주요 차이점은 게시물이 서버 응용 프로그램의 상태를 수정하는 데 사용되며 요청 데이터 만 얻는 데 사용된다는 것입니다.

Clean, "RESTFUL"URL을 사용할 때는 차이가 중요합니다. 여기서 URL 자체가 리소스를 지정하고 다른 메소드가 서버 측에서 다른 작업을 트리거합니다.

아마도 가장 중요한 것은 Get은 URL 기록에서 책을 표시 할 수 있고 볼 수 있으며 Google에서 검색 할 수 있습니다.

게시물은 당신이하지 않는 곳에 중요합니다 원하다 예를 들어, 북마크 가능하거나 URL로 입력 할 수있는 이벤트 (또는 URL을 크롤링하는 Google)는 실수로 시스템에서 사용자를 삭제하는 것과 같은 작업을 수행 할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top