HttpRequest 에서 흔히 볼 수 있 는 네 가지 Content-Type

15378 단어 request
원문:[http://www.aikaiyuan.com/6324.html]
HTTP/1.1 프로 토 콜규정된 HTTP 요청 방법 은 OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT 등 몇 가지 가 있다.그 중에서 POST 는 일반적으로 서버 에 데 이 터 를 제출 하 는데 본 고 는 주로 POST 가 데 이 터 를 제출 하 는 몇 가지 방식 을 토론 한다.
HTTP 프로 토 콜 은 ASCII 코드 로 전송 되 고 TCP/IP 프로 토 콜 위 에 세 워 진 응용 층 규범 임 을 알 고 있 습 니 다.HTTP 요청 을 세 부분 으로 나 누 는 것 을 규범화 합 니 다.상태 줄,요청 헤더,메시지 주체 입 니 다.다음 과 같다.<method> <request-URL> <version> <headers> <entity-body>프로 토 콜 은 POST 가 제출 한 데 이 터 를 메시지 주체(entity-body)에 넣 어야 한다 고 규정 하고 있 지만,프로 토 콜 은 데이터 가 어떤 인 코딩 방식 을 사용 해 야 하 는 지 규정 하지 않 았 다.실제로 개발 자 는 메시지 주체 의 형식 을 스스로 결정 할 수 있 으 며 마지막 으로 보 낸 HTTP 요청 이 위의 형식 을 만족 시 키 기만 하면 된다.
하지만 데 이 터 를 보 내 려 면 서버 에서 분석 에 성공 해 야 의미 가 있다.일반 서버 언어php,python등 과 그들의 framework 는 흔히 볼 수 있 는 데이터 형식 을 자동 으로 분석 하 는 기능 을 내장 하고 있다.서버 는 요청 헤더headers)의 Content-type 필드 에 따라 요청 한 메시지 주체 가 어떤 방식 으로 인 코딩 되 었 는 지 알 고 주 체 를 분석 합 니 다.그래서 POST 제출 데이터 방안 은 Content-Type 과 메시지 주체 인 코딩 방식 두 부분 을 포함한다.본 격 적 으로 소개 하 겠 습 니 다.
application/x-www-form-urlencoded
이것 은 아마도 가장 흔히 볼 수 있 는 POST 가 데 이 터 를 제출 하 는 방식 일 것 이다.브 라 우 저의 네 이 티 브 form 폼 입 니 다.enctype 속성 을 설정 하지 않 으 면 최종 적 으로 application/x-ww-form-urlencoded 방식 으로 데 이 터 를 제출 합 니 다.요청 은 다음 과 같 습 니 다.POST http://www.example.com HTTP1.1 Content-Type: application/x-www-form-urlencoded;charset=utf-8 title=test&sub=1&sub=2&sub=3우선,Content-Type 은 application/x-www-form-urlencoded 로 지정 되 었 습 니 다.그 다음 에 제출 한 데 이 터 는 key 1=val 1&key 2=val 2 방식 으로 인 코딩 되 었 고 key 와 val 은 모두 URL 코드 를 바 꾸 었 다.대부분의서버언어 는 이런 방식 에 대해 좋 은 지 지 를 가지 고 있다.예 를 들 어 PHP 에서$POST['title']title 의 값 을 획득 할 수 있 습 니 다,$POST[sub]는 sub 배열 을 얻 을 수 있 습 니 다.
우리 가 Ajax 로 데 이 터 를 제출 할 때 도 이런 방식 을 사용 하 는 경우 가 많다.예컨대  JQuery  화해시키다  QWrap  의 Ajax,Content-Type 의 기본 값 은 모두"application/x-ww-form-urlencoded"입 니 다.charset=utf-8」。
multipart/form-data
이것 은 또 흔히 볼 수 있 는 POST 데이터 제출 방식 이다.폼 을 사용 하여 파일 을 업로드 할 때 form 의 enctyped 를 이 값 과 같 게 해 야 합 니 다.요청 예제 직접 보기:POST http: //www .example.com HTTP /1 .1 Content-Type:multipart /form-data ; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA ------WebKitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition: form-data; name= "text" title ------WebKitFormBoundaryrGKCBY7qhFd3TrwA Content-Disposition: form-data; name= "file" ; filename= "chrome.png" Content-Type: image /png PNG ... content of chrome.png ... ------WebKitFormBoundaryrGKCBY7qhFd3TrwA--이 예 는 좀 복잡 하 다.먼저 서로 다른 필드 를 분할 하 는 데 사용 되 는 boundary 를 만 들 었 습 니 다.본문 내용 과 중복 되 지 않도록 boundary 는 길 고 복잡 합 니 다.그리고 Content-type 에 서 는 데이터 가 mutipat/form-data로 인 코딩 되 었 으 며,이번 요청 의 boundary 는 어떤 내용 인지 밝 혔 다.메시지 주체 에 서 는 필드 개수 에 따라 여러 구조 가 유사 한 부분 으로 나 뉘 는데 각 부분 은–boundary 로 시작 하여 내용 에 따라 정 보 를 설명 한 다음 에 리 턴 하고 마지막 으로 필드 의 구체 적 인 내용(텍스트 또는 바 이 너 리)입 니 다.파일 을 전송 했다 면 파일 이름과 파일 형식 정 보 를 포함 해 야 합 니 다.메시지 주 체 는 마지막 으로–boundary–표시 로 끝 납 니 다.mutipat/form-data 에 대한 자세 한 정 의 는 바로 가 십시오.  rfc1867  살펴보다
이런 방식 은 일반적으로 파일 을 업로드 하 는 데 사용 되 는데,각 서버 언어 도 그것 에 대해 좋 은 지 지 를 가지 고 있다.
위 에서 언급 한 이 두 가지 POST 데이터 의 방식 은 모두 브 라 우 저 원생 이 지원 하 는 것 이 고 현 단계 원생 form 폼이 두 가지 방식 만 지원 합 니 다.도 있다.그러나 점점 더 많은 웹 사이트,특히 WebApp 에 따라 모두 Ajax 를 사용 하여 데이터 상호작용 을 한 후에 우 리 는 새로운 데이터 제출 방식 을 정의 하여 개발 에 더 많은 편 의 를 가 져 다 줄 수 있다.
application/json
application/json 이라는 Content-Type 은 응답 헤드 로 서 낯 설 지 않 을 것 입 니 다.실제로 이 를 요청 헤더 로서버메시지 주체 가 직렬 화 된 JSON 문자열 임 을 알려 주 는 사람들 이 늘 고 있다.JSON 규범 의 유행 으로 저 버 전 IE 를 제외 한 각 브 라 우 저 는 JSON.stringify 를 원생 지원 하고 서버 언어 도 JSON 을 처리 하 는함수.가 있어 JSON 을 사용 하 는 데 어려움 을 겪 지 않 습 니 다.
JSON 형식 은 키 보다 훨씬 복잡 한 구조 화 된 데 이 터 를 지원 한 다 는 점도 유용 하 다.제 가 몇 년 전에 프로젝트 를 했 을 때 제출 해 야 할 데이터 차원 이 매우 깊 었 던 것 을 기억 합 니 다.저 는 데이터 JSON 을 서열 화 한 후에 제출 한 것 입 니 다.그러나 당시 에 나 는 JSON 문자열 을 val 로 하고 키 쌍 에 넣 어 x-ww-form-urlencoded 방식 으로 제출 했다.
구 글  AngularJS  Ajax 기능 의 기본 값 은 JSON 문자열 을 제출 하 는 것 입 니 다.예 를 들 어 다음 코드:var  data = { 'title' : 'test' 'sub'  : [1,2,3]}; $http.post(url, data).success( function (result) {      ... });마지막 으로 보 낸 요청 은:POST http://www.example.com HTTP1.1 Content-Type: application/json;charset=utf-8 {"title":"test","sub":[1,2,3]}이런 방안 은 복잡 한 구조 화 된 데 이 터 를 편리 하 게 제출 할 수 있 고 특히 RESTful 의 인터페이스 에 적합 하 다.크롬 자체 개발 자 도구,Firebug,Fiddler 와 같은 대형 패키지 도 구 는 트 리 구조 로 JSON 데 이 터 를 보 여 주 며 매우 우호 적 입 니 다.그러나 일부서버언어 는 아직 이런 방식 을 지원 하지 않 았 다.예 를 들 어php는$를 통과 할 수 없다.POST 대상 은 위의 요청 에서 내용 을 얻 습 니 다.이 럴 때 는 직접 처리 해 야 합 니 다.요청 헤더 에 Content-Type 이 application/json 일 때 부터php://input 리 획득 원시 입력 흐름,재 jsondecode 가 대상 이 되다.일부 phop 프레임 워 크 는 이미 이렇게 하기 시작 했다.
물론 AngularJS 는 x-ww-form-urlencoded 방식 으로 데 이 터 를 제출 하도록 설정 할 수 있 습 니 다.필요 하 시 면 참고 하 세 요이 문장.
text/xml
내 블 로그 이전XML-RPC 얘 기 했 었 어 요.(XML Remote Procedure Call).이것 은 HTTP 를 전송 프로 토 콜 로 사용 하고 XML 을 인 코딩 방식 으로 하 는 원 격 호출 규범 이다.전형 적 인 XML-RPC 요청 은 다음 과 같 습 니 다.POST http: //www .example.com HTTP /1 .1 Content-Type: text /xml <?xml version= "1.0" ?> <methodCall>      <methodName>examples.getStateName< /methodName >      <params>          <param>              <value><i4>41< /i4 >< /value >          < /param >      < /params > < /methodCall >XML-RPC 프로 토 콜 은 간단 하고 기능 이 충분 하 며 각종 언어의 실현 이 있다.그것 의 사용 도 매우 광범 위 하 다.예 를 들 어 워드 프레스 의  XML-RPC Api,검색엔진 의  ping 서비스등등.JavaScript 에서 도기 존 창고이러한 방식 으로 데이터 상호작용 을 지원 하여 기 존의 XML-RPC 서 비 스 를 잘 지원 할 수 있 습 니 다.그러나 저 는 개인 적 으로 XML 구조 가 너무 비대 해서 일반적인 장면 은 JSON 을 사용 하 는 것 이 더 유연 하고 편리 하 다 고 생각 합 니 다.
 
전재 설명:사랑 의 기원»네 가지 일반적인 POST 제출 데이터 방식

좋은 웹페이지 즐겨찾기