一次完整的HTTP请求过程
- 域名解析
- 发起TCP的3次握手
- 建立TCP连接后发起http请求
- 服务器响应http请求,浏览器得到html代码
- 浏览器解析html代码,并请求html代码中的资源(如js、css、图片等)
- 浏览器对页面进行渲染呈现给用户
域名解析
- 将域名解析成ip的过程,通过ip找到网站服务器
- 浏览器会首先查询浏览器的缓存(这个缓存存活时间可能只有1分钟)
- 没有,查询本地的dns缓存
- 没有,查询本地的hosts文件
- 没有,查询local dns(网卡配置信息里的dns服务器)它的缓存
- 没有,访问根域名服务器返回下一级(顶级域名服务器)ip,访问顶级域名服务器返回下一级(一级域名服务器)ip......,直至找到想要寻找的域名所对应ip。
- 把该ip发送给客户端,并记录在缓存中。
发起TCP的3次握手
http请求与响应
http请求报文
- 请求行
- 请求方法:主要有GET、HEAD、POST、PUT、DELETE、MOVE
- url:统一资源定位符,通过这个能在服务器上找到唯一的网页资源。
- 协议版本:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1
- 请求头部
- 媒体类型:主要有文本文件,图片文件,视频文件
- 语言类型
- 支持压缩
- 客户端类型
- 主机名
- 空行
- 代表请求头部的结束,也代表着请求主体的开始
- 请求主体
- 只有使用POST提交表单的时候才有
POST /index.php HTTP/1.1 请求行
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 5.1; rv:10.0.2) Gecko/20100101 Firefox/10.0.2 请求头
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8
Accept-Language: zh-cn,zh;q=0.5
Accept-Encoding: gzip, deflate
Connection: keep-alive
Referer: http://localhost/
Content-Length:25
Content-Type:application/x-www-form-urlencoded
空行
username=aa&password=1234 请求数据
http响应报文
- 响应行
- 协议版本:与请求报文一致
- 状态码:
- 状态码描述:
-
状态码 说明 200 代表ok
301 永久跳转 403 没权限 404 没有这个文件 500 未知的错误 502 网关错误 503 服务器超载,停机维护 504 网关超时
- 响应头部
- 与请求头部相类似
- 空行
- 响应报文主体
HTTP/1.1 200 OK 响应行
Date: Sun, 17 Mar 2013 08:12:54 GMT 响应头部
Server: Apache/2.2.8 (Win32) PHP/5.2.5
X-Powered-By: PHP/5.2.5
Set-Cookie: PHPSESSID=c0huq7pdkmm5gg6osoe3mgjmm3; path=/
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Pragma: no-cache
Content-Length: 4393
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=utf-8
空行
<html> 响应数据
<head>
<title>HTTP响应示例<title>
</head>
<body>
Hello HTTP!
</body>
</html>
本系列文章目的为个人准备面试的简单总结,文中多有不足,敬请批评指正!
参考:
https://blog.csdn.net/qq_30758629/article/details/80855495