HTTP는 하이퍼 텍스트 전송 프로토콜에 의해 작성됩니다. 전 세계 웹 은이 프로토콜을 사용합니다. 브라우저에 표시된 컨텐츠의 대부분은이 기사와 같은 HTTP 프로토콜을 통해 전송됩니다.
HTTP 헤더는 HTTP 요청 및 해당 코어이며 클라이언트 브라우저, 요청 페이지, 서버 등에 대한 정보가 제공됩니다.
브라우저 주소 표시 줄에 URL을 입력하면 브라우저가 다음 HTTP 요청과 유사합니다.
GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
호스트 : 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, 응용 프로그램/xhtml+xml, application/xml; q = 0.9,*/*; q = 0.8
허용 : en-us, en; q = 0.5
인코딩 수락 : gzip, deflate
수락-문자 : ISO-8859-1, UTF-8; Q = 0.7,*; Q = 0.7
유지 : 300
연결 : 계속하십시오
쿠키 : phpsessid = r2t5uvjq435r4q7ib3vtdjq120
프라그마 : 캐시가 없습니다
캐시 제어 : 안 캐시
첫 번째 줄은 요청 행이라고합니다. 이 요청의 기본 정보를 설명하고 나머지는 HTTP 헤더입니다.
요청이 완료되면 브라우저는 다음 HTTP 응답을받을 수 있습니다.
HTTP/1.x 200 OK
전송 인코딩 : 청크
날짜 : 토요일, 2009 년 11 월 28 일 04:36:25 GMT
서버 : litespeed
연결 : 닫습니다
X- 전원 : W3 총 캐시/0.8
Pragma : 공개
만료 : SAT, 2009 년 11 월 28 일 05:36:25 GMT
ETAG : PUB1259380237; GZ
캐시 제어 : Max-Age = 3600, 공개
내용 유형 : Text/HTML; charset = utf-8
마지막 수정 : Sat, 2009 년 11 월 28 일 03:50:37 GMT
x-pingback : http://net.tutsplus.com/xmlrpc.php
컨텐츠 인코딩 : GZIP
변경 : 인코딩, 쿠키, 사용자 에이전트를 허용합니다
<!-... 나머지 html ...->
첫 번째 줄은 상태 라인이라고하며 HTTP 헤더가 뒤 따릅니다. 빈 줄이 완료되면 컨텐츠가 출력됩니다 (이 경우 일부 HTML 출력).
그러나 페이지의 소스 코드를 볼 때 HTTP 헤더를 볼 수는 없지만 볼 수있는 것과 함께 브라우저로 전송됩니다.
이 HTTP 요청은 이미지, CSS 파일, JS 파일 등과 같은 다른 리소스를 수신하라는 요청도 보냅니다.
아래 세부 사항을 살펴 보겠습니다.
다음 Firefox 확장은 HTTP 헤더를 분석하는 데 도움이 될 수 있습니다.
1. Firebug
2. HTTP 헤더 라이브
3. PHP에서 :
이 기사 아래에는 PHP 데모를 사용하는 몇 가지 예가 표시됩니다.
첫 번째 줄이라고 불리는 첫 번째 줄에는 세 부분이 포함되어 있습니다.
나머지 섹션은 각각 이름이있는 줄입니다. value 쌍. 요청 및 브라우저에 대한 다양한 정보가 포함되어 있습니다. 예를 들어, 사용자 에이전트는 브라우저 버전과 사용중인 운영 체제를 나타냅니다. 허용 인코딩은 서버에 브라우징이 GZIP와 유사한 압축 출력을 수락 할 수 있음을 알려줍니다.
이 헤더의 대부분은 선택 사항입니다. HTTP 요청은 이것으로 줄일 수 있습니다.
GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
호스트 : net.tutsplus.com
서버로부터 유효한 응답을받을 수 있습니다.
가장 일반적인 요청 유형은 다음과 같습니다. Get, Post 및 Head. HTML의 글쓰기 과정에서 처음 두 가지에 이미 익숙 할 수 있습니다.
브라우저로 전송되는 대부분의 HTML, 이미지, JS, CSS는 GET 메소드를 통해 요청됩니다. 데이터를 얻는 주요 방법입니다.
예를 들어, Nettus+ 기사를 얻으려면 HTTP 요청의 첫 번째 줄은 일반적으로 다음과 같습니다.
GET /tutorials/other/top-20-mysql-best-practices/ HTTP/1.1
HTML이로드되면 브라우저는 다음과 같이 이미지를 가져 오도록 GET 요청을 보냅니다.
GET /wp-content/themes/tuts_theme/images/header_bg_tall.png HTTP/1.1
양식은 Get 메소드를 통해 전송 될 수도 있습니다. 예는 다음과 같습니다.
<form action=foo.php method=GET>
이름 : <입력 이름 = first_name 유형 = 텍스트 />
성 : <입력 이름 = last_name 유형 = 텍스트 />
<입력 이름 = 액션 유형 = 제출 값 = 제출 />
</form>
이 양식이 제출되면 HTTP 요청은 다음과 같습니다.
GET /foo.php?first_name=John&last_name=Doe&action=Submit HTTP/1.1
...
쿼리 문자열에 추가하여 서버에 양식 입력을 보낼 수 있습니다.
Get 메소드를 통해 URL에 데이터를 첨부하여 서버로 전달할 수 있지만 게시물을 사용하여 많은 경우 서버로 데이터를 보내는 것이 더 적절합니다. GET를 통해 많은 양의 데이터를 보내는 것은 비현실적이며 특정 제한 사항이 있습니다.
포스트 요청을 사용하여 양식 데이터를 보내는 것이 일반적입니다. 위의 예를 변경하여 게시물을 사용하겠습니다.
<form action=foo.php method=POST>
이름 : <입력 이름 = first_name 유형 = 텍스트 />
성 : <입력 이름 = last_name 유형 = 텍스트 />
<입력 이름 = 액션 유형 = 제출 값 = 제출 />
</form>
이 양식을 제출하면 다음과 같이 HTTP 요청이 생성됩니다.
POST /foo.php HTTP/1.1
호스트 : LocalHost
사용자 에이전트 : 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, 응용 프로그램/xhtml+xml, application/xml; q = 0.9,*/*; q = 0.8
허용 : en-us, en; q = 0.5
인코딩 수락 : gzip, deflate
수락-문자 : ISO-8859-1, UTF-8; Q = 0.7,*; Q = 0.7
유지 : 300
연결 : 계속하십시오
참조 : http : //localhost/test.php
컨텐츠 유형 : 응용 프로그램/x-www-form-urlencoded
내용 길이 : 43
First_name = John & last_name = doe & action = 제출
주목해야 할 세 가지가 있습니다.
포스트 메소드 요청은 Ajax, 응용 프로그램, 컬에서도 사용할 수 있습니다. 모든 파일 업로드 양식은 게시물을 사용해야합니다.
헤드가 HTTP 응답의 내용 부분을 허용하지 않는 것을 제외하고는 헤드와 get가 매우 유사합니다. 헤드 요청을 보낼 때 문서 자체가 아닌 HTTP 헤더에만 관심이 있음을 의미합니다.
이 방법을 사용하면 브라우저가 페이지가 수정되었는지 여부를 결정하여 캐시를 제어 할 수 있습니다. 요청 된 문서가 존재하는지 여부도 결정할 수 있습니다.
예를 들어, 웹 사이트에 링크가 많으면 헤드 요청을 별도로 보내기 위해 DEAD 링크가 있는지 여부를 결정하여 Get을 사용하는 것보다 훨씬 빠릅니다.
브라우저가 HTTP 요청을 보내면 서버는 HTTP 응답을 통해 요청에 응답합니다. 콘텐츠에 신경 쓰지 않으면 요청이 다음과 같습니다.
첫 번째 귀중한 정보는 계약입니다. 현재 서버는 HTTP/1.X 또는 HTTP/1.1을 사용합니다.
다음으로 간단한 메시지는 상태를 나타냅니다. Code 200은 요청이 성공적으로 전송되었음을 의미하며 서버는 헤더 정보 후에 요청 된 문서를 반환합니다.
우리는 모두 404 페이지를 보았습니다. 서버에서 존재하지 않는 경로를 요청할 때 서버는 200 대신 404로 우리에게 응답합니다.
나머지 응답은 HTTP 요청과 유사합니다. 이들은 서버 소프트웨어에 관한 것이며, 페이지/파일이 수정되었을 때, 마임 유형 등 ...
마찬가지로 이러한 헤더 정보는 선택 사항입니다.
위에서 언급했듯이 200은 요청이 성공했음을 나타내는 데 사용됩니다.
206 부분 내용응용 프로그램이 특정 범위 내에서 파일 만 요청하면 206이 반환됩니다.
일반적으로 다운로드 관리, 중단 점 연속 또는 파일 청크 다운로드에 사용됩니다.
404 찾을 수 없습니다이해하기 쉽습니다
401 무단비밀번호 보호 페이지 가이 상태로 돌아갑니다. 올바른 암호를 입력하지 않으면 브라우저에 다음 정보가 표시됩니다.
이것은 단지 비밀번호로 보호되는 페이지 일뿐입니다. 비밀번호를 입력하도록 요청하는 팝업 상자는 다음과 같습니다.
403 금지페이지에 액세스 할 수있는 권한이 없으면 403 상태로 돌아갑니다. 일반적으로 인덱스 페이지없이 폴더를 열 때 발생합니다. 서버 설정에서 디렉토리 내용을 볼 수없는 경우 403 오류가 표시됩니다.
다른 방법으로는 IP 주소를 통해 차단할 수있는 허가 제한을 보냅니다.
order allow,deny
192.168.44.201에서 거부
224.39.163.12에서 거부
172.16.7.92에서 거부
모두에게 허용합니다
302 (또는 307)는 일시적으로 움직 였고 301은 영구적으로 움직였습니다이 두 상태는 브라우저가 리디렉션 될 때 나타납니다. 예를 들어 Bit.ly와 같은 URL 단축 서비스를 사용합니다. 이것은 또한 그들이 링크를 클릭 한 사람을 아는 방법이기도합니다.
302와 301은 브라우저와 매우 유사하지만 검색 엔진 크롤러에는 차이가 있습니다. 예를 들어, 귀하의 웹 사이트가 유지 관리되는 경우 302로 클라이언트 브라우저를 다른 주소로 리디렉션합니다. 검색 엔진 크롤러는 향후 페이지를 다시 표시합니다. 그러나 301 리디렉션을 사용하는 경우 검색 엔진 크롤러에 알려줍니다. 웹 사이트가 새 주소로 영구적으로 이동되었습니다.
500 서버 오류 (내부 서버 오류)이 코드는 일반적으로 페이지 스크립트가 충돌 할 때 나타납니다. 대부분의 CGI 스크립트는 PHP와 같은 브라우저에 오류 메시지를 출력하지 않습니다. 치명적인 오류가 발생하면 상태 코드가 500 만 보냅니다.이 시점에서는 서버 오류 로그를 확인하여 문제를 해결해야합니다.
전체 목록여기에서 전체 HTTP 상태 코드 설명을 찾을 수 있습니다. 또는 여기에서 확인하십시오 (http://tools.vevb.com/table/http_status_code).
이제 HTTP 헤더의 일반적인 HTTP 요청 정보를 살펴 보겠습니다.
이 모든 헤더 정보는 PHP의 $ _server 배열에서 찾을 수 있습니다. getAllHeaders () 함수를 사용하여 모든 헤더 정보를 한 번에 얻을 수도 있습니다.
HTTP 요청은 특정 IP 주소로 전송되지만 대부분의 서버는 동일한 IP 주소로 여러 웹 사이트를 호스팅 할 수 있으므로 서버는 브라우저 요청의 도메인 이름을 알아야합니다.
Host: rlog.cn
이것은 도메인 이름 및 하위 도메인 이름을 포함한 기본 호스트 이름입니다.
PHP에서는 $ _server [ 'http_host'] 또는 $ _server [ 'server_name']를 통해 볼 수 있습니다.
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)
이 헤드는 다음과 같은 정보를 전달할 수 있습니다.
이것은 일부 웹 사이트에서 방문자 정보를 수집하기 위해 사용하는 일반적인 방법입니다. 예를 들어, 방문자가 휴대 전화를 사용하여 웹 사이트를 방문한 다음 저해상도에서 잘 수행되는 모바일 웹 사이트로이를 지시할지 여부를 결정할 수 있습니다.
PHP에서 사용자 에이전트는 $ _server [ 'http_user_agent']를 통해 얻을 수 있습니다.
if ( strstr($_SERVER['HTTP_USER_AGENT'],'MSIE 6') ) {
echo IE6 사용을 중단하십시오!;;
}
Accept-Language: en-us,en;q=0.5
이 정보는 사용자의 기본 언어 설정을 나타낼 수 있습니다. 웹 사이트에 다른 언어 버전이있는 경우이 정보를 사용하여 사용자의 브라우저를 리디렉션 할 수 있습니다.
쉼표 세분화에 의해 여러 언어로 운반 할 수 있습니다. 첫 번째는 선호하는 언어이며, 다른 언어는 Q 값을 가지고 언어에 대한 사용자의 선호도를 나타냅니다 (0 ~ 1).
PHP에서 $ _server [http_accept_language]를 사용 하여이 정보를 얻으십시오.
if (substr($_SERVER['HTTP_ACCEPT_LANGUAGE'], 0, 2) == 'fr') {
헤더 ( '위치 : http://french.mydomain.com');
}
Accept-Encoding: gzip,deflate
대부분의 최신 브라우저는 GZIP 압축을 지원 하며이 정보를 서버에보고합니다. 현재 압축 된 HTML이 브라우저로 전송됩니다. 이렇게하면 파일 크기를 거의 80% 줄일 수있어 다운로드 시간과 대역폭을 절약 할 수 있습니다.
이 정보는 php에서 $ _server [http_accept_encoding]을 사용하여 얻을 수 있습니다. 그런 다음 OB_GZHANDLER () 메소드가 호출되면 값이 자동으로 감지되므로 수동으로 감지 할 필요가 없습니다.
// enables output buffering
// 브라우저가 지원하면 모든 출력이 압축됩니다.
OB_START ( 'OB_GZHANDLER');
브라우저에 페이지가 캐시 된 경우 다음에 브라우저를 탐색 할 때 문서가 수정되었는지 확인하고 다음과 같은 헤더를 보냅니다.
If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT
이 시간 이후 수정되지 않은 경우 서버는 304를 수정하지 않고 컨텐츠를 반환하지 않습니다. 브라우저는 캐시의 콘텐츠를 자동으로 읽습니다
PHP에서는 $ _server [ 'http_if_modified_since']를 사용하여 감지 할 수 있습니다.
// assume $last_modify_time was the last the output was updated
// 브라우저가 if modified-since 헤더를 보내 었습니까?
if (isset ($ _ server [ 'http_if_modified_since')) {
// 브라우저 캐시가 수정 된 시간과 일치하는 경우
if ($ last_modify_time == strtotime ($ _ server [ 'http_if_modified_since')) {
// 304 헤더를 보내고 내용이 없습니다
헤더 (HTTP/1.1 304 수정되지 않음);
출구;
}
}
ETAG라는 HTTP 헤더도 있습니다. Etag는 캐시 된 정보가 올바른지 여부를 결정하는 데 사용되며 나중에 설명하겠습니다.
이름에서 알 수 있듯이 브라우저에 저장된 쿠키 정보를 서버로 보냅니다.
Cookie: PHPSESSID=r2t5uvjq435r4q7ib3vtdjq120; foo=bar
이름 값 쌍이 세미콜론으로 나눈 세트입니다. 쿠키에는 세션 ID도 포함될 수도 있습니다.
PHP에서 $ _cookie 배열에 액세스하여 단일 쿠키를 얻을 수 있습니다. $ _session 배열을 직접 사용하여 세션 변수를 얻을 수 있습니다. 세션 ID가 필요한 경우 쿠키 대신 Session_id () 함수를 사용할 수 있습니다.
echo $_COOKIE['foo'];
// 출력 : 막대
echo $ _cookie [ 'phpsessid'];
// 출력 : r2t5uvjq435r4q7ib3vtdjq120
session_start ();
echo session_id ();
// 출력 : r2t5uvjq435r4q7ib3vtdjq120
이름에서 알 수 있듯이 헤더에는 참조 URL 정보가 포함됩니다.
예를 들어 Nettus+의 홈페이지를 방문하여 링크를 클릭하면이 헤더가 브라우저로 전송됩니다.
Referer: http://net.tutsplus.com/
PHP에서 값은 $ _server [ 'http_referer']에 의해 얻을 수 있습니다.
if (isset($_SERVER['HTTP_REFERER'])) {
$ url_info = parse_url ($ _ server [ 'http_referer']);
// 서퍼가 Google에서오고 있습니까?
if ($ url_info [ 'host'] == 'www.google.com') {
parse_str ($ url_info [ 'query'], $ vars);
이 키워드를 위해 Google에서 검색 한 Echo :. $ vars [ 'Q'];
}
}
// 참조 URL이 다음과 같은 경우
// http://www.google.com/search?source=ig&hl=en&rlz=&=http+headers&aq=f&oq=&aq=g-p1g9
// 출력은 다음과 같습니다.
//이 키워드를 위해 Google에서 검색했습니다 : HTTP 헤더
당신은 단어 참조자가 참조 자로 철자가 틀린 것을 보았을 것입니다. 불행히도 그것은 공식 HTTP 사양으로 만들어져 붙어있었습니다.
페이지에 승인이 필요한 경우 브라우저가 로그인 창이 나타납니다. 올바른 계정을 입력 한 후 브라우저는 HTTP 요청을 보내지 만 헤더가 포함됩니다.
Authorization: Basic bXl1c2VyOm15cGFzcw==
헤더에 포함 된 정보 의이 부분은 Base64 인코딩되었습니다. 예를 들어, base64_decode ( 'bxl1c2vyom15cgfzcw ==')는 'myuser : mypass'로 변환됩니다.
PHP 에서이 값은 $ _server [ 'php_auth_user'] 및 $ _server [ 'php_auth_pw']로 얻을 수 있습니다.
WWW Authenticate 섹션에서 자세한 내용을 설명하겠습니다.
이제 Common HTTP 헤더의 HTTP 응답 정보를 이해해 드리겠습니다.
PHP에서는 헤더 응답 정보를 Header ()를 통해 설정할 수 있습니다. PHP는로드 된 컨텐츠, 쿠키 설정 등과 같은 필요한 헤더 정보를 자동으로 보냈습니다. Headers_Sent () 함수를 사용하여 헤더 정보가 전송되었는지 확인할 수도 있습니다.
W3.org는 다음과 같이 정의됩니다. 캐시 제어 일반 헤더 필드는 요청/응답 체인을 따라 모든 캐싱 메커니즘에 의해 순종 해야하는 지침을 지정하는 데 사용됩니다. 캐싱 메커니즘에는 ISP가 사용할 수있는 일부 게이트웨이 및 프록시 정보가 포함되어 있습니다.
예를 들어:
Cache-Control: max-age=3600, public
대중은 누구나 응답을 캐시 할 수 있고 최대 시대는 캐시가 유효한 초 수를 나타냅니다. 다운로드 시간과 대역폭을 크게 줄이고 브라우저로드 속도를 향상시키기 위해 웹 사이트를 캐시 할 수 있습니다.
No-Cache 명령을 설정하여 캐시를 비활성화 할 수도 있습니다.
Cache-Control: no-cache
자세한 내용은 w3.org를 참조하십시오.
이 헤더에는 문서의 마임 유형이 포함되어 있습니다. 브라우저는이 매개 변수를 기반으로 문서를 구문 분석하는 방법을 결정합니다. 예를 들어, HTML 페이지 (또는 HTML 출력이있는 PHP 페이지)는 다음과 같은 것을 반환합니다.
Content-Type: text/html; charset=UTF-8
'텍스트'는 문서 유형이고 'HTML'은 문서 하위 유형입니다. 이 헤더에는 Charset과 같은 자세한 정보도 포함되어 있습니다.
사진이면 이와 같은 응답이 전송됩니다.
Content-Type: image/gif
브라우저는 MIME 타입을 사용하여 외부 프로그램을 사용할지 여부를 결정하거나 문서 자체를 확장 할 수 있습니다. 다음 예제는 Adobe Reader에 대한 호출을 낮 춥니 다.
Content-Type: application/pdf
직접로드하면 Apache는 일반적으로 문서의 마임 유형을 자동으로 판단하고 헤더에 적절한 정보를 추가합니다. 또한 대부분의 브라우저에는 어느 정도의 결함 허용 오류가 있습니다. 헤더가 정보를 제공하지 않거나 잘못 제공하면 자동으로 MIME 유형을 감지합니다.
여기에서 일반적으로 사용되는 마임 유형 목록을 찾을 수 있습니다.
PHP에서는 finfo_file ()을 사용하여 파일의 IME 유형을 감지 할 수 있습니다.
이 헤더는 브라우저에 응답의 내용을 구문 분석하는 대신 파일 다운로드 창을 열도록 지시합니다. 예를 들어:
Content-Disposition: attachment; filename=download.zip
브라우저가 다음과 같은 대화를하게합니다.
그에 맞는 컨텐츠 유형 헤더 정보도 전송됩니다.
Content-Type: application/zip
내용화 : 첨부 파일; filename = download.zip
내용이 브라우저로 전송되면 서버는이 헤더를 사용하여 전송할 파일의 크기 (바이트)를 브라우저에 알릴 수 있습니다.
Content-Length: 89123
이 정보는 파일 다운로드에 매우 유용합니다. 이것이 바로 브라우저가 다운로드의 진행 상황을 알고있는 이유입니다.
예를 들어, 여기에 느린 다운로드를 시뮬레이션하기 위해 가상 스크립트를 작성했습니다.
// it's a zip file
헤더 ( '내용 유형 : 응용 프로그램/zip');
// 1 백만 바이트 (약 1megabyte)
헤더 ( '내용 길이 : 10000000');
// 다운로드 대화 상자를로드하고 다운로드로 저장합니다.
헤더 ( 'content-disposition : 첨부 파일; filename = download.zip');
// 1000 회 1000 바이트의 데이터
for ($ i = 0; $ i <1000; $ i ++) {
echo str_repeat (., 1000);
// 다운로드 속도를 늦추기 위해 잠을 자십시오
usleep (50000);
}
결과는 다음과 같습니다.
이제 컨텐츠 길이 헤더에 댓글을 달았습니다.
// it's a zip file
헤더 ( '내용 유형 : 응용 프로그램/zip');
// 브라우저는 크기를 알지 못합니다
// 헤더 ( '컨텐츠 길이 : 10000000');
// 다운로드 대화 상자를로드하고 다운로드로 저장합니다.
헤더 ( 'content-disposition : 첨부 파일; filename = download.zip');
// 1000 회 1000 바이트의 데이터
for ($ i = 0; $ i <1000; $ i ++) {
echo str_repeat (., 1000);
// 다운로드 속도를 늦추기 위해 잠을 자십시오
usleep (50000);
}
결과는 다음과 같습니다.
이 브라우저는 다운로드 한 금액 만 알려주지 만 총 다운로드해야 할 금액은 알려주지 않습니다. 그리고 진행률 바는 진행 상황을 보여주지 않을 것입니다.
캐시 용으로 생성 된 또 다른 헤더 정보입니다. 다음과 같이 보일 것입니다.
Etag: pub1259380237;gz
서버는 전송 된 파일을 브라우저로 보면이 정보에 응답 할 수 있습니다. 이 값에는 문서의 마지막 수정 날짜, 파일 크기 또는 파일 체크섬이 포함될 수 있습니다. 브라우징은 수신 된 문서와 함께 캐시합니다. 다음에 브라우저가 동일한 파일을 다시 요청하면 다음 HTTP 요청이 전송됩니다.
If-None-Match: pub1259380237;gz
요청 된 문서 ETAG 값이 IT와 일치하는 경우 서버는 2OO 대신 304 상태 코드를 보냅니다. 그리고 콘텐츠가 반환되지 않습니다. 브라우저는 현재 캐시에서 파일을로드합니다.
이름에서 알 수 있듯이이 헤더 정보는 GMT 형식을 사용하여 문서의 마지막 수정 시간을 나타냅니다.
Last-Modified: Sat, 28 Nov 2009 03:50:37 GMT
$modify_time = filemtime($file);
헤더 (마지막으로 변형 :. gmdate (d, d myh : i : s, $ modify_time). gmt);
또 다른 캐싱 메커니즘을 제공합니다. 브라우저는 다음과 같은 요청을 보낼 수 있습니다.
If-Modified-Since: Sat, 28 Nov 2009 06:38:19 GMT
우리는 이미 if-modified-since 섹션에서 그것을 논의했습니다.
이 헤더는 리디렉션에 사용됩니다. 응답 코드가 301 또는 302 인 경우 서버는 헤더를 보내야합니다. 예를 들어 http://www.nettus.com을 방문하면 브라우저에 다음 응답이 제공됩니다.
HTTP/1.x 301 Moved Permanently
...
위치 : http://net.tutsplus.com/
...
PHP에서는 이런 식으로 방문자를 리디렉션 할 수 있습니다.
header('Location: http://net.tutsplus.com/');
기본적으로 302 상태 코드가 전송됩니다. 301을 보내려면 다음과 같이 작성하십시오.
header('Location: http://net.tutsplus.com/', true, 301);
웹 사이트에서 찾아 보는 쿠키 정보를 설정하거나 업데이트 해야하는 경우 이러한 헤더를 사용합니다.
Set-Cookie: skin=noskin; path=/; domain=.amazon.com; expires=Sun, 29-Nov-2009 21:42:28 GMT
세트 쿠키 : 세션 -ID = 120-7333518-8165026; 경로 =/; 도메인 = .amazon.com; 만료 = 2 월 27 일 08:00:00 2010 GMT
각 쿠키는 별도의 헤더로 사용됩니다. JS를 통해 쿠키를 설정하는 것은 HTTP 헤더에 반영되지 않습니다.
PHP에서는 setCookie () 함수를 통해 쿠키를 설정할 수 있으며 PHP는 적절한 HTTP 헤더를 보냅니다.
setcookie(TestCookie, foobar);
다음과 같은 헤더를 보냅니다.
Set-Cookie: TestCookie=foobar
만료 시간이 지정되지 않으면 브라우저가 닫힌 후 쿠키가 삭제됩니다.
웹 사이트는이 헤더 정보를 HTTP로 보내 사용자를 확인할 수 있습니다. 브라우저가 헤드 에서이 응답을 볼 때 팝업 창이 열립니다.
WWW-Authenticate: Basic realm=Restricted Area
다음과 같이 보일 것입니다.
PHP 매뉴얼의 한 장에는 PHP로 이와 같은 작업을 수행하는 방법을 보여주는 간단한 코드가 있습니다.
if (!isset($_SERVER['PHP_AUTH_USER'])) {
헤더 ( 'www-authenticate : 기본 영역 = 내 영역');
헤더 ( 'http/1.0 401 무단 무단');
사용자가 취소 버튼을 누르면 echo '텍스트를 보낼 텍스트';
출구;
} 또 다른 {
echo <p> hello {$ _server [ 'php_auth_user']}. </p>;
echo <p> 당신은 당신의 암호로 {$ _server [ 'php_auth_pw']}를 입력했습니다. </p>;
}
이 헤더는 일반적으로 반환 내용이 압축 될 때 설정됩니다.
Content-Encoding: gzip
PHP에서 OB_GZHANDLER () 함수를 호출하면이 헤더가 자동으로 설정됩니다.
원래 주소 : http://css9.net/all-about-http-headers/