2009-01-23 8 views
11

대부분의 최신 브라우저는 POST를 수행하지 않고 AJAX 및 클라이언트 측 요청을 지원하므로 POST (form post)의 역할은 무엇입니까?POST 대 Ajax 호출

POST가 항상 XmlHttpRequest보다 선호되는 상황이나 일반적인 규칙이 있습니까?

POST가 수행하는 모든 작업은 서버 헤드 안에 가변 키 값 쌍을 배치하는 것입니다. 생각할 수있는 POST의 장점은 대용량의 데이터와 모바일 브라우저입니다. 내가 누락 된 많은 사람들이 있습니까?

N.B. AJAX 호출로 POST를 수행 할 수 있다는 것을 알고 있습니다. 주로 <form> 태그로 얘기하고 있습니다.

답변

19

이 질문은 두 가지 개념을 결합하기 때문에 약간 까다 롭습니다. 첫 번째는 POSTing이고 두 번째는 Ajax입니다. 게시는 GETting과 비교하여 구현 및 의미가 다른 다른 HTTP 메소드입니다. Ajax 또는 XmlHttpRequest는 정상적인 요청/탐색에 해당합니다. XmlHttpRequest와 일반 탐색 및 양식 제출 모두에 POST 또는 GET을 사용할 수 있습니다 (POST는 항상 "양식 제출"입니다). XmlHttpRequest와 일반 요청의 차이점은 일반 요청이 페이지를 새 페이지로 바꿉니다.

데이터를 가져 와서 DOM을 변경하기 위해 Ajax만을 사용하는 웹 사이트를 작성할 수 있습니다. 이것이 주로 Gmail의 작동 방식입니다. 전통적인 의미에서 "양식 제출"이 없습니다. 그러나 서버와 브라우저가 결과를 다르게 해석하기 때문에 GET과 POST가 여전히 존재합니다. GET은 멱등수 (idempotent)로되어있다. POST는 서버의 상태를 변경하는 조작을 의미합니다. 예를 들어, ecom 트랜잭션은 POST 여야합니다. 프록시 서버가 POST임을 이해하고 응답을 캐시하려고 시도해서는 안되기 때문에 Ajax를 사용할 때는 변경되지 않습니다.

또한 GET 대 POST를 사용할 때 장단점이 있습니다. 매개 변수가 숨겨져 있기 때문에 POST 결과를 북마크 할 수 없습니다. IE는 약 2000자를 지원하기 때문에 무제한 길이의 매개 변수 값을 가진 무언가를 얻을 수 없습니다.

또한 Ajax와 정상적인 제출을 사용할 때 단점이 있습니다. 결과 페이지를 북마크 할 수 없습니다 (페이지가 변경되지 않았기 때문에). 뒤로 단추가 예상대로 작동하지 않습니다. 그러나 Ajax를 사용하면 전송 된 데이터를 최소화 할 수 있으며 깜박 거리거나 새로 고치는 일없이 페이지에 편리한 업데이트 (긴 프로세스의 상태 모니터링 등)를 제공 할 수 있습니다.

요약하면 두 가지 요청 유형 인 Ajax와 전통적인 양식 제출은 모두 GET 및 POST와 함께 사용할 수 있으며 각각에 대해 장단점이 있습니다. 두 가지 유형 모두 상대방이 할 수있는 모든 것을 할 수 없으므로 가까운 미래에 믹스를 볼 수 있습니다.

2

전체 페이지를 새로 고쳐야하는 경우 게시물이 더 쉬울 것입니다.

13

보안 제한 사항으로 인해 AJAX 요청을 사용하여 일부 작업을 수행 할 수 없습니다. 예를 들어, 파일 업로드는 AJAX로 수행 할 수 없습니다.

+0

나는 그것에 대해 생각하지 않았다. 좋은 지적이다. – kemiller2002

+2

jQuery는 Ajax 요청 내에서 파일 업로드를 감지하면 iframe 및 iframe의 양식과 POST 양식을 자동으로 내부적으로 작성합니다. –

+3

그럼에도 불구하고 그것은 여전히 ​​POST입니다. 이것이 제가 지적했습니다. – Welbog

1

중요한 차별화 요소는 양식의 POST가 데이터를 보내고 서버로의 단일 왕복으로 새로운 URL로 이동할 수 있다는 것입니다. Ajax는 데이터를 보낼 수는 있지만 새 페이지로 이동할 수는 없습니다.

+0

호출 성공 후 window.location.href = xx를 사용할 수 없습니까? –

+0

@Chris, 서버를 두 번째로 왕복하는 GET가 시작됩니다. –

+0

@James 일반적으로 비 아약스 POST는 리디렉션으로 끝나야합니다. 이렇게하면 페이지를 다시로드 할 때 양식을 다시 제출하지 않아도됩니다. 이 좋은 사례를 따르면 리디렉션은 서버에 대한 두 번째 왕복입니다. –

0

어 .. 게시 양식?

게시물은 값이 HTML 헤더에 숨겨져 있고 URL 문자열에 붙어 있지 않기 때문에 큰 양식에 정말 좋습니다.

+0

Ajax 용 SOAP를 사용할 수 있습니다. –

0

이론 인 경우 HTTP GET은 정보에 대한 멱등응 요청이어야합니다. 두 개의 동일한 GET은 정확한 동일한 정보를 반환해야합니다.

HTTP POST는 상태를 유지하고 작업을 수행하기위한 것입니다. 두 개의 동일한 POST는 수행자, 수행 된 작업 및 수행중인 작업에 따라 다른 작업을 수행 할 수 있습니다.

0

나는 내 자신의 질문에 this video으로 대답 할 것입니다. 최근에 Doug Crockford가 우연히 마주 쳤습니다. 그는 모든 아약스와 모든 페이지 새로 고침 사이의 톱 톱을 설명합니다.