什么是请求和响应
如下图所示, 我们用自己的电脑, 通过浏览器 [火狐, IE,Chrome 等浏览器] 在地址栏输入自己想要访问的网站 url, 回车之后便能看到该网址展示的内容. 这个过程就包含了目标网址的请求, 远程服务器的请求处理和内容返回, 浏览器收到返回内容进行展示.
请求 - 响应
请求 url 组成
例如: http://www.dtest.com/learnyii/requirements.php [我本机配置的 web 服务] 或者
url 包含:
协议 [http/https 等]
ip / 域名 [/ http://www.dtest.com/ ] 端口 [80/8080 等, 默认 80 可以省略]
uri[/learnyii/requirements.PHP]
网络中每一台电脑都有 ip 地址, 如同人的身份证, 能够唯一定位到这台电脑. uri 则是资源路径, 定位了这台电脑, 再加上这个资源路径, 就能找到这个资源, 并将资源返回给我们的电脑. 但是 ip 地址很难记忆, 于是有了域名, 一个域名对应一个 ip, 这个对应关系存储在一台服务器上, 这个服务器被命名为 dns 服务器, 这台服务器的任务就是解析域名为其对应的 ip 地址, 请求是通过 ip 地址寻址到对应电脑的.
具体请求了什么, 返回了什么
- Request Headers
- Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
- Accept-Encoding: gzip, deflate
- Accept-Language: zh-CN,zh;q=0.9,en;q=0.8
- Connection: keep-alive
- Host: www.dtest.com
- Referer: http://www.dtest.com/learnyii/
- Upgrade-Insecure-Requests: 1
- User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_3) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.121 Safari/537.3
请求头携带了: 可以接收的内容格式, 编码, 语言, 连接状态, 请求主机, 我来自的上一个页面地址, 使用的什么浏览器.
- Response Headers
- Connection: keep-alive
- Content-Type: text/HTML; charset=UTF-8
- Date: Fri, 15 Mar 2019 02:58:12 GMT
- Server: nginx/1.15.9
- Transfer-Encoding: chunked
- X-Powered-By: PHP/7.2.15
响应头包含了连接状态, 返回的内容类型和编码, 服务端处理请求的软件和版本等
响应体
- <!DOCTYPE HTML>
- <HTML lang="en">
- <head>
- <meta charset="utf-8"/>
- <title>Yii Application Requirement Checker</title>
- <style type="text/CSS">
- *{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}
- ......
我们真正看到的内容, 该响应体是 HTML 文本内容, 浏览器可以对 HTML 标记语言写的内容进行解析, 解析成我们看到的那样比较漂亮的样子.
请求发出到返回过程
浏览器地址栏输入 url 后回车, 就会发送请求, 首先会去本机 hosts 找该域名对应的 ip, 没有则会找 dns 域名服务器, 拿到对应 ip, 找到网络中要访问的那台电脑, uri 则说明了要访问目标电脑上的资源路径, 就可以定位该资源.
通过找本机 hosts, 发现 http://www.dtemp.com/ 对应 ip 为 127.0.0.1, 即本机, 我们使用的 nginx 配置监听 80 端口, 所以请求被 nginx 接收. nginx 根据 Web 根目录配置和 uri /test.PHP, 即可找到该资源. 发现是请求的是 PHP 文件, 则转发请求到 9000 端口, 交给了 PHP-fpm.PHP-fpm 利用 PHP 解释器处理完成后返回给 nginx,nginx 将结果通过 http 返回给浏览器.
来源: http://www.jianshu.com/p/1ecfbfeaac54