PHP面试之网络协议面试题

31

你好,是我琉忆。
本篇是本周(2019.2-25至3-1)的最后一篇文章。
之前的文章可以关注我的“PHP面试”专栏获取,或者关注我的公众号“琉忆编程库”查看历史获取。

我正在segmentfault社区送两本书:《PHP程序员面试笔试真题解析》 ,今晚(3月1日)19点开奖,欢迎参与。

明天就是周末了,提前祝各位周末愉快。

面试时如何给自己添金?没接触过支付功能?为此特意准备了一篇“新手零基础对接境外支付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然后传输给浏览器,最后由浏览器负责解压缩呈现给用户,可以降低网络传输的字节数,加快网页的加载速度。


面试时如何给自己添金?没接触过支付功能?为此特意准备了一篇“新手零基础对接境外支付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】真题478、请写出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相关的面试知识、考题可以关注公众号获取:琉忆编程库
图片描述

对本文有什么问题或建议都可以进行留言,我将不断完善追求极致,感谢你们的支持。


如果觉得我的文章对你有用,请随意赞赏

你可能感兴趣的

Devilu · 3月1日

大兄弟
HTTP_X_FORWARDED_FOR 改个header 就伪造了
写的啥啊

+3 回复

oraoto · 3月1日

第3题的代码也太水了吧,还不如file_get_contents + file_put_contents。

+3 回复

载入中...