Delphi Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
델파이 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
FreePascal/Lazarus
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
델마당
볼랜드포럼 광고 모집

델파이 Q&A
Delphi Programming Q&A
[11709] Re:HTTP로 파일 업로드
박지훈.임프 [cbuilder] 4016 읽음    2008-01-24 10:13
웹의 기초부터...
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;

+ -

관련 글 리스트
11706 HTTP로 파일 업로드 선화 1969 2008/01/23
11709     Re:HTTP로 파일 업로드 박지훈.임프 4016 2008/01/24
11710         Re:Re:HTTP로 파일 업로드 우담화 2331 2008/01/24
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.