浏览器请求过程-http

telHr4.jpg

浏览器

  1. 用户在浏览器中输入 URL 网址
  2. 浏览器解析用户输入的 URL 地址 => 域名 + 端口
  3. 浏览器会先检查本地缓存中有没有这个域名 => IP
    • 如果有, 则直接使用IP进行访问
    • 如果没有, 则浏览器发起一个 DNS 系统调用(操作系统进行查找)
      • 操作系统检查自己的缓存里有没有这个域名
      • 没有的话找系统的 hosts 文件中有没有这个域名
      • 如果都没有找到, 会对 DNS 服务器发起一个系统调用
  4. 浏览器通过一个本机的随机端口建立一个与服务器指定端口(80)之间的连接通道
  5. 浏览器会将客户端的一些信息打上一个“包”, 将这个“包”通过这个连接通道发送到服务端
  6. 打开服务端返回过来的“包”, 找到 Content-type, 决定如何处理响应的内容
  7. 如果是 HTML 则渲染到界面上
  8. “包”的概念是请求报文

注: 谷歌使用 chrome://net-intermals 查看浏览器缓存

服务器

  1. 打开客户端提交过来的“包”, 拿到“包”里面的请求路径
  2. 根据请求的路径对应文件扩展名找到文件的类型(MIME Type)
  3. 判断文件类型是否为静态文件
    • 如果是静态文件, 则直接读取这个文件的内容
    • 如果不是静态文件, 则交给“外包公司”执行代码
  4. 服务端拿到执行的结果, 把要发给客户端的数据打上一个“包”
  5. 将这个“包”再通过之前的连接通道发给客户端

请求报文

telf5q.png

响应报文

telbqJ.png

可以利用 PHP 对响应头进行一些配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<?php
// php 中 header 函数专门用于设置响应头, 不能设置两个相同的, 会被覆盖
// 设置响应类型
header('Content-type: text/css');

// 设置跳转(重定向)页面
header('location: xxx.php');

// 让文件下载
header('Content-type: application/octet-stream');

// 设置默认下载文件名
header('Content-Disposition: attachment; filename=demo.txt');

// 设置cookie
header('Set-Cookie: key=value');
?>
-------------本文结束感谢阅读-------------