2011-12-28 3 views
3

간단히 말해, 사용자로 등록하고 데이터를 추가 할 수있는 웹 사이트가 있습니다. 현재는 특정 데이터를 한 번만 추가하는 것만으로도 멱등수가되어야하지만 이론적으로 동일한 데이터를 여러 번 추가 할 수 있습니다. 나는 여기에 들어 가지 않을 것이다.멱등 원이 아닌 요청에 GET 사용

RFC 2616에 따르면 GET 요청은 멱등 원이어야합니다 (실제로 무효화 가능). 사용자가 방문과 같은 작업을 수행 할 수 있기를 바랍니다.

http://example.com/<username>/add/?data=1 

그리고이 데이터가 추가됩니다. PUT 요청에 REST를 사용하여이 작업을 수행하는 것은 당연한 일이지만 브라우저로 PUT 요청을하는 방법을 모르고 있으며 대부분의 사람들이 수행하거나 걱정하고 싶지 않을 것입니다. 심지어 POST를 사용하는 것이 적절할 수도 있지만 비슷한 문제가 있습니다.

사용자가 GET 만 사용하여 데이터를 추가 할 수 있도록 기술적으로 올바른 방법이 있습니까 (예 : 링크를 수동으로 방문하거나 외부 웹 사이트에서 링크를 사용하도록 허용). 그들이이 페이지를 방문 할 때 javascript 나 cURL로 POST/PUT 요청을 할 수도 있지만 여전히 멱등하지 않은 GET 요청의 정신을 위반하는 것 같습니다.

답변

4

을 사용하여 사용자가 데이터를 추가하도록 기술적으로 올바른 방법이 있습니까? ...?

클라이언트의 액세스 허용 여부에 관계없이 결국 RFC2616을 위반하게됩니다. 궁극적으로 요청을 처리하는 방법은 사용자의 선택에 달려 있지만 HTTP 사양을 무시하면 클라이언트와 프록시에 예기치 않은 부작용이 발생할 수 있습니다. 을 수행하는 사람은을 준수해야합니다. 그것.

또한 참조 : Why shouldn't data be modified on an HTTP GET request?


는 지금까지와 같은 브라우저에서 PUT 할 수없는, POST를 사용하지만 _method의 일종을 통과 대부분의 [1]에 대한 해결, [2],가 요청 매개 변수는 서버에 의해 차단되어 적절한 서버 측 작업으로 라우팅됩니다.

+0

다른 말로하면 나는 단지 이것을해서는 안된다. –

+3

@ tandu - 사양 (따라서 I)은 사용자가하지 말아야한다고 말합니다. 그러나 HTTP 경찰은 당신이 사양을 따르지 않는다면 당신의 문을 두드리지 않을 것입니다 (나는 어쨌든 그럴 것이라고 생각하지 않습니다). 그것을 할 때 일어날 수있는 결과에 유의하십시오. –