최근에는 WebAPI를 사용할 때 브라우저가 WebAPI에 접근하고 기본값이 XML 형식이기 때문에, 이 반환된 데이터 형식은 사용자가 사용자가 사용자 맞춤 설정할 수 있어야 한다고 생각합니다. 서버가 XML 형식이나 JSON 형식을 반환할 수 있도록 해야 하며, 서버 코드 대신 말이죠!
서버 코드는 구성할 수 있지만, WebAPI의 원래 의도는 아니었던 것 같습니다.
1. WebAPI가 기본적으로 반환하는 데이터 타입은 json인가요, xml인가요? 2. WebAPI의 반환 데이터 타입 수정 방법 IE 브라우저를 사용해 반환되는 데이터가 JSON 형식인지 요청하고, Firefox와 Chrome에서 반환되는 데이터 형식은 XML입니다. 그리고 HttpWebRequest를 사용해 JSON 형식으로 반환을 요청합니다. 왜 같은 프로그램, 같은 설정 파일인지, 기본 출력 JSON이나 XML은 이해할 수 있는데도 출력 데이터 형식이 왜 다른지, 왜 브라우저가 다른지, 출력 형식이 다른지 궁금했습니다. 조사를 좀 해본 끝에, 결국 그 이유를 알게 되었습니다
테스트 결과, IE 브라우저를 사용할 때 반환되는 데이터는 json이고, Firefox와 Chrome을 사용할 때 반환되는 데이터는 xml이며, HTTP 요청이 발생할 때 IE는 Firefox와 Chrome에 비해 "application/xml" 타입이 부족하다는 것이 밝혀졌습니다. 따라서 기본값은 json 형식의 데이터이고, Firefox와 Chrome은 허용 가능한 XML 타입을 보내므로 xml 데이터가 반환되며, 다음은 IE, Firefox, Chrome의 요청 헤더입니다
수락은 요청에만 나타납니다
의미하는 바: 브라우저 측에서 허용되는 미디어 유형입니다
예를 들어, Accept: text/html은 브라우저가 서버에서 보내는 postback 유형을 텍스트/html로 받아들일 수 있음을 의미하며, 이를 일반적으로 html 문서라고 부릅니다
서버가 텍스트/HTML 유형의 데이터를 반환하지 못한다면, 406 오류(허용되지 않음)를 반환해야 합니다
와일드카드 *는 모든 유형을 나타냅니다
예를 들어, Accept: */*는 브라우저가 모든 유형을 처리할 수 있음을 의미합니다(일반적으로 브라우저가 이를 서버에 전송합니다)
예를 들어, Accept: text/*는 모든 하위 클래스가 허용됨을 의미합니다
Accept는 여러 유형의 분리를 지원할 수 있습니다
예를 들어, 수락: audio/*; q=0.2, 오디오/기본은 브라우저가 오디오/기본 미디어 유형을 선호하지만, 이 유형이 없으면 다른 오디오 유형도 사용할 수 있다는 의미입니다
여기서 q=0.2가 나타나는데, 이는 연관의 정도를 나타내는 값이며, 기본값은 1이며, 가장 큰 것부터 가장 작은 것까지 배열됩니다
예를 들어, 수락: 텍스트/평문; q=0.5, text/html, text/x-DVI; q=0.8, text/x-c
허용되는 타입 우선순위는 다음과 같습니다
1) 텍스트/HTML 텍스트/x-c
2) 텍스트/x-DVI
3) 텍스트/평면
q는 0-1 사이의 값이며, q의 기본값은 1이며, q=0은 허용 불가를 의미합니다
마지막으로 검사 결과입니다:
| 브라우저 | 포맷 복귀 | 요청 수락 헤더 | | 즉, | JSON | text/html, application/xhtml+xml, */* | | 크롬 | XML | text/html, application/xhtml+xml, application/xml; q=0.9,image/webp,image/apng,*/*; q=0.8 | | 파이어폭스 | XML | text/html, application/xhtml+xml, application/xml; q=0.9,*/*; q=0.8,*/* |
다음 검사를 계속하세요
1. accept:application/json만 전송되고 결과는 json으로 반환됩니다
2. accept:application/xml만 전송되고, 결과는 xml을 반환합니다.
3. accept: application/xml과 application/json을 동시에 보내면 json이 반환됩니다
4. accept:application/json과 application/xml을 동시에 보내면 json이 반환됩니다
5. 우선순위를 수정하고 application/xml을 동시에 전송합니다. q=1.0,application/json; q=0.9이며, 결과는 xml을 반환했습니다
이로부터 다음과 같은 결론을 내릴 수 있다:
WebAPI의 반환 데이터 타입은 요청 헤더의 수락(accept)에 의해 결정되며, 기본 반환 타입은 json입니다 1. application/json이나 application/xml이 존재하지 않을 경우, json 데이터를 반환합니다 2. application/json만 사용 가능할 때, json 데이터를 반환합니다 3. application/xml만 사용할 경우, xml 데이터가 반환됩니다 4. application/json과 application/json이 동시에 있을 때, 반환되는 데이터 타입은 두 개의 순서와 무관하며, 두 데이터가 같은 우선순위를 가지면 json이 반환되고, 우선순위가 다를 경우 우선순위가 높은 타입이 반환됩니다
| 수락 헤드 | 반환 유형 | | application/json | JSON | | application/xml | XML | | application/xml,application/json | JSON | | application/json, application/xml | JSON | | application/xml; q=1.0,application/json; q=1.0 | JSON | | application/xml; q=0.9,application/json; q=0.9 | JSON | | application/xml; q=1.0,application/json; q=0.9 | XML | | application/xml; q=0.9,application/json; q=1.0 | JSON |
아래에 나와 있습니다:
|