HTTP는 "Hypertext Transfer Protocol"에 의해 작성됩니다. 이 프로토콜은 이 기사와 같이 브라우저에 표시되는 거의 대부분의 콘텐츠가 http 프로토콜을 통해 전송됩니다.
HTTP 헤더는 HTTP 요청 및 응답의 핵심이며 클라이언트 브라우저, 요청된 페이지, 서버 등에 대한 정보를 전달합니다.
브라우저 주소 표시줄에 URL을 입력하면 브라우저는 다음과 유사한 http 요청을 생성합니다. GET /tutorials/other/top-20-mysql-best- practices / HTTP/1.1<code>GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1<br>Host: net.tutsplus.com<br>User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)<br>Accept: text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8<br>Accept-Language: en-us,en;q=0.5<br>Accept-Encoding: gzip,deflate<br>Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7<br>Keep-Alive: 300<br>Connection: keep-alive<br>Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120<br>Pragma: no-cache<br>Cache-Control: no-cache<br>
호스트: net.tutsplus.com
사용자 에이전트: Mozilla/5.0(Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5 . 5(.NET CLR 3.5.30729)수락: text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8
수락-인코딩: gzip,deflate
수락-문자 집합: ISO-8859-1,utf-8;q=0.7,*;q=0.7Keep-Alive: 300<font face="NSimsun">HTTP/1.x 200 OK<br>Transfer-Encoding: chunked<br>Date: Sat, 28 Nov 2009 04:36:25 GMT<br>Server: LiteSpeed<br>Connection: close<br>X-Powered-By: W3 Total Cache/0.8<br>Pragma: public<br>Expires: Sat, 28 Nov 2009 05:36:25 GMT<br>Etag: "pub1259380237;gz"<br>Cache-Control: max-age=3600, public<br>Content-Type: text/html; charset=UTF-8<br>Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT<br>X-Pingback: http://net.tutsplus.com/xmlrpc.php<br>Content-Encoding: gzip<br>Vary: Accept-Encoding, Cookie, User-Agent<br><!-- ... rest of the html ... --></font>
연결: keep-alive
Pragma: no-cache
Cache-Control: no-cache첫 번째 줄은 Called입니다. "요청 라인"은 요청의 기본 정보를 설명하고 나머지는 HTTP 헤더입니다.
요청이 완료된 후 브라우저는 다음 HTTP 응답을 받을 수 있습니다.
전송 인코딩: 청크
날짜: 2009년 11월 28일 토요일 04:36:25 GMT서버: LiteSpeed연결 : closeX-Powered-By: W3 총 캐시/0.8Pragma: public만료: 2009년 11월 28일 토요일 05:36:25 GMT
Etag: "pub1259380237;gz"캐시 제어: max-age=3600, 공개콘텐츠 유형: text/html; charset=UTF-8마지막 수정: 2009년 11월 28일 토요일 03:50:37 GMTX -핑백: http://net.tutsplus.com/xmlrpc.php
Content-Encoding: gzipVary: Accept-Encoding, Cookie, User-Agent 첫 번째 줄은 "상태 줄"이라고 합니다. 그 뒤에는 http 헤더가 있습니다. 빈 줄 다음에는 내용이 출력되기 시작합니다(이 경우 일부 html 출력).
그러나 페이지 소스 코드를 볼 때 HTTP 헤더는 볼 수 있는 것과 함께 브라우저로 전송되지만 볼 수 없습니다. 이 HTTP 요청은 사진, CSS 파일, js 파일 등과 같은 다른 리소스를 수신하기 위한 요청도 보냅니다.
자세한 내용을 살펴보겠습니다.HTTP 헤더 보는 방법
2.
3. PHP에서: getallheaders()는 요청 헤더를 가져오는 데 사용됩니다. headers_list()는 응답 헤더를 가져오는 데 사용됩니다. 기사 아래에서 PHP 데모를 사용하는 몇 가지 예를 볼 수 있습니다. HTTP 요청 구조 '첫 번째 줄'이라고 불리는 첫 번째 줄은 세 부분으로 구성됩니다.
이 헤더의 대부분은 선택사항입니다. HTTP 요청은 다음과 같이 간소화될 수도 있습니다.
<font face="NSimsun">GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1<br>Host: net.tutsplus.com</font>
예를 들어 Nettuts 기사를 가져오려면 http 요청의 첫 번째 줄은 일반적으로 다음과 같습니다.
<font face="NSimsun">GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1</font>
<font face="NSimsun">GET /wp-content/themes/tuts_theme/images/header_bg_tall.png HTTP/1.1</font>
<font face="NSimsun"><form action="foo.php" method="GET">
<br>First Name: <input name="first_name" type="text"><br>Last Name: <input name="last_name" type="text"><br><input name="action" type="submit" value="Submit"><br>
</form></font>
<font face="NSimsun">GET /foo.php?first_name=John&last_name=Doe&action=Submit HTTP/1.1<br>...</font>
POST: 서버로 데이터 보내기
POST 요청을 사용하여 양식 데이터를 보내는 것이 일반적인 관행입니다. POST 메서드를 사용하도록 위의 예를 수정해 보겠습니다.
<font face="NSimsun"><form action="foo.php" method="POST">
<br>First Name: <input name="first_name" type="text"><br>Last Name: <input name="last_name" type="text"><br><input name="action" type="submit" value="Submit"><br>
</form></font>
<font face="NSimsun">POST /foo.php HTTP/1.1<br>Host: localhost<br>User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)<br>Accept: text/html,application/xhtml xml,application/xml;q=0.9,*/*;q=0.8<br>Accept-Language: en-us,en;q=0.5<br>Accept-Encoding: gzip,deflate<br>Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7<br>Keep-Alive: 300<br>Connection: keep-alive<br>Referer: http://localhost/test.php<br>Content-Type: application/x-www-form-urlencoded<br>Content-Length: 43<br>first_name=John&last_name=Doe&action=Submit</font>
HEAD: 헤더 정보를 받습니다
이 방법을 사용하면 브라우저에서 페이지가 수정되었는지 확인하여 캐싱을 제어할 수 있습니다. 또한 요청한 문서가 존재하는지 여부도 확인할 수 있습니다.
예를 들어 웹사이트에 링크가 많은 경우 각각에 HEAD 요청을 보내서 데드 링크가 있는지 확인할 수 있으며 이는 GET을 사용하는 것보다 훨씬 빠릅니다.
브라우저가 HTTP 요청을 보내면 서버는 HTTP 응답으로 요청에 응답합니다. 내용에 관심이 없다면 요청은 다음과 같습니다.
가장 중요한 정보는 바로 동의입니다. 현재 서버는 HTTP/1.x 또는 HTTP/1.1을 사용합니다.
다음 짧은 메시지는 상태를 나타냅니다. 코드 200은 요청이 성공적으로 전송되었으며 서버가 헤더 정보 뒤에 요청한 문서를 반환한다는 의미입니다.
우리 모두 'HTTP 헤더 그림 및 텍스트 설명_HTML/Xhtml_웹 페이지 제작의 모든 측면을 이해합니다.' 페이지를 본 적이 있습니다. 서버에 존재하지 않는 경로를 요청하면 서버는 200 대신 HTTP 헤더 그림 및 텍스트 설명_HTML/Xhtml_웹 페이지 제작의 모든 측면을 이해합니다.로 응답합니다.
나머지 응답 내용은 HTTP 요청과 유사합니다. 이는 서버 소프트웨어, 페이지/파일이 수정된 시기, MIME 유형 등에 관한 것입니다...
다시 말하지만, 이 헤더는 선택사항입니다.
200 성공(OK)
앞서 언급했듯이 200은 요청이 성공했음을 나타내는 데 사용됩니다.
206개 부분 콘텐츠
애플리케이션이 특정 범위 내의 파일만 요청하는 경우 206이 반환됩니다.
일반적으로 다운로드 관리, 다운로드 재개 또는 파일을 청크 단위로 다운로드하는 데 사용됩니다.
HTTP 헤더 그림 및 텍스트 설명_HTML/Xhtml_웹 페이지 제작의 모든 측면을 이해합니다. 찾을 수 없음
이해하기 쉽다
HTTP 헤더 그림 및 텍스트 설명_HTML/Xhtml_웹 페이지 제작의 모든 측면을 이해합니다. 무단
비밀번호로 보호된 페이지는 이 상태를 반환합니다. 올바른 비밀번호를 입력하지 않으면 브라우저에 다음 메시지가 표시됩니다.
이 페이지는 비밀번호로 보호되어 있으므로 비밀번호를 요청하는 팝업 상자는 다음과 같습니다.
403 금지
페이지에 액세스할 수 있는 권한이 없으면 403 상태가 반환됩니다. 이는 일반적으로 색인 페이지가 없는 폴더를 열려고 할 때 발생합니다. 서버 설정에서 디렉터리 내용 보기를 허용하지 않으면 403 오류가 표시됩니다.
다른 방법으로도 권한 제한을 보낼 수 있습니다. 예를 들어 IP 주소로 차단할 수 있으며 이를 위해서는 htaccess의 도움이 필요합니다.
<font face="NSimsun">order allow,deny<br>deny from 192.168.44.201<br>deny from 224.39.163.12<br>deny from 172.16.7.92<br>allow from all</font>
302(또는 307) 임시이사, 301 영구이사
브라우저가 리디렉션되면 이 두 가지 상태가 나타납니다. 예를 들어 bit.ly와 같은 URL 단축 서비스를 사용합니다. 이것이 누가 링크를 클릭했는지 알아내는 방법입니다.
302와 301은 브라우저에서는 매우 유사하지만 검색 엔진 크롤러에서는 몇 가지 차이점이 있습니다. 예를 들어 웹사이트가 유지 관리 중인 경우 302를 사용하여 클라이언트 브라우저를 다른 주소로 리디렉션합니다. 검색 엔진 크롤러는 나중에 페이지의 색인을 다시 생성합니다. 그러나 301 리디렉션을 사용하면 검색 엔진 크롤러에게 귀하의 웹사이트가 새 주소로 영구적으로 이동되었음을 알리는 것입니다.
500 내부 서버 오류
이 코드는 일반적으로 페이지 스크립트가 충돌할 때 나타납니다. 대부분의 CGI 스크립트는 PHP처럼 브라우저에 오류 메시지를 출력하지 않습니다. 치명적인 오류가 발생하면 단순히 500 상태 코드를 보냅니다. 이때 문제 해결을 위해서는 서버 오류 로그를 확인해야 합니다.
전체 목록
여기에서 HTTP 상태 코드에 대한 전체 설명을 확인할 수 있습니다.
이제 HTTP 헤더에서 발견되는 몇 가지 일반적인 HTTP 요청 정보를 살펴보겠습니다.
이러한 모든 헤더 정보는 PHP의 $_SERVER 배열에서 찾을 수 있습니다. getallheaders() 함수를 사용하여 모든 헤더 정보를 한 번에 가져올 수도 있습니다.
HTTP 요청은 특정 IP 주소로 전송되지만 대부분의 서버에는 동일한 IP 주소로 여러 웹사이트를 호스팅할 수 있는 기능이 있으므로 서버는 브라우저가 리소스를 요청하는 도메인 이름을 알아야 합니다.
<font face="NSimsun">호스트: rlog.cn<code><font face="NSimsun">Host: rlog.cn</font>
이것은 도메인과 하위 도메인을 포함한 기본 호스트 이름입니다.
PHP에서는 $_SERVER['HTTP_HOST'] 또는 $_SERVER['SERVER_NAME']을 통해 볼 수 있습니다.
<fontface>사용자 에이전트: Mozilla/5.0(Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5(. NET CLR 3.5.30729)<code><font face="NSimsun">User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.1; en-US; rv:1.9.1.5) Gecko/20091102 Firefox/3.5.5 (.NET CLR 3.5.30729)</font>
이 헤더에는 다음 정보가 포함될 수 있습니다.
이것은 일부 웹사이트에서 방문자 정보를 수집하기 위해 사용하는 일반적인 방법입니다. 예를 들어 방문자가 휴대전화로 사이트에 액세스하는지 확인하고 낮은 해상도에서도 잘 작동하는 모바일 사이트로 방문자를 연결할지 여부를 결정할 수 있습니다.
PHP에서는 $_SERVER['HTTP_USER_AGENT']를 통해 User-Agent를 얻을 수 있습니다
<font face="NSimsun">if ( strstr($_SERVER['HTTP_USER_AGENT'],'MSIE 6') ) {<br>echo "IE6 사용을 중단하세요!";<br> }<code><font face="NSimsun">if ( strstr($_SERVER['HTTP_USER_AGENT'],'MSIE 6') ) {<br>echo "Please stop using IE6!";<br>}</font>
<fontface>Accept-Language: en-us,en;q=0.5<code><font face="NSimsun">Accept-Language: en-us,en;q=0.5</font>
이 정보는 사용자의 기본 언어 설정을 설명합니다. 웹사이트의 언어 버전이 다른 경우 이 정보를 사용하여 사용자 브라우저를 리디렉션할 수 있습니다.
쉼표로 구분하여 여러 언어를 전달할 수 있습니다. 첫 번째는 선호하는 언어가 되며, 다른 언어는 사용자의 언어 선호도(0~1)를 나타내는 "q" 값을 갖습니다.
이 정보를 얻으려면 PHP에서 $_SERVER["HTTP_ACCEPT_LANGUAGE"]를 사용하세요.
<font face="NSimsun">if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == 'fr') {<br>header('위치: http:// French.mydomain.com');<br>}<code><font face="NSimsun">if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == 'fr') {<br>header('Location: http://french.mydomain.com');<br>}</font>
<fontface>인코딩 허용: gzip,deflate<code><font face="NSimsun">Accept-Encoding: gzip,deflate</font>
대부분의 최신 브라우저는 gzip 압축을 지원하며 이 정보를 서버에 보고합니다. 이때 서버는 압축된 HTML을 브라우저로 보냅니다. 이를 통해 파일 크기를 거의 80%까지 줄여 다운로드 시간과 대역폭을 절약할 수 있습니다.
PHP에서는 $_SERVER["HTTP_ACCEPT_ENCODING"]를 사용하여 이 정보를 얻을 수 있습니다. 그런 다음 ob_gzhandler() 메서드를 호출하면 이 값이 자동으로 감지되므로 수동으로 감지할 필요가 없습니다.
<fontface>// 출력 버퍼링을 활성화합니다<br>// 브라우저가 지원하는 경우 모든 출력이 압축됩니다<br>ob_start('ob_gzhandler');<code><font face="NSimsun">// enables output buffering<br>// and all output is compressed if the browser supports it<br>ob_start('ob_gzhandler');</font>
페이지가 브라우저에 캐시된 경우 다음에 브라우저를 탐색할 때 문서가 수정되었는지 여부를 감지하고 다음과 같은 헤더를 보냅니다.
<font face="NSimsun">수정 이후: 2009년 11월 28일 토요일 06:38:19 GMT<code><font face="NSimsun">If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT</font>
이 이후 수정되지 않은 경우 서버는 "304 Not Modified"를 반환하고 더 이상 콘텐츠를 반환하지 않습니다. 브라우저는 자동으로 캐시에서 콘텐츠를 읽습니다
PHP에서는 $_SERVER['HTTP_IF_MODIFIED_SINCE']를 사용하여 감지할 수 있습니다.
<font face="NSimsun">// $last_modify_time이 출력이 마지막으로 업데이트되었다고 가정합니다.<br>// 브라우저가 If-Modified-Since 헤더를 보냈습니까?<br>if(isset ($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {<br>// 브라우저 캐시가 수정 시간과 일치하는 경우<br>if ($last_modify_time == strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {<br>// 내용 없이 304 헤더를 보냅니다.<br>header("HTTP/1.1 304 Not Modified");<br>exit;<br>}<br>}<code><font face="NSimsun">// assume $last_modify_time was the last the output was updated<br>// did the browser send If-Modified-Since header?<br>if(isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {<br>// if the browser cache matches the modify time<br>if ($last_modify_time == strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {<br>// send a 304 header, and no content<br>header("HTTP/1.1 304 Not Modified");<br>exit;<br>}<br>}</font>
캐시된 정보가 올바른지 확인하는 데 사용되는 Etag라는 HTTP 헤더도 있습니다.
이름에서 알 수 있듯이 귀하의 브라우저에 저장된 쿠키 정보를 서버로 전송합니다.
<fontface>쿠키: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120; foo=bar<code><font face="NSimsun">Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120; foo=bar</font>
세미콜론으로 구분된 이름-값 쌍의 집합입니다. 쿠키에는 세션 ID도 포함될 수 있습니다.
PHP에서는 $_COOKIE 배열에 액세스하여 단일 쿠키를 얻을 수 있습니다. $_SESSION 배열을 직접 사용하여 세션 변수를 가져올 수 있습니다. 세션 ID가 필요한 경우 쿠키 대신 session_id() 함수를 사용할 수 있습니다.
<font face="NSimsun">echo $_COOKIE['foo'];<br>// output: bar<br>echo $_COOKIE['PHPSESSID'];<br>// output: r2t5uvjq435r4q7ib3vtdjq120<br>session_start();<br>echo session_id();<br>// output: r2t5uvjq435r4q7ib3vtdjq120</font>
이름에서 알 수 있듯이 헤더에는 참조 URL 정보가 포함됩니다.
예를 들어 Nettuts 홈페이지를 방문하여 링크를 클릭하면 다음 헤더 정보가 브라우저로 전송됩니다. <font face="NSimsun">Referer: http://net.tutsplus.com/ </font>
PHP에서는 $_SERVER['HTTP_REFERER']를 통해 이 값을 얻을 수 있습니다.
<font face="NSimsun">if (isset($_SERVER['HTTP_REFERER'])) {<code><font face="NSimsun">if (isset($_SERVER['HTTP_REFERER'])) {<br>$url_info = parse_url($_SERVER['HTTP_REFERER']);<br>// is the surfer coming from Google?<br>if ($url_info['host'] == 'www.google.com') {<br>parse_str($url_info['query'], $vars);<br>echo "You searched on Google for this keyword: ". $vars['q'];<br>}<br>}<br>// if the referring url was:<br>// http://www.google.com/search?source=ig&hl=en&rlz=&=&q=http headers&aq=f&oq=&aqi=g-p1g9<br>// the output will be:<br>// You searched on Google for this keyword: http headers</font>
$url_info =parse_url($_SERVER['HTTP_REFERER']);
if ($url_info['host'] == 'www.google.com') {
parse_str($url_info['query'], $vars);}
// 참조 URL이 다음인 경우:// http://www. google.com/search?source=ig&hl=en&rlz=&=&q=http headers&aq=f&oq=&aqi=g-p1g9<font face="NSimsun">Authorization: Basic bXl1c2VyOm15cGFzcw==</font>
// 출력은 다음과 같습니다.
"referrer"라는 단어의 철자가 "referer"로 잘못 표기되어 있는 것을 보셨을 것입니다. 불행하게도 공식 HTTP 사양에 그렇게 되어 있어서 멈췄습니다.
인증
헤더에 포함된 정보 중 이 부분은 base64로 인코딩되어 있습니다. 예를 들어, base64_decode('bXl1c2VyOm15cGFzcw==')는 'myuser:mypass'로 변환됩니다. PHP에서는 $_SERVER['PHP_AUTH_USER'] 및 $_SERVER['PHP_AUTH_PW']를 사용하여 이 값을 얻을 수 있습니다. 자세한 내용은 WWW-인증 부분에서 설명드리겠습니다. HTTP 헤더의 HTTP 응답 이제 몇 가지 일반적인 HTTP 헤더의 HTTP 응답 정보를 이해하겠습니다. PHP에서는
header()를 통해 헤더 응답 정보를 설정할 수 있습니다. PHP는 로드된 콘텐츠, 쿠키 설정 등 필요한 헤더 정보를 자동으로 전송했습니다. headers_list()를 통해 무엇을 보냈고 무엇을 보낼지 확인할 수 있습니다. 함수 헤더 정보.<font face="NSimsun">Cache-Control: max-age=3600, public</font>
headers_sent()
함수를 사용하여 헤더 정보가 전송되었는지 확인할 수도 있습니다.
캐시 제어
w3.org의 정의는 다음과 같습니다. "Cache-Control 일반 헤더 필드는 요청/응답 체인을 따라 모든 캐싱 메커니즘이 준수해야 하는 지시문을 지정하는 데 사용됩니다." 여기서 "캐싱 메커니즘"에는 사용자의 정보 중 일부가 포함됩니다. ISP는 게이트웨이 및 프록시 정보를 사용할 수 있습니다. <font face="NSimsun">Cache-Control: no-cache </font>
<fontface>캐시 제어: max-age=3600, 공개<font color="#6466b3"></font></fontface>
"공개"는 이 응답을 누구나 캐시할 수 있음을 의미하고 "max-age"는 캐시가 유효한 시간(초)을 나타냅니다. 웹사이트의 캐시를 허용하면 다운로드 시간과 대역폭이 크게 줄어들고 브라우저 로딩 속도도 향상됩니다.
<fontface>캐시 제어: 캐시 없음 </fontface>
<font face="NSimsun">Content-Type: text/html; charset=UTF-8</font>
자세한 내용은
w3.org를 참조하세요. 콘텐츠 유형
이 헤더에는 문서의 "mime-type"이 포함되어 있습니다. 브라우저는 이 매개변수를 사용하여 문서를 구문 분석하는 방법을 결정합니다. 예를 들어, html 페이지(또는 html 출력이 있는 PHP 페이지)는 다음과 같은 내용을 반환합니다.
<fontface>콘텐츠 유형: text/html; charset=UTF-8</fontface>
<font face="NSimsun">Content-Type: image/gif</font>
'text'는 문서 유형이고 'html'은 문서 하위 유형입니다. 이 헤더에는 문자 세트와 같은 추가 정보도 포함되어 있습니다.
<fontface>콘텐츠 유형: 이미지/gif</fontface>
브라우저는 외부 프로그램이나 자체 확장 프로그램을 사용하여 MIME 형식을 통해 문서를 열 수 있습니다. 다음 예에서는 Adobe Reader를 호출합니다. <font face="NSimsun">Content-Type: application/pdf</font>
직접 로딩인 Apache는 일반적으로 문서의 MIME 유형을 자동으로 결정하고 헤더에 적절한 정보를 추가합니다. 그리고 대부분의 브라우저는 어느 정도 내결함성을 갖추고 있으며 정보가 헤더에 제공되지 않거나 잘못 제공되면 자동으로 MIME 유형을 감지합니다.
일반적으로 사용되는 MIME 유형 목록은 여기에서 확인할 수 있습니다.
PHP에서는 finfo_file()을 사용하여 파일의 ime 유형을 감지할 수 있습니다.
이 헤더는 응답 내용을 구문 분석하는 대신 파일 다운로드 창을 열도록 브라우저에 지시합니다. 예:
<fontface>콘텐츠 처리: filename="download.zip"<code><font face="NSimsun">Content-Disposition: attachment; filename="download.zip"</font>
브라우저에 다음과 같은 대화 상자가 표시됩니다.
적절한 Content-Type 헤더도 전송됩니다.
<fontface>콘텐츠 유형: application/zip<br>콘텐츠 처리: filename="download.zip"<code><font face="NSimsun">Content-Type: application/zip<br>Content-Disposition: attachment; filename="download.zip"</font>
컨텐츠가 브라우저로 전송될 때 서버는 이 헤더를 사용하여 전송할 파일의 크기(바이트)를 브라우저에 알릴 수 있습니다.
<fontface>콘텐츠 길이: 89123<code><font face="NSimsun">Content-Length: 89123</font>
이 정보는 파일 다운로드에 매우 유용합니다. 이것이 브라우저가 다운로드 진행 상황을 아는 이유입니다.
예를 들어 여기서는 느린 다운로드를 시뮬레이션하기 위한 더미 스크립트를 작성했습니다.
<font face="NSimsun">// zip 파일입니다<br>header('Content-Type: application/zip');<br>// 100만 바이트(약 1MB) <br>header('Content-Length: 1000000');<br>// 다운로드 대화상자를 로드하고 download.zip으로 저장합니다.<br>header('Content-Disposition: attachment; filename="download .zip"');<br>// 데이터 1000배 1000바이트<br>for ($i = 0; $i <span style="WHITE- SPACE: pre"><code><font face="NSimsun">// it's a zip file<br>header('Content-Type: application/zip');<br>// 1 million bytes (about 1megabyte)<br>header('Content-Length: 1000000');<br>// load a download dialogue, and save it as download.zip<br>header('Content-Disposition: attachment; filename="download.zip"');<br>// 1000 times 1000 bytes of data<br>for ($i = 0; $i <span style="WHITE-SPACE: pre"></span>echo str_repeat(".",1000);<br><span style="WHITE-SPACE: pre"></span>// sleep to slow down the download<br><span style="WHITE-SPACE: pre"></span>usleep(50000);<br>}</font>
echo str_repeat(".",1000);
usleep(50000);
}
결과는 다음과 같습니다.
<font face="NSimsun">// it's a zip file<br>header('Content-Type: application/zip');<br>// the browser won't know the size<br>// header('Content-Length: 1000000');<br>// load a download dialogue, and save it as download.zip<br>header('Content-Disposition: attachment; filename="download.zip"');<br>// 1000 times 1000 bytes of data<br>for ($i = 0; $i <span style="WHITE-SPACE: pre"></span>echo str_repeat(".",1000);<br><span style="WHITE-SPACE: pre"></span>// sleep to slow down the download<br><span style="WHITE-SPACE: pre"></span>usleep(50000);<br>}</font>
이제 Content-Length 헤더를 주석 처리합니다.
<font face="NSimsun">// zip 파일입니다<br>header('Content-Type: application/zip');<br>// 브라우저는 size<br>// header('Content-Length: 1000000');<br>// 다운로드 대화상자를 로드하고 download.zip으로 저장합니다.<br>header('Content-Disposition: attachment; filename ="download.zip"');<br>// 데이터 1000배 1000바이트<br>for ($i = 0; $i <span style="WHITE-SPACE: pre"></span></font>
// 다운로드 속도를 늦추려면 절전 모드
/>usleep(50000);
}
결과는 다음과 같습니다.
이 브라우저는 다운로드된 양만 알려주고, 총 다운로드해야 하는 양은 알려줍니다. 진행률 표시줄에는 진행률이 표시되지 않습니다. <font face="NSimsun">Etag: "pub1259380237;gz"</font>
캐싱을 위해 생성된 또 다른 헤더입니다. 다음과 같이 표시됩니다.
<fontface>E태그: "pub1259380237;gz"</fontface>
<font face="NSimsun">If-None-Match: "pub1259380237;gz"</font>
<fontface>일치가 없는 경우: "pub1259380237;gz"<p></p></fontface>
요청한 문서의 Etag 값이 일치하면 서버는 2oo 대신 304 상태 코드를 보냅니다. 콘텐츠를 반환하지 않습니다. 이제 브라우저가 캐시에서 파일을 로드합니다. <font face="NSimsun">Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT</font>
<font face="NSimsun">$modify_time = filemtime($file);<br>header("Last-Modified: " . gmdate("D, d M Y H:i:s", $modify_time) . " GMT");</font>
이름에서 알 수 있듯이 이 헤더 정보는 문서의 마지막 수정 시간을 GMT 형식으로 나타냅니다.
<fontface>최종 수정: 2009년 11월 28일 토요일 03:50:37 GMT</fontface>
<font face="NSimsun">$modify_time = filemtime($file);<br>header("마지막 수정: " . gmdate("D, d M Y H:i:s", $ 수정_시간) . " GMT");</font>
대체 캐싱 메커니즘을 제공합니다. 브라우저는 다음과 같은 요청을 보낼 수 있습니다. <font face="NSimsun">If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT</font>
이에 대해서는 If-Modified-Since 섹션에서 이미 논의했습니다.
이 헤더는 리디렉션에 사용됩니다. 응답 코드가 301 또는 302인 경우 서버는 이 헤더를 보내야 합니다. 예를 들어, http://www.nettuts.com을 방문하면 브라우저는 다음과 같은 응답을 받게 됩니다.
<font face="NSimsun">HTTP/1.x 301 Moved Permanently<br>...<br>Location: http://net.tutsplus.com/<br>...</font>
PHP에서는 다음과 같은 방법으로 방문자를 리디렉션할 수 있습니다. <font face="NSimsun">header('Location: http://net.tutsplus.com/');</font>
기본적으로 302 상태 코드가 전송됩니다. 301을 전송하려면 다음과 같이 작성하세요.
<font face="NSimsun">header('Location: http://net.tutsplus.com/', true, 301);</font>
웹사이트에서 사용자가 탐색하는 쿠키 정보를 설정하거나 업데이트해야 하는 경우 다음과 같은 헤더를 사용합니다.
<fontface>Set-Cookie: skin=noskin; path=/; domain=.amazon.com; 만료=일, 2009년 11월 29일 21:42:28 GMT<code><font face="NSimsun">Set-Cookie: skin=noskin; path=/; domain=.amazon.com; expires=Sun, 29-Nov-2009 21:42:28 GMT<br>Set-Cookie: session-id=120-7333518-8165026; path=/; domain=.amazon.com; expires=Sat Feb 27 08:00:00 2010 GMT</font>
세트-쿠키: 세션 ID=120-7333518-8165026; 경로=/; 도메인=.amazon.com; 만료=2010년 2월 27일 08:00:00 GMT
각 쿠키는 별도의 헤더 정보로 사용됩니다. js를 통해 쿠키를 설정하면 HTTP 헤더에 반영되지 않습니다. 함수를 통해 쿠키를 설정할 수 있으며, PHP는 적절한 HTTP 헤더를 보냅니다.
<font face="NSimsun">setcookie("TestCookie", "foobar");</font>
<font face="NSimsun">setcookie("TestCookie", "foobar");</font>
다음과 같은 헤더 정보가 전송됩니다.
<font face="NSimsun">Set-Cookie: TestCookie=foobar</font>
<fontface>쿠키 설정: TestCookie=foobar</fontface>
만료 시간을 지정하지 않으면 브라우저를 닫은 후 쿠키가 삭제됩니다.
웹사이트에서는 사용자를 인증하기 위해 HTTP를 통해 이 헤더를 보낼 수 있습니다. 브라우저가 헤더에서 이 응답을 보면 팝업 창이 열립니다.
<font face="NSimsun">WWW-Authenticate: Basic realm="Restricted Area"</font>
<font face="NSimsun">WWW-인증: 기본 영역="제한 구역"</font>
다음과 같습니다:
장에는 PHP로 이러한 작업을 수행하는 방법을 보여주는 간단한 코드가 있습니다.
<font face="NSimsun">if (!isset($_SERVER['PHP_AUTH_USER'])) {<br>header('WWW-Authenticate: Basic realm="My Realm"');<br>header('HTTP/1.0 HTTP 헤더 그림 및 텍스트 설명_HTML/Xhtml_웹 페이지 제작의 모든 측면을 이해합니다. Unauthorized');<br>echo 'Text to send if user hits Cancel button';<br>exit;<br>} else {<br>echo "<p>Hello {$_SERVER['PHP_AUTH_USER']}.</p>";<br>echo "<p>You entered {$_SERVER['PHP_AUTH_PW']} as your password.</p>";<br>}</font>
<fontface>if (!isset($_SERVER['PHP_AUTH_USER'])) {</fontface>
exit;
} else {echo "
안녕하세요 { $_SERVER['PHP_AUTH_USER']}.
";<font face="NSimsun">Content-Encoding: gzip</font>
echo "비밀번호로 {$_SERVER['PHP_AUTH_PW']}를 입력하셨습니다.
"; }콘텐츠 인코딩 이 헤더는 일반적으로 반환된 콘텐츠가 압축될 때 설정됩니다.
<fontface>콘텐츠 인코딩: gzip</fontface>
PHP에서는 원래 주소 : http://css9.net/all-about-http-headers/