2012-07-04 2 views
2

누군가 "복제"하기 전에 비슷한 제목의 다른 질문을 보았고 내 특정 질문에 답변하지 않으므로 계속 읽으십시오!HTTP 동사 POST, PUT, DELETE : 이것들은 "처리"된 곳

저는 완전한 웹 개발 초심자이지만 매우 기본적인 HTTP와 HTML을 조사하기 시작했습니다. 내 배경은 RPC/SOAP 스타일 서비스 및 데스크톱 응용 프로그램입니다. 문제는 근본적인 수준의 HTTP 자체, 특히 POST, PUT 및 DELETE 동사에 대해서는 정말 혼란 스럽습니다.

GET을 사용하여 웹 서버에서 페이지를 요청하는 것을 이해할 수 있지만 실제로 다른 세 가지 동사 동작 중 하나를 수행 할 때 어떤 일이 발생하는지 이해하지 못합니다. Apache 또는 IIS에서 웹 페이지를 호스팅하고 제출 버튼이있는 웹 양식이있는 경우 아마도 양식에 기입 한 데이터가있는 POST가 전송되지만 웹 서버는 이? 웹 페이지는 어떻게 PUT과 DELETE를 사용합니까? 뭐라구? 뭐라구? 그것은 당신이 데이터베이스에 대한 액션을 수행하는 서비스에서 어떤 메소드를 호출하는 것과는 다릅니다. 나는 ASP.NET과 같은 프레임 워크가 여기에 등장한다고 생각하지만, 바닐라 HTTP/HTML에서 나는 함께 어울리는 방법을 얻지 못한다 ...

나는 정말로 여기에 뭔가 빠져있다.

+0

"다릅니다." 웹 응용 프로그램의 경우 웹 서버는 일반적으로 웹 스택 (예 : ASP.NET)에 대한 제어를 "해제"합니다. 그러나 다양한 요 청 (차단되지 않은 경우)의 경우 웹 서버는 "정적 컨텐츠"를 제공하는 데 상당히 만족할 것입니다. 종종 "맵핑"과 "핸들러"가 관련되어 있습니다. –

+0

다음 내용을 읽어보십시오. http://www.apacheweek.com/features/put –

답변

-2

PUT 및 DELETE 요청은 대부분의 표준 웹 서버에서 전혀 수행하지 않습니다. HTTP 405 (지원되지 않는 방법) 오류가 발생합니다. Javascript를 사용하지 않고도 웹 페이지에서 트리거 할 수있는 방법이 없습니다.

PUT 및 DELETE의 의미는 응용 프로그램에 달려 있습니다. PUT은 요청 된 URL에서 엔티티를 만들려고 시도하지만 DELETE를 사용하면 요청한 요소를 제거하는 것이 일반적입니다. (예를 들어 RESTful 위키에서 PUT은 페이지를 생성하고 POST 또는 PATCH는 페이지를 편집하는 데 사용되며 DELETE는이를 제거합니다.) 실제로 이러한 메소드는 일반적으로 사용되지 않습니다. GET 및 POST.

+0

"응용 프로그램"이란 말을 할 때 구체적으로 무엇을 의미합니까? "응용 프로그램"이 웹 서버 (Apache 또는 IIS)가 아닌가? 이러한 엔티티가 삽입/업데이트/삭제되어야하는 데이터베이스에 대해 웹 서버는 어떻게 알 수 있습니까? – MrLane

+0

"응용 프로그램"은 웹 서버 아래에 배포 된 웹 응용 프로그램 또는 서비스를 의미합니다. – duskwuff

0

질문 당신은 모든 서버가 POST, PUT, DELETE 방법에 반응하는 방법을 설명하는 RFC 2616에 대답하는있다. 여기에 언급되지 않은 방법을 포함하여 각 방법마다 고유 한 요구 사항과 제안 사항이 있습니다. HTTP 요청의 raw text stream을 보면 유선을 통해 전송되는 첫 번째 데이터가 HTTP 동사임을 알 수 있습니다. 서버 측에서 이러한 메소드를 구현하는 방법은 프로그래밍중인 환경에 완전히 의존합니다. 예를 들어 PHP로 사이트를 구현하는 경우 $_SERVER['REQUEST_METHOD']을 사용하여 요청 처리 방법을 결정할 수 있습니다.

0

일반적으로 IIS에서 웹 사이트 (ASP .Net MVC라고 가정 함)를 호스팅 할 때 서버 측에 대한 요청은 대부분 http 동사의 두 가지 카테고리, 즉 GET 또는 POST으로 분류됩니다. 아래에 언급 된 ASP.NET MVC 코드를 살펴보십시오. 왜

enter image description here

를 지금하자 우리는 (모든 자바 스크립트없이) 일반 바닐라 ASP .NET MVC 프레임 워크를 사용하는 경우 먼저 이해 : 컨트롤러 수준에서 비록 HTTP 동사 중 하나를 사용하여 우리의 행동을 장식 할 수있다 모든 요청은 GETPOST의 두 범주로 분류됩니다.

내 웹 사이트에서 새로운 사용자를 등록 할 책임이있는 내 웹 사이트에서보기 (일명 웹 페이지)를했다고 가정 해 봅니다.당신은 당신의 브라우저에서 레지스터보기/웹 페이지를로드하는 브라우저의 주소 표시 줄에 http://localhost:9896/Account/Register/ URL을 입력

namespace MvcTestApp.Controllers 
{ 

     // GET: /Account/Register 

     [HttpGet] 
     public ActionResult Register() 
     { 
      return View(); 
     } 

     // 
     // POST: /Account/Register 

     [HttpPost] 
     public ActionResult Register(RegisterModel model) 
     { 
      if (ModelState.IsValid) 
      { 
       // Attempt to register the user 
       try 
       { 
        WebSecurity.CreateUserAndAccount(model.UserName, model.Password); 
        WebSecurity.Login(model.UserName, model.Password); 
        return RedirectToAction("Index", "Home"); 
       } 
       catch (MembershipCreateUserException e) 
       { 
        ModelState.AddModelError("", ErrorCodeToString(e.StatusCode)); 
       } 
      } 

      // If we got this far, something failed, redisplay form 
      return View(model); 
     } 
    } 
} 

: 당신은 아래의 컨트롤러 코드를 볼 수 있습니다. 이는 웹 페이지에 대한 첫 번째 요청과 같아서 웹 페이지를 처음으로 가져 오는 동안 브라우저가 자동으로 기본값을 HttpGet 동사로 기본값으로 설정합니다. 그래서 [HttpGet] 동사 주석 방법 아래이 경우 호출됩니다 :

[HttpGet] 
    public ActionResult Register() 
    { 
     return View(); 
    } 

지금 페이지에 내가 등록에 관련된 모든 세부 정보를 입력 한 후에 내가 등록 절차를 시작합니다 버튼을했습니다. 당신은 웹 페이지의 소스를 보면 당신은 버튼에 대한 HTML 코드 아래 참조 :

<input type="submit" value="Register" /> 

때마다 당신이 submit 간단한 작업이의 업데이트 된 내용을 제출/게시하는 것입니다 형식의 HTML 컨트롤을 클릭 현재 페이지를 서버에 보냅니다. 서버 측 요청을 수행하는 input html 컨트롤을 포함하여 모든 html 컨트롤은 브라우저를 통해 HttpPost 동사 요청 만 할 수 있습니다. 정확하게 동일한 URL에 대한 서버에 대한 동사 요청은 httpPost이므로 아래에 언급 된 방법으로 HttpPost이라는 문자가 붙습니다. ASP.Net 런타임은 실제로 HTTP POST 요청하는 클라이언트 요청에서이 정보를 획득하고, 따라서 [HttpPost] 주석 갖는 컨트롤러에서 아래의 방법을 호출하기로 결정 : 따라서 한 당신이로

[HttpPost] 
[AllowAnonymous] 
[ValidateAntiForgeryToken] 
public ActionResult Register(RegisterModel model) 
{ 
    if (ModelState.IsValid) 
    { 
    ..... 
    ..... 
} 

을 귀하의보기/웹 페이지에 자바 스크립트를 사용하지 않고 궁극적으로 http get (처음) 요청 또는 http post (HTML 제출 컨트롤 사용) 요청을합니다.

CRUD 작업 중 Create 및 Update/Modify 작업은 [HttpPost]으로 주석 된 동일한 방법으로 처리됩니다.

  1. 엔드 포인트는 멱등해야합니다 : 그래서 안전 또 다시 요청을 다시 실행 조건 아래 두 가지가 만족 될 때

    HTTP 넣어 동사는 자원을 생성/대체하는 데 사용됩니다.

  2. URI는 업데이트 할 리소스의 주소 여야합니다.

put 대 게시물 here에 대한 자세한 내용을 볼 수 있습니다.

서버 측 비즈니스 시나리오에서 HTTP put verb와 관련된 제약 조건을 관리 할 수 ​​있다면 ASP.NET MVC는이를위한 조항을 가지고 있습니다. 컨트롤러 내부에서 액션을 만들고 [HttpPut]으로 꾸며서 브라우저에서 http put 동사를 사용하여 호출 할 수 있습니다.

글쎄, 어떤 시나리오에서 put verb로 정한 기준을 만족시키는 경우에도 HTTP 제출 버튼을 사용하여 호출 할 수 없습니다.

$.ajax({ 
    url: '/Account/Register', 
    type: 'PUT', 
    success: function(result) { 
     // Do something with the result 
    } 
}); 

또한, HTTP의 사용 I 명시 적으로에 정의 된 작용을 갖는 사람을 참조했습니다 동사를 삭제 주위 : 아래 그림과 같이 당신은 자바 스크립트 XMLHttpRequest의에 의지해야 할 것이다 넣어 동사 호출을 할 (즉, AJAX 호출) MVC 컨트롤러 예 void DeleteUser(int userId) 이것은 http POST 동사를 사용하여 호출됩니다.

요약하면 http PUT, POST 및 DELETE verb의 경우 http POST 동사를 사용하여 호출되는 서버 측에서 작업/메소드 만 있습니다. [HttpPut] 또는 [HttpDelete]으로 내 MVC 작업을 꾸미려고하는 일반적인 비즈니스 응용 프로그램에서 시나리오를 발견하지 못했습니다.

희망 사항을 통해 도움이됩니다.

관련 문제