data-id="1190000004868343">
HTTP 레이어에 주목해 보니 많은 CIer들이 컨텐츠 협상에 대해 잘 모르고 있다는 것을 알게 되었습니다. 컨텐츠 협상이 무엇인지, 곧 출시될 CodeIgniter 4에서는 어떻게 사용할 것인지에 대해 논의해 보겠습니다. . 그를 이용하세요.
콘텐츠협상이란?
간단히 말하면, 콘텐츠 협상이란 클라이언트와 서버가 응답 리소스 내용을 협상한 후 클라이언트에게 가장 적합한 리소스를 제공하는 것을 의미합니다. 콘텐츠 협상에서는 응답 리소스의 언어, 이미지 유형 및 인코딩 방법을 판단 기준으로 사용합니다(요청 헤더에 포함된 특정 Accept
필드가 판단 기준이 됩니다).
예를 들어 Chrome을 사용하여 Mozilla 사이트에 액세스하면 다음과 같은 HTTP 요청 헤더 정보를 볼 수 있습니다.
accept:text/html,application/xhtml xml ,application/xml;q=0.9,image/webp,/;q=0.8
accept-encoding:gzip, deflate, sdch
accept-언어:en-US,en;q=0.8
이 accept
정보는 브라우저에서 지원하는 형식을 알려주고 이러한 형식에 대한 우선 순위 정보를 제공합니다(값을 통해) q 우선순위를 결정하기 위해). 위 정보는 브라우저가 지원되는 모든 컨텐츠 유형 중에서 text/html 유형의 컨텐츠 수신을 선호한다는 것을 나타냅니다. 내 브라우저의 언어 설정이 영어이므로 accept-language
요청 헤더는 내가 미국 영어(en-US) 페이지를 선호함을 나타냅니다.
물론 콘텐츠 협상 정보를 제공하지 않아도 웹사이트는 여전히 작동할 수 있으며, 수년 동안 그렇게 해왔습니다. 그러나 웹 서버가 우리가 일반적으로 잘 활용하지 못하는 일부 형태의 콘텐츠 협상을 처리할 수 있다는 사실이 서버가 이 정보를 처리할 수 없다는 의미는 아닙니다.
콘텐츠 협상에는 두 가지 매우 매력적인 용도가 있습니다. 하나는 여러 언어를 지원하는 사이트를 위한 것이고, 다른 하나는 특정 형식으로 데이터를 반환하기 위한 API 인터페이스입니다.
콘텐츠 협상을 꼭 사용해야 하나요? 반드시 그런 것은 아닐 수도 있고, 그는 양날의 검일 수도 있고, 어떤 사람들은 그를 사용하지 말라고 조언하고, 다른 사람들은 그가 얇게 썬 빵만큼 사랑스럽다고 생각합니다. 하지만 사용하고 싶다면 CodeIgniter에서 콘텐츠 협상을 사용하는 것이 쉽습니다.
간단한 예
여기에서는 콘텐츠 협상에 대해 너무 자세히 소개하지 않겠습니다. (자세한 소개는 사용자 매뉴얼에 작성됩니다.) 이 예에서는 콘텐츠 협상이 출력 언어를 결정하는 방법을 간략하게 소개합니다.
<code>class BaseController extends \CodeIgniter\Controller { protected $language; public function __construct(...$params) { parent::__construct(...$params); $supportedLangs = ['en-US', 'en', 'fr']; $this->language = $this->request->negotiate('language', $supportedLangs); } }</code>
이 예는 사이트가 영어와 프랑스어를 지원할 수 있음을 나타냅니다. 우리는 지원되는 언어를 $supportedLangs
배열에 할당하여 기본 언어가 미국 영어임을 나타냅니다. 일반 영어와 프랑스어를 사용하고 $negotiate->language()
메서드를 호출하고 지원되는 언어 유형을 전달하면 구문 분석 중에 올바른 HTTP 헤더가 인식되고 배열에 정의된 우선 순위에 따라 가장 일치하는 결과가 반환됩니다. 두 언어가 모두 일치하지 않으면 배열의 첫 번째 언어가 사용됩니다.
Negotiate 클래스의 네 가지 협상 방법은 다음과 같습니다.
media() 일반적인 Accept
요청 헤더와는 달리 다른 버전을 요청하는 데 사용할 수 있습니다. .html/text 또는 오디오 지원, 이미지 지원 등
charset()은 Accept-Charset
요청 헤더와 다르며 일치하는 항목이 없으면 기본값은 UTF-8입니다.
encoding()은 Accept-Encoding
요청 헤더와 다르며 클라이언트가 지원하는 압축 유형을 결정할 수 있습니다.
언어()가 Accept-Language
요청 헤더와 다릅니다.
모든 시나리오에 콘텐츠 협상이 필요한 것은 아니지만 고품질 API를 구축하기 위한 강력한 도구이며 다른 곳에 창의적으로 적용할 수도 있습니다.
위 내용은 codeigniter의 내용을 포함하여 CodeIgniter 4의 내용 협상을 소개한 내용으로, PHP 튜토리얼에 관심이 있는 친구들에게 도움이 되기를 바랍니다.