HTTP协议中几个状态码的含义
200 : 请求成功,请求的数据随之返回。
301 : 永久性重定向。
302 : 暂时行重定向。
401 : 当前请求需要用户验证。
403 : 服务器拒绝执行请求,即没有权限。
404 : 请求失败,请求的数据在服务器上未发现。
500 : 服务器错误。一般服务器端程序执行错误。
502 : Bad Gateway:作为网关或者代理工作的服务器尝试执行请求时,从上游服务器接收到无效的响应。
503 : 服务器临时维护或过载。这个状态时临时性的。
504 : Gateway Time-out:作为网关或者代理工作的服务器尝试执行请求时,未能及时从上游服务器(URI标识出的服务器,例如HTTP、FTP、LDAP)或者辅助服务器(例如DNS)收到响应
说一下常用框架路由原理
Laravel 是一款流行的 PHP 框架,其路由系统是其核心之一。Laravel 的路由系统可以将 URL 请求映射到相应的控制器和方法上。下面是 Laravel 路由的工作原理:
- 当一个请求到达应用程序时,Laravel 的路由系统会检查 URL,并将其解析为控制器和方法。
- 路由系统首先解析 URL 中的域名、URI、HTTP 方法和路由参数,以确定哪个控制器和方法应该处理请求。
- 如果 URL 中没有提供 HTTP 方法,则默认使用 GET 方法。
- 路由系统会根据应用程序中定义的路由规则,对解析后的 URL 进行处理。路由规则可以通过路由文件进行设置。
- 如果没有与路由规则匹配的 URL,则路由系统会抛出 404 错误。
- 如果路由匹配成功,路由系统会将请求发送给相应的控制器和方法进行处理。
- 路由系统还支持中间件,用于在请求到达控制器之前或之后执行某些逻辑。中间件可以用于身份验证、授权等操作。
在 Laravel 中,路由系统是可定制和可扩展的。通过设置不同的路由规则和中间件,可以自定义 URL 映射到控制器和方法的方式,并增强应用程序的功能。
说一下Websocket请求过程
WebSocket 是一种基于 HTTP 协议的双向通信协议,可以在浏览器和服务器之间建立一个持久的连接,实现实时双向数据传输。
下面是 WebSocket 请求过程的简要描述:
- 客户端向服务器发起 HTTP 请求,请求头包含了
Upgrade: websocket
和Connection: Upgrade
两个字段,告诉服务器需要升级协议为 WebSocket。 - 服务器返回 HTTP 响应,响应头包含了
Upgrade: websocket
和Connection: Upgrade
两个字段,表示同意升级协议为 WebSocket。响应头还包含了Sec-WebSocket-Accept
字段,该字段的值是经过一定算法计算得到的,用于验证客户端请求的合法性。 - 客户端再次发送 HTTP 请求,请求头包含了
Upgrade: websocket
和Connection: Upgrade
两个字段,以及Sec-WebSocket-Key
字段,该字段的值是随机生成的字符串,用于计算服务器返回的Sec-WebSocket-Accept
字段的值。 - 服务器返回 HTTP 响应,响应头包含了
Upgrade: websocket
和Connection: Upgrade
两个字段,以及Sec-WebSocket-Accept
字段,该字段的值是根据客户端请求头中的Sec-WebSocket-Key
字段计算得到的值。服务器返回的响应头中还可能包含了其他字段,例如Sec-WebSocket-Protocol
字段,用于指定协议版本。 - 客户端和服务器建立 WebSocket 连接,建立连接后,客户端和服务器之间可以进行双向数据传输。
在 WebSocket 连接建立之后,客户端和服务器之间就可以通过发送消息来实现实时双向数据传输。WebSocket 协议具有高效、实时、双向传输等特点,广泛应用于在线聊天、多人协同编辑、实时游戏等场景。
Workman怎么更改IO模式
Workerman 是一个高性能的 PHP 异步编程框架,它默认使用的是 Select IO 模型。如果需要更改 IO 模式,可以通过修改配置文件或者在代码中设置的方式进行修改。
- 修改配置文件:在 Workerman 的配置文件中,可以通过设置
transport
参数来更改 IO 模式,例如:
1 | $worker = new Worker('tcp://0.0.0.0:2345'); |
支持的 IO 模式包括 tcp
、udp
、unix
、ssl
、websocket
等。
- 在代码中设置:可以在代码中直接设置 IO 模式,例如:
1 | $worker = new Worker('tcp://0.0.0.0:2345'); |
支持的 IO 模式包括 Select
、Epoll
、Event
等。
需要注意的是,不同的 IO 模型具有不同的优缺点,需要根据具体的业务需求和系统环境进行选择和调优。在使用 Workerman 进行开发时,建议先进行基准测试,评估系统的性能和可靠性,再根据实际情况选择合适的 IO 模型。
http协议的header中有哪些key及含义
General
Request URL: http://localhost/test/t.php
Request Method: GET
Status Code: 200 OK
Remote Address: 127.0.0.1:80
Referrer Policy: no-referrer-when-downgrade
Reaponse Headers
Connection: keep-alive
Content-Encoding: gzip
Content-Type: text/html; charset=UTF-8
Date: Mon, 07 May 2018 10:05:43 GMT
Server: nginx/1.10.1
Transfer-Encoding: chunked
X-Powered-By: PHP/7.0.8
Request Headers
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
Cache-Control: no-cache
Connection: keep-alive
Host: localhost
Pragma: no-cache
Referer: http://localhost/test/
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/66.0.3359.117 Mobile Safari/537.36
PHP中发起http请求有哪几种方式?它们有何区别?
curl
stream流的方式
socket方式
https://segmentfault.com/a/1190000010302052
请写出自少两个支持回调处理的PHP函数,并自己实现一个支持回调的PHP函数
1 | array_reduce(); |
从用户在浏览器中输入网址并回车,到看到完整的页面,中间都经历了哪些过程
浏览器->url->dns->ip->port->tcp->nginx->server name->php-fpm/fast cgi->php
^ <- client ip:port <- ^ <- ^ <-
整个过程大概会涉及这些,里面的细节可以去了解一下
顺便问一下: fast cgi是什么? php和php-fpm是啥关系?