programing

enctpe='art/form-data'는 무엇을 의미합니까?

powerit 2023. 4. 8. 09:54
반응형

enctpe='art/form-data'는 무엇을 의미합니까?

무인 does does 가 뭐죠?enctype='multipart/form-data'HTML 형 html html html html html html html html html html html html?

POST 요청을 작성할 때는 요청 본문을 구성하는 데이터를 부호화해야 합니다.

HTML 폼은 3가지 인코딩 방법을 제공합니다.

  • application/x-www-form-urlencoded디폴트)
  • multipart/form-data
  • text/plain

추가 작업이 진행 중이었지만, 그것은 포기되었습니다.

(HTML 폼의 송신 이외의 방법으로 생성된HTTP 요구에 의해서, 그 외의 인코딩이 가능합니다.JSON은 웹 서비스에서 사용하는 일반적인 형식이며 일부에서는 SOAP을 사용합니다.)

대부분의 개발자들에게 포맷의 세부 사항은 중요하지 않습니다.중요한 점은 다음과 같습니다.

  • 사용하지 .text/plain.

클라이언트측 코드를 작성하는 경우:

  • multipart/form-data에 임의의 ""가 되어 있는 <input type="file">
  • 이외의 경우는, 「」를 사용할 수 .multipart/form-data ★★★★★★★★★★★★★★★★★」application/x-www-form-urlencodedapplication/x-www-form-urlencoded 효율적일

서버측 코드를 쓰는 경우:

  • 미리 작성된 양식 처리 라이브러리 사용

의 "Perl" 등)CGI->param의 PHP에 것$_POST을 위해 차이를 합니다.superglobal)서버가 수신한 미가공 입력을 구문 분석할 필요가 없습니다.

두 형식을 모두 처리할 수 없는 라이브러리가 있을 수 있습니다.Node.js에서 폼 데이터를 처리하는 가장 일반적인 라이브러리는 멀티파트 요청을 처리할 수 없는 본문 파서입니다(다만, 가능한 몇 가지 대안을 권장하는 문서가 있습니다).


원시 데이터를 해석하거나 생성하기 위해 라이브러리를 작성(또는 디버깅)하는 경우 형식에 대해 고려해야 합니다.흥미를 위해 그것에 대해 알고 싶을 수도 있다.

application/x-www-form-urlencoded합니다.

multipart/form-data훨씬 더 복잡하지만 전체 파일을 데이터에 포함할 수 있습니다.결과의 예는 HTML 4 사양에서 찾을 수 있습니다.

text/plain는 HTML 5에 의해 도입되어 디버깅에만 도움이 됩니다.스펙은 다음과 같습니다.컴퓨터에서는 신뢰성 있게 해석할 수 없습니다.또한 툴과 조합된 툴(대부분의 브라우저 개발자 툴의 네트워크 패널 등)이 더 좋다고 생각합니다.

우리는 그것을 언제 사용해야 할까요?

Quentin의 대답은 옳다: 사용multipart/form-data되어 있는 및 「」가 포함되어 있는 경우는,application/x-www-form-urlencoded 않으면.enctype.

다음 작업을 수행합니다.

  • HTML5 참조 추가
  • 양식을 제출하여 그가 옳은 이유를 설명하다.

HTML5 레퍼런스

에는 세 가지 가능성이 있습니다.enctype:

예시를 생성하는 방법

각 방법의 예를 보면, 각 방법의 동작과 각각의 사용 타이밍이 명확해집니다.

다음의 방법으로 예를 작성할 수 있습니다.

로 저장합니다..html 삭제:

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="utf-8"/>
  <title>upload</title>
</head>
<body>
<form action="http://localhost:8000" method="post" enctype="multipart/form-data">
  <p><input type="text" name="text1" value="text default">
  <p><input type="text" name="text2" value="a&#x03C9;b">
  <p><input type="file" name="file1">
  <p><input type="file" name="file2">
  <p><input type="file" name="file3">
  <p><button type="submit">Submit</button>
</form>
</body>
</html>

은 '어울리다'로 설정되어 .a&#x03C9;b즉,aωbωU+03C961 CF 89 62UTF-8을 사용

업로드할 파일 만들기:

echo 'Content of a.txt.' > a.txt

echo '<!DOCTYPE html><title>Content of a.html.</title>' > a.html

# Binary file containing 4 bytes: 'a', 1, 2 and 'b'.
printf 'a\xCF\x89b' > binary

작은 에코 서버를 실행합니다.

while true; do printf '' | nc -l localhost 8000; done

브라우저에서 HTML을 열고 파일을 선택한 후 [Submit]를 클릭하여 단말기를 확인합니다.

nc는 수신한 요구를 인쇄합니다.

대상: 스스 ub: Ubuntu 14.04.3,ncBSD 1.15, Firefox 40

멀티파트/폼 데이터

Firefox 전송:

POST / HTTP/1.1
[[ Less interesting headers ... ]]
Content-Type: multipart/form-data; boundary=---------------------------735323031399963166993862150
Content-Length: 834

-----------------------------735323031399963166993862150
Content-Disposition: form-data; name="text1"

text default
-----------------------------735323031399963166993862150
Content-Disposition: form-data; name="text2"

aωb
-----------------------------735323031399963166993862150
Content-Disposition: form-data; name="file1"; filename="a.txt"
Content-Type: text/plain

Content of a.txt.

-----------------------------735323031399963166993862150
Content-Disposition: form-data; name="file2"; filename="a.html"
Content-Type: text/html

<!DOCTYPE html><title>Content of a.html.</title>

-----------------------------735323031399963166993862150
Content-Disposition: form-data; name="file3"; filename="binary"
Content-Type: application/octet-stream

aωb
-----------------------------735323031399963166993862150--

의 경우 는 " " " 입니다.61 CF 89 62 )aωbUTF-8)에 의한 것입니다.하려면 , 을 사용합니다.nc -l localhost 8000 | hd 바이트 ,, 바, 바, 바, 바, 바, 바, 습, 습, 습, 습, 습, 습, 습, ,이다.

61 CF 89 62

61' 및 == 'a' 및62== 'b').

따라서 다음 사항이 명확합니다.

  • Content-Type: multipart/form-data; boundary=---------------------------735323031399963166993862150는, 컨텐츠의 을 「알겠습니다」로 합니다.multipart/form-data '는 주어진 '고.boundary스트링

    단, 다음 점에 주의해 주십시오.

    boundary=---------------------------735323031399963166993862150
    

    --

    -----------------------------735323031399963166993862150
    

    는 두 의 대시로 입니다.--다른 대시는 Firefox가 임의의 경계를 구현하기 위해 선택한 방법인 것 같습니다.RFC 7578에서는 이들 2개의 선두 대시가--수수: :

    4.1. 멀티파트/폼 데이터의 "경계" 파라미터

    다른 멀티파트 유형과 마찬가지로 부품은 CRLF, "--" 및 "boundary" 매개 변수 값으로 구분됩니다.

  • 앞에 .Content-Disposition: form-data;, " " "name , . . . . . . . .filename, 그 다음에 데이터가 표시됩니다.

    서버는 다음 경계 문자열까지 데이터를 읽습니다.브라우저는 어느 필드에도 표시되지 않는 경계를 선택해야 합니다.따라서 요청 간에 경계가 다를 수 있습니다.

    고유한 경계가 있기 때문에 데이터를 인코딩할 필요가 없습니다. 바이너리 데이터는 그대로 전송됩니다.

    크기TODO: 적 size size ( ( ( ( ( ()log(N)그 알고리즘의 이름/실행 시간 등)을 확인합니다.문의처: https://cs.stackexchange.com/questions/39687/find-the-shortest-sequence-that-is-not-a-sub-sequence-of-a-set-of-sequences

  • Content-Type이치노

    정확한 판별 방법: 업로드된 파일의 MIME 유형은 브라우저에서 어떻게 판별됩니까?

application/x-www-form-urlencoded

, 그럼 이번에는 '먹다', '먹다', '먹다', '먹다', 이렇게 .enctype로로 합니다.application/x-www-form-urlencoded브라우저를 새로고침하고 다시 전송합니다.

Firefox 전송:

POST / HTTP/1.1
[[ Less interesting headers ... ]]
Content-Type: application/x-www-form-urlencoded
Content-Length: 51

text1=text+default&text2=a%CF%89b&file1=a.txt&file2=a.html&file3=binary

파일 데이터는 전송되지 않고 기본 이름만 전송되었습니다.그래서 파일에는 사용할 수 없습니다.

에서는 보통 나오는데요.a ★★★★★★★★★★★★★★★★★」b되었지만, 1바이트로 할 수 것은 1바이트로 전송되었습니다.0xCF ★★★★★★★★★★★★★★★★★」0x89각각 3바이트를 차지했습니다.%CF%89!

비교

파일 업로드에는 많은 경우 인쇄할 수 없는 문자(예: 이미지)가 포함되지만 텍스트 형식에는 거의 포함되지 않습니다.

예를 들어 다음과 같은 것을 알 수 있습니다.

  • multipart/form-data: 몇 바이트의 경계 오버헤드를 메시지에 추가하여 계산하는데 시간이 좀 걸리지만 각 바이트를 1바이트로 전송합니다.

  • application/x-www-form-urlencoded(: "1")가 &인쇄 불가능한 문자마다 3배선형 오버헤드 계수를 추가합니다.

때문에 을 보낼 수 , 을 보낼 수 .application/x-www-form-urlencoded비효율적이기 때문에 우리는 원하지 않을 것이다.

그러나 텍스트 필드에 있는 인쇄 가능한 문자의 경우 문제가 되지 않고 오버헤드가 줄어들기 때문에 그냥 사용합니다.

enctype='multipart/form-data는, POST 를 개입시켜 파일을 송신할 수 있는 부호화 타입입니다.간단하게는, 이 부호화가 없으면, POST 를 개입시켜 파일을 송신할 수 없습니다.

사용자가 양식을 통해 파일을 업로드할 수 있도록 허용하려면 이 enctype을 사용해야 합니다.

양식을 제출할 때 브라우저에 HTTP 프로토콜을 통해 TCP/IP 프로토콜 메시지 구조에 올바르게 포함된 메시지를 전송하도록 지시합니다.를 사용해 하는 방법이 있습니다.<form>s.

양식을 제출하면 HTTP 요청이 생성되어 서버로 전송됩니다. 메시지에는 양식의 필드 이름 및 사용자가 입력한 값이 포함됩니다.이 전송은, 다음과 같이 행해집니다.POST ★★★★★★★★★★★★★★★★★」GET HTTP 메서드

  • POST 는 브라우저에 HTTP 메시지를 작성하고 모든 콘텐츠를 메시지 본문에 포함하도록 지시합니다(매우 유용한 작업 방법, 보다 안전하고 유연합니다).
  • GET 는 쿼리 문자열에 폼 데이터를 전송합니다.데이터 표현 및 길이에 대한 몇 가지 제약이 있습니다.

서버로 양식 발송 방법 설명

★★★★★★★★★★★★★★★★★」enctype has has hasPOST방법.지정하면 브라우저가 특정 방법으로 내용을 인코딩하여 양식을 전송하도록 지시합니다.MDN - 양식 입력:

메서드 속성 값이 post인 경우, enctpe는 양식을 서버에 제출하는 데 사용되는 내용의 MIME 유형입니다.

  • application/x-www-form-urlencoded: 이것이 기본값입니다.폼이 전송되면 모든 이름과 값이 수집되고 마지막 문자열에서 URL 인코딩이 수행됩니다.
  • multipart/form-data: : : : : : : : : : : : : 。이것은 양식에 파일 업로드 제어가 있는 경우에 중요합니다.파일 바이너리를 송신하면 비트스트림이 변경되지 않습니다.
  • text/plain: 공간은 변환되지만 인코딩은 더 이상 수행되지 않습니다.

보안.

양식을 제출할 때 RFC 7578 섹션7: Multipart 폼 데이터 - 보안에 관한 고려사항에 따라 몇 가지 보안상의 문제가 발생할 수 있습니다.

폼 는 사용자 폼 .
개인 가 포함되어 있는
에서는 " 기능을 하여 사용자가 "Auto-fill"을 "Auto-fill"로 속일 수 .이러한 기능은 사용자를 속이기 위해 사용될 수 있습니다.
완료 시 자신도 를 전송한다.
한 태스크을 제공하지 .멀티 파트/폼 데이터는 기능을 제공하지 않습니다.
, 확보, , 사용자 보호, 사용자 보호, 사용자 보호
보안 기능.는 '경계'로 합니다.
양식 작성 및 양식 데이터 전송 애플리케이션에 의해 해결됩니다.

양식을 수신하여 처리하는 응용 프로그램은 전송이 의도되지 않은 요청 양식 처리 사이트에 데이터를 다시 제공하지 않도록 주의해야 합니다.

합니다.
[ Disposition header ][ header ]의 로 덮어쓰지
츠요시

사용자가 개발자인 경우 서버가 사용자가 제출한 양식을 처리하여 중요한 정보를 포함할 수 있는지 여부를 고려해야 합니다.

enctype='multipart/form-data' 할 때 이합니다.그렇기 때문에 서버에 파일을 업로드 할 때 이 타입이 사용됩니다.
★★★★★★★★★★★★★★★★★.multipart/form-data등데이터를 해야 하는 때 합니다.

폼을 사용하여 파일 내용을 URL 파라미터에 넣을 수 없으므로 메서드 속성을 POST로 설정합니다.

데이터가 여러 부분으로 분할되므로 enctpe 값을 multipart/form-data로 설정합니다. 각 파일에 하나씩 더하고 함께 보낼 수 있는 양식 본문의 텍스트에 하나씩 더합니다.

  • enctpe(ENCode TYPE) 속성은 폼 데이터를 서버에 제출할 때 인코딩하는 방법을 지정합니다.
  • multipart/form-data는 파일 업로드가 있는 양식 요소에 사용되는 enctype 속성 값 중 하나입니다. multipart는 양식 데이터가 여러 부분으로 분할되어 서버로 전송됨을 의미합니다.

통상, 이것은, 파일 업로드를 데이터로 할 필요가 있는 POST 폼이 있는 경우입니다.전송되는 데이터의 부호화 방법을 서버에 통지합니다.이 경우, 이미지나 PDF를 업로드 할 때와 같이, 파일을 전송해 서버에 업로드 할 뿐이기 때문에 부호화되지 않습니다.

enctpe 속성은 양식 데이터를 서버에 제출할 때 인코딩하는 방법을 지정합니다.

enctpe 속성은 method="post"인 경우에만 사용할 수 있습니다.

인코딩된 문자는 없습니다.이 값은 파일 업로드 제어가 있는 양식을 사용하는 경우 필요합니다.

W3 Schools에서

언급URL : https://stackoverflow.com/questions/4526273/what-does-enctype-multipart-form-data-mean

반응형