감사합니다..^^
박지훈.임프 님이 쓰신 글 :
: 웹의 기초부터...
: HTTP 프로토콜의 가장 기본 개념 중에 메소드라는 개념이 있습니다. 클라이언트인 브라우저가 웹서버로 뭔가 요청을 할 때, 그 요청의 종류를 분류한 것입니다. HTTP로 요청할 때 이 메소드 문자열을 가장 먼저 보냅니다. 가장 기본적인 것이 GET인데, 서버의 컨텐츠를 전송해줄 것을 요청하는 동작입니다.
:
: 예를 들면, 브라우저가 웹서버에 보내는 요청 패킷의 첫번째 라인은 다음과 같은 형식입니다.
: GET 주소 HTTP/1.1
:
: 이 GET 외에 기본 메소드들로, HEAD, POST, PUT, DELETE 등등이 있습니다. HEAD는 GET과 같은데 실제 내용이 아니라 헤더 부분만 보내달라는 요청이고요. 개념적으로 POST와 PUT이 파일 업로드를 위한 것인데...
:
: PUT은 서버의 아무런 명시적인 허용 없이 일방적으로 파일을 보내어 업로드할 수 있습니다. 그래서 보안상 대단히 위험하지요. 반면 POST는 서버의 페이지에서 허용한 일정한 제한 아래에서 파일을 보내게 되고, 그걸 파일로 저장할지 말지는 서버의 웹 애플리케이션이 판단할 기회가 있습니다.
:
: 이런 이유로, 현재 실제로 사용되는 모든! 웹 서버에는 기본 설정으로 PUT 메소드가 아예 차단되어 있습니다. 물론 웹 서버 설정에서 이 메소드의 차단을 풀 수도 있는데, 보안상 대단히 위험하지요. 자기가 관리하는 웹 서버에 아무나 파일을 맘대로 올릴 수 있으니까요. PUT을 차단하는 대신, POST를 사용합니다.
:
: 썰이 길었는데... HTTP 컴포넌트에서 파일을 업로드하려고 하면서 Put 메소드를 호출하는 코드를 보니, 이렇게 아주 대충이나마 HTTP의 기본 개념이라도 설명을 드려야 할 듯 해서요.
:
: 어쨌든.. 주저리주저리 풀어놓은 썰에도 불구하고 답은 아주 간단한데요.
: Put 메소드 대신 Post 메소드를 호출해야 한다는 것이 답입니다.
:
: 그럼...
:
:
: 선화 님이 쓰신 글 :
: : 또 질문하네요 ^^
: : Http를 이용해서 파일 업로드를 하고 싶습니다
: : (구글 검색에서 나온 소스입니다)
: : 이렇게 했을때
: :
: : Socket Error #10053
: : Software caused connection abort
: : 에러가 나네요
: : 다운로드가 잘 되는거 보면 서버에는 이상이 없는거 같은데 에러가 왜 날까요
: :
: :
: : var
: : Datei: TFileStream;
: : begin
: : if (OpenDialog1.Execute) then
: : Datei := TFileStream.Create(OpenDialog1.FileName, fmOpenRead);
: : try
: : IdHTTP1.Put('/test.zip',Datei);
: : finally
: : Datei.Free;
: : end;
: : end;
|