HTTP/1.1 프로토콜에 지정된 HTTP 요청 방법은 옵션, get, head, post, put, delete, trace, connect입니다. 그 중에서 포스트는 일반적으로 데이터를 서버에 제출하는 데 사용됩니다.
HTTP 프로토콜은 ASCII 코드와 TCP/IP 프로토콜을 기반으로 한 애플리케이션 계층 사양에 의해 전송된다는 것을 알고 있습니다. 사양은 HTTP 요청을 State Line, Request Head 및 메시지 주제의 세 부분으로 나눕니다. 다음과 유사합니다.
<emod> <repkest-url> <vision> <headers> <entity-body> </entity-body> </headers> </version> </request-url> </metho </method> </method > </method>
계약은 게시물에 의해 제출 된 데이터가 엔티티-바디에 배치되어야한다고 규정하지만 계약은 데이터를 사용해야 할 내용을 지정하지 않습니다. 실제로 개발자는 메시지 주제의 형식을 스스로 결정할 수 있습니다.
그러나 데이터가 전송되면 서버에서 성공하는 것이 의미가 있습니다. Java 및 그 프레임 워크와 같은 일반 서버 언어는 일반적인 데이터 형식의 자동 분석 기능을 구축했습니다. 서버는 일반적으로 요청 헤드의 컨텐츠 유형 필드에서 학습되어 요청에있는 메시지 주제가 어떻게 인코딩 된 방법을 배우고, 주제를 분석합니다. 따라서 제출 된 데이터 체계를 게시 할 때 컨텐츠 유형 및 메시지 주제 코딩의 두 부분이 포함되어 있습니다. 다음은 그들에 대한 공식 소개입니다.
Application/x-www-form-urlencoded이것은 데이터를 제출하는 가장 일반적인 방법이어야합니다. 브라우저의 기본 양식 형식 인 경우 ENCTYPE 속성이 설정되지 않은 경우 Application/X-www-Form-urlencoded로 데이터를 제출합니다. 요청은 다음과 유사합니다 (이 기사에서는 관련없는 요청 헤더가 생략 됨) :
http://www.example.com http/1.1content-type : application/x-www-forlem-urlencoded = utf-8tital = test & sub%5d 5d = 2 & sub%; 5B%5D = 3
우선, 컨텐츠 유형은 Application/X-WWW- urlencoded로 지정되고, 제출 된 데이터는 key1 = value & key2 = value에 따라 인코딩되고 Val은 URL 변환을 수행합니다. 대부분의 서버 언어는이 방법을 잘 지원합니다. 예를 들어, php에서 post [ 'title']는 tity의 값을 얻을 수 있습니다.
여러 번 Ajax로 데이터를 제출할 때이 방법도 사용합니다. 예를 들어, 컨텐츠 유형의 기본값 인 JQuery의 Ajax는 "Application/x-www-form-urlencoded; charset = utf-8"입니다.
멀티 파트/형태-데이터이것은 데이터를 게시하는 또 다른 일반적인 방법입니다. 양식으로 파일을 업로드 할 때 양식의 Enctyped를이 값과 동일하게 만들어야합니다. 요청 예제로 직접 오십시오.
Post http://www.example.com http/1.1content-type : webkitforemboundrgkcby7qhfd3trwa ---- --- webKitFormBertaryRGKCBY7QHFD3TRWACONTENT-DISPOSION : FORMANMAME = Chrome.pngContent-Type ... chrome.png ...----------------------------
이 예는 약간 복잡합니다. 우선, 경계는 텍스트를 반복하지 않기 위해 다른 필드를 나누는 데 사용됩니다. 그런 다음 컨텐츠 유형은 데이터가 Mutipart/Form-Data에 의해 인코딩됨을 나타냅니다. 이번에는 요청 된 경계가 무엇입니까? 메시지 주제는 섹션 수에 따라 유사한 구조로 나뉘어져 있으며, 내용 설명 정보는 다음과 같습니다. ). 파일이 전송되면 파일 이름과 파일 유형 정보도 포함됩니다. 메시지 주제는 마침내 -Boundary-로 끝났습니다. Mutipart/Form-Data의 자세한 정의는 RFC1867로 이동하여 보려면보십시오.
이 방법은 일반적으로 파일을 업로드하는 데 사용되며 주요 서버 언어도 잘 지원합니다.
위에서 언급 한 두 가지 게시물 방법은 브라우저에 대한 기본 지원이며, 기본 형식은이 단계 에서이 두 가지 방법 만 지원합니다. 그러나 점점 더 많은 웹 사이트, 특히 WebApp이 모두 데이터 상호 작용에 AJAX를 사용하므로 새로운 데이터 제출 방법을 완전히 정의하여 개발에 더 편리하게 제공 할 수 있습니다.
응용 프로그램/JSON컨텐츠 유형 인 Application/JSON은 응답 헤더에 익숙하지 않습니다. 실제로, 점점 더 많은 사람들이 이제 본체가 직렬화 된 JSON 문자열임을 서버 메시지에 알리기 위해 요청 헤드로 사용합니다. JSON 사양의 인기로 인해 낮은 버전 IE를 제외한 주요 브라우저는 JSON.stringify가 기본적이며 서버 언어는 JSON을 다루는 기능도 가지고 있으며 JSON은 문제가되지 않습니다.
JSON 형식은 키 값보다 더 복잡한 구조 데이터를 지원하므로 유용합니다. 몇 년 전에 프로젝트를했을 때 제출해야 할 데이터 수준은 매우 깊었습니다. 그러나 당시에는 JSON 문자열을 값으로 사용했으며 여전히 키 값 쌍에 넣고 X-WWW- 형태로 제출되었습니다.
Google의 AngularJS의 Ajax 기능은 기본적으로 JSON 문자열을 제출하는 것입니다. 예를 들어 다음 코드 :
var data = { 'title': 'test', 'sub': [1,2,3]};최종 요청은 다음과 같습니다.
Post http://www.example.com http/1.1content-type : application/json = utf-8 {title, sub : [1,2,3]}이 체계는 복잡한 구조화 된 데이터를 쉽게 제출할 수 있습니다. 특히 편안한 인터페이스에 적합합니다. Chrome의 자체 개발자 도구, Firebug 및 Fiddler와 같은 주요 포장 도구는 트리 구조로 JSON 데이터를 표시합니다. 그러나 예를 들어이 방법을 지원하지 않은 서버 -사이드 언어도 있습니다. 현재 직접 처리해야합니다. Content-Type가 요청 헤더에서 Application/JSON 인 경우 Php : // Input에서 원래 입력 스트림을 얻은 다음 JSON_DECODE에서 원래 입력 스트림을 얻습니다. 일부 Java 프레임 워크가 시작되었습니다.
물론 AngularJS는 x-www-form-urlencoded로 데이터를 제출하도록 구성 할 수도 있습니다.
텍스트/xmlXML-RPC (XML 원격 절차 호출). HTTP를 전송 프로토콜로 사용하고 XML을 인코딩 방법으로 사용하는 원격 통화 사양입니다. 일반적인 XML-RPC 요청은 다음과 같습니다. http://www.example.com http/1.1content-type : text/xml <!->-> <mthodcall> <mthodname> 예제 < /methodname> <params> <params> <value> <i4> 41 </i4> </value> </params> </methodcall>
XML-RPC 프로토콜은 간단하고 기능으로 가득 차 있으며 다양한 언어의 구현을 사용할 수 있습니다. WordPress의 XML-RPC API, 검색 엔진의 핑 서비스 등과 같이 널리 사용됩니다. JavaScript에는 기존 XML-RPC 서비스를 지원할 수있는 데이터 상호 작용을 지원하기위한 기성품 라이브러리도 있습니다. 그러나 개인적으로 XML 구조가 여전히 너무 부풀어 오르면 JSON이 더 유연하고 편리합니다.