PHP面试之网络协议面试题

6次阅读

共计 3446 个字符,预计需要花费 9 分钟才能阅读完成。

你好,是我琉忆。本篇是本周(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 的区别。

【真题 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 相关的面试知识、考题可以关注公众号获取:琉忆编程库
对本文有什么问题或建议都可以进行留言,我将不断完善追求极致,感谢你们的支持。

正文完
 0