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-urlencoded
application/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
:
application/x-www-form-urlencoded
multipart/form-data
(스펙은 RFC7578을 참조)- 이것은 「컴퓨터로 확실히 해석할 수 없다」라고 하는 것이므로, 생산에는 절대로 사용하지 말아 주세요.더 이상 검토하지 않겠습니다
text/plain
.
예시를 생성하는 방법
각 방법의 예를 보면, 각 방법의 동작과 각각의 사용 타이밍이 명확해집니다.
다음의 방법으로 예를 작성할 수 있습니다.
nc -l
또는 ECHO 서버: GET/POST 요구를 받아들이는HTTP 테스트서버- 브라우저 또는 cURL과 같은 사용자 에이전트
로 저장합니다..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ω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ωb
즉,aωb
ω
U+03C9
수61 CF 89 62
UTF-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,nc
BSD 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ωb
UTF-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-sequencesContent-Type
이치노
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
'programing' 카테고리의 다른 글
Grep - f와 동등한 PowerShell (0) | 2023.04.08 |
---|---|
PowerShell 'profile.ps1' 파일에는 무엇이 있습니까? (0) | 2023.04.08 |
특정 폴더에서 Cygwin 열기 (0) | 2023.04.08 |
CSS만을 사용하여 링크를 디세블로 하는 방법 (0) | 2023.04.08 |
BOM을 사용하지 않고 PowerShell을 사용하여 UTF-8에 파일 쓰기 (0) | 2023.04.08 |