1. 程式人生 > >php中為什麼要用heade定義頭,有什麼應用場景

php中為什麼要用heade定義頭,有什麼應用場景

一、背景

      平時我們在寫程式碼的時候經常用定義header()相關的東西,以前博主也只是知其然不知其所以然,這裡總結一下,希望以後再碰到需要定義header的需求,能快速知道自己該這麼做。

二、什麼是header

      提起來header,首先想起來的就是請求頭,然後想起http協議相關。身為一個程式設計師,這輩子怕是和http結緣了。咱們這邊先不管http相關的東西,先說header。

概述 :一個網路請求路由到目標機器後,目標機器總要知道它要請求什麼,以什麼編碼方式傳輸,資料長度等資訊,這是表頭要表達的內容

文件:http://www.w3school.com.cn/php/func_http_header.asp

二、用到header的例項

1、為什麼要用header

      對後端人員來說,用header可以控制前端頁面的輸出。比如輸出json還是image。還能拒絕一些域名的訪問,比如laravel的中介軟體部分。可以限制前端頁面快取或者直接跳轉頁面等。或者是我們需要在方法裡面通過curl請求的時候,根據需求會自定義header部分等

2、具體的例項

(1)招聘網站的快取

      比如我們在招聘網站搜尋職位的時候,我們的需求應該是頁面不能有快取,使用者搜尋什麼,頁面必須立即顯示。那麼這部分我們可以在介面中定義header來實現該需求:

header("Cache-Control: no-store, no-cache, must-revalidate");    
        	header("Cache-Control: post-check=0, pre-check=0", false);    
       	 header("Pragma: no-cache");  //這個是為了適應IE瀏覽器的快取機制

具體參考連結:https://blog.csdn.net/fatong3/article/details/67638848

(2)驗證token 的中介軟體的跳轉 :

      我們在驗證身份的時候,驗證資訊的方法無非是(1、URL的get引數,2、協議的頭Header中,3、協議的請求正文內),包括博主這邊用到的laravel驗證身份的中介軟體,原理上也是通過把token放到header中實現的。

$request->headers->set('Authorization', 'Bearer ' . $token);

參考連結:
https://blog.csdn.net/qq_16234613/article/details/78843010
https://blog.csdn.net/huangwenting1990/article/details/52261592

(3)控制頁面返回內容

      這部分常用的就是php繪圖,然後直接返回圖片給頁面。或者生成pdf,直接返回給頁面等,這個時候就要定義header來實現。

(4)header還可以用在curl請求中

參考連結:https://www.cnblogs.com/handongyu/p/6955692.html

(5)限制特定的域名訪問資源

      這部分是可以通過header限制特定的域名訪問咱們的資源,也是為了保證正式環境的安全,拒絕一些不必要的跨域請求,只允許我們已知的安全的域名來訪問我們的資源。

程式碼:

  	$allow_origin = array(  
            'http://aaa.com',
            'http://bbb.com',      
        );
         $origin = isset($_SERVER['HTTP_ORIGIN']) ? $_SERVER['HTTP_ORIGIN'] : '';
          if (in_array($origin, $allow_origin)) {
            header("Access-Control-Allow-Origin:" . $origin);
          }

限定域名訪問也和咱們經常碰到的跨域問題有關,大家有興趣可以搜一下:Access-Control-Allow-Origin

更多例項參考:https://www.cnblogs.com/chengshan/p/6526567.html

三、注意事項

(1)一般來說在header函式前不能輸出html內容,類似的還有setcookie() 和 session 函式,這些函式需要在輸出流中增加訊息頭部資訊。

(2)如果在header()執行之前有echo等語句,當後面遇到header()時,就會報出 “Warning: Cannot modify header information – headers already sent by ….”錯誤。

(3)就是說在這些函式的前面不能有任何文字、空行、回車等,而且最好在header()函式後加上exit()函式。

      以上就是博主對header做的一次小總結了,看了很多文章,也結合自己碰到的情況總結的。感覺header還是挺常用的,關鍵還是理解http協議吧,內容很多,加油。

end