PHP面試之網絡協議面試題

你好,是我琉憶。
本篇是本週(2019.2-25至3-1)的最後一篇文章。
以前的文章能夠關注個人「PHP面試」專欄獲取,或者關注個人公衆號「琉憶編程庫」查看歷史獲取。php

我正在segmentfault社區送兩本書: 《PHP程序員面試筆試真題解析》 ,今晚(3月1日)19點開獎,歡迎參與。

明天就是週末了,提早祝各位週末愉快。html

面試時如何給本身添金?沒接觸過支付功能?爲此特地準備了一篇「 新手零基礎對接境外支付paypal」的文章,爲你面試添金,關注公衆號:「 琉憶編程庫」,回覆:「 pay」,我發給你。

如下正文的內容來自《PHP程序員面試筆試真題解析》書籍,若是轉載請保留出處:程序員


【真題1】如何利用PHP解決HTTP的無狀態本質?

答案:可使用Session和Cookie記住用戶,監控是否同一個用戶在操做。使用Session前須要在頁面使用session_start()開啓Session。而後使用$_SESSION來存儲Session變量。
使用Cookie時,需使用set_cookie()設置Cookie,而後使用$_COOKIE取Cookie值。面試


【真題2】HTTP的Keep-Alive做用是什麼?

答案:HTTP的Keep-Alive做用以下:Keep-Alive使客戶端到服務器端的鏈接持續有效,當出現對服務器的後繼請求時,Keep-Alive功能避免了創建或者從新創建鏈接。Web服務器基本上都支持HTTP Keep-Alive。
缺點:對於提供靜態內容的網站來講,這個功能一般頗有用。可是,對於負擔較重的網站來講,雖然爲客戶保留打開的鏈接有必定的好處,但它一樣影響了性能,由於在暫停使用的期間,原本能夠釋放的資源仍舊被佔用。因此當Web服務器和應用服務器在同一臺機器上運行時,Keep-Alive功能對資源利用的影響尤爲突出。
解決:Keep-Alive:timeout=5,max=100算法

timeout:過時時間5秒(對應httpd.conf裏的參數是:KeepAliveTimeout),max是最多請求一百次,強制斷掉鏈接。在timeout時間內又有新的鏈接過來時,max會自動減1,直到爲0,強制斷掉。

【真題3】如何快速下載一個遠程HTTP服務器上的圖片文件到本地?

答案:先經過fopen()函數打開要下載的圖片路徑,而後使用fread()函數讀取圖片,再在本地打開指定存儲圖片的目錄,將讀取到的圖片信息寫入到該目錄內的文件中,便可遠程下載一個圖片到本地。實現代碼以下:數據庫

<?php
    $file="http://static.nipic.com/images/originalNewtip.png";
    $fp=fopen($file,'rb');
    $img=fread($fp,100000);
    $dir="./";
    $local=fopen($dir.'/'.basename($file),'w');
    fwrite($local,$img);
?>

【真題4】請簡述HTTP中POST、GET、PUT、DELETE方式的區別。

答案:HTTP定義了與服務器交互的不一樣的方法,最基本的方法是POST、GET、PUT和DELETE,URL全稱是資源描述符,能夠認爲一個URL地址用於描述一個網絡上的資源,而對應的HTTP中的四種方法GET、POST、PUT、DELETE對應這個資源的查,改,增,刪四個操做。它們的具體功能爲:
(1)根據HTTP規範,GET用於信息獲取,信息應該是安全的;
(2)根據HTTP規範,POST表示能夠修改服務器上的資源的請求;
(3)PUT和POST極爲類似,都是向服務器發送數據,但它們之間有一個重要區別,PUT一般指定了資源的存放位置,而POST則沒有,POST的數據存放位置由服務器決定;
(4)DELETE的功能是刪除某一個資源。編程


【真題5】如何理解HTTP的gzip壓縮傳輸?

答案:HTTP下的gzip是一種流行的文件壓縮算法,在Linux平臺上使用十分普遍,gzip壓縮傳輸能更加有效節約帶寬流量。它先把文本壓縮爲.gz而後傳輸給瀏覽器,最後由瀏覽器負責解壓縮呈現給用戶,能夠下降網絡傳輸的字節數,加快網頁的加載速度。segmentfault


面試時如何給本身添金?沒接觸過支付功能?爲此特地準備了一篇「 新手零基礎對接境外支付paypal」的文章,爲你面試添金,關注公衆號:「 琉憶編程庫」,回覆:「 pay」,我發給你。

【真題6】如何給動態文件(如PHP頁面)作緩存?(即第二次刷新瀏覽器時,返回304狀態)

答案:304狀態的意思是當客戶端向服務端請求時,服務端告訴客戶端緩存的文檔沒有過時能夠繼續使用。
能夠經過如下方法做瀏覽器緩存:
(1)當用戶首次請求該文件的時候,經過HTTP HEAD的Last-Modified字段將該文件的最後修改日期發送到客戶端,讓客戶端知道該文件的版本,例如:
Last-Modified: Tue, 08 Apr 2008 14:48:05 GMT
(2)在瀏覽器再次請求該文件的時候,會自動將該時間做爲請求的HTTP HEAD的If-Modified-Since字段內容,例如:
 If-Modified-Since: Tue, 08 Apr 2008 14:48:05 GMT
(3)服務端根據If-Modified-Since字段的內容(若是存在該字段)來判斷客戶端的文件是否已通過期,若是已通過期,那麼從新返回新的文件,若是沒有,那麼只須要返回304狀態碼,就可結束輸出,這樣表明瀏覽器端的文件版本是最新的,不須要返回文件內容。瀏覽器


【真題7】真題47八、請寫出HTTP和HTTPS的區別。

clipboard.png


【真題8】IP是否能夠僞造?PHP中如何拿到真實IP?

答案:IP地址是能夠僞造的,客戶端能夠僞造IP地址或使用代理IP致使IP地址不是用戶的真實IP地址。
REMOTE_ADDR表明客戶端的IP地址,HTTP_X_FORWARDED_FOR是代理服務器的IP地址,存放真實的IP和各級代理IP。實現代碼以下:緩存

<?php
    function getIP(){ 
    $unknown = 'unknown'; 
    if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])&&$_SERVER['HTTP_X_FORWARDED_FOR']&&strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'],$unknown)){ 
        $IP = $_SERVER['HTTP_X_FORWARDED_FOR']; 
    }elseif(isset($_SERVER['REMOTE_ADDR'])&&$_SERVER['REMOTE_ADDR']&&strcasecmp($_SERVER['REMOTE_ADDR'],$unknown)){ 
        $IP = $_SERVER['REMOTE_ADDR']; 
    } 
    if (false !== strpos($IP,',')) $IP = reset(explode(',',$IP)); 
        return $IP; 
    } 
?>

【真題9】在HTTP 1.0中,狀態碼 401 的含義是( );若是返回「找不到文件」的提示,則可用 header 函數,其語句爲( )。

參考答案:客戶端在受權頭信息中沒有有效的身份信息時訪問受到密碼保護的頁面;header("HTTP/1.0 404 Not Found");。


【真題10】下列關於HTTP協議的說法中,錯誤的是( )。

A.若是本地開啓了Cookie,那麼每打開一個網址,HTTP請求就會把相應的Cookie傳給Web服務器
B.HTTP響應的狀態碼爲301,意思是暫時地把內容轉移到一個新的URL,可是老的URL尚未廢除
C.HTTP是一個基於請求與響應模式的、無狀態的、應用層的協議,絕大多數的Web開發都是基於HTTP協議
D.絕大多數的Web開發離不開Cookie,若是禁用Cookie致使Session失效,那麼能夠經過URL來傳遞sessionID
參考答案:B。
分析:301表示請求的網頁已被永久移動到新位置而不是暫時轉移內容到新的URL。因此,選項B說法錯誤。


預告:下週(3.4-3.8)將更新PHP面試之MySQL數據庫知識點,敬請期待。

以上內容摘自《PHP程序員面試筆試真題解析》書籍,該書已在天貓京東噹噹等電商平臺銷售。
圖片描述

更多PHP相關的面試知識、考題能夠關注公衆號獲取:琉憶編程庫
圖片描述

對本文有什麼問題或建議均可以進行留言,我將不斷完善追求極致,感謝大家的支持。

相關文章
相關標籤/搜索