8.HTTP工作原理
Linux9期架构-day08
课前回顾
URL:协议 + 主机 + 端口 + 文件路径
# 什么是URL
统一资源定位符(唯一标识)
# URL的组成
URL由协议、主机和端口(默认为80)以及文件名三部分构成
例:http://www.biadu.com:90/epel/1.txt
# http:// -------> 协议
# www.biadu.com:90 -------> 主机ip:端口
# 文件名和路径 -------> 服务器站点目录下的目录和文件
HTTP:超文本传输协议
# 包含有超链接(link)和各种多媒体元素(Markup)的文本,这些超文本彼此连接,形成网状(webPage)。这些链接使用URL表示。最常见的超文本格式是超文本标记语言HTML。
也可以这么理解:通过一个超链接,打开一个文本
当我们打开浏览器访问百度:https://www.baidu.com
浏览器在帮你,去百度的服务器上下载一个文本(index.html)
HTTP的工作原理(粗略概括)
访问 URL: https://blog.driverzeng.com/zenglaoshi/2039.html
# 1.浏览器接收到url,对url进行解析,取出域名
# 2.将域名交给DNS服务器,询问DNS服务器该域名对应的IP是啥
- 检查localDNS
- 检查13个根域
- 递归查询
- 迭代查询
# 3.DNS将IP返回给浏览器
# 4.浏览器与DNS返回的IP的80端口建立TCP连接
# 5.请把你站点目录下/zenglaoshi目录下的2039.html发给我
# 6.服务器,响应返回一个状态码,浏览器就断开TCP连接
# 7.如果状态码是2xx或者3xx,就可以加载页面
访问网站分析
1.访问 URL: https://blog.driverzeng.com/zenglaoshi/2039.html,浏览器接收到url,对url进行解析,取出域名。https://blog.driverzeng.com/
下面都是目录或者参数
2.浏览器请求DNS服务器解析域名,
3.DNS服务器回复
工作流程:用输入域名 - > 浏览器跳转 - > 浏览器缓存 - > Hosts文件 - > DNS解析(递归查询|迭代查询) ,找到对应IP之后回复
4.建立tcp连接
流程:浏览器向blog.driverzeng.com服务器地址发起tcp三次握手
发起http
请求报文
PC向blog.driverzeng.com服务器发出GET请求,请求主页面,请求头部,请求空行
5.服务器回应
响应头部,响应空行,发送主体
页面分析
# 基本信息
请求网址:https://www.driverzeng.com/
请求方法:GET
远程地址:39.104.203.184:443
状态码:
200
版本:HTTP/1.1
Request URL: http://www.biadu.com/
Request Method: GET
Status Code: 200 OK
Remote Address: 10.0.0.7:80
Referrer Policy: no-referrer-when-downgrade
# 请求头部
##请求的域名
:authority: blog.driverzeng.com
## 请求的方式
:method:GET
##请求的路径
:path:/
##请求的协议
:scheme:https
## 请求的资源类型
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/\*=0.8,application/signed-exchange;v=b3
## 资源类型压缩
Accept-Encoding: gzip, deflate
## 资源类型的语言
Accept-Language: zh-CN,zh;q=0.9
## 缓存控制:服务端没有开启缓存
Cache-Control: no-cache
## 长连接
Connection: keep-alive
## 访问的主机:www.biadu.com
Host: www.biadu.com
## 项目缓存:没有开启
Pragma: no-cache
## 客户端优先加密
Upgrade-Insecure-Requests: 1
## 用户访问网站的客户端工具
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/75.0.3770.142 Safari/537.36
# 响应头部
Connection: keep-alive # 建立长连接
Content-Type: text/html;charset=utf-8 # 解析方式和字符集
Date: Wed, 13 May 2020 02:29:35 GMT # 日期
server:Nginx/1.14.1 #该网站服务器,使用的软件和版本号
status: 200 #状态码
# 响应空行
# 主体
页面
...
<html>
<head>
<title>..................</title>
<meta http-equiv="Content-Type" content="text/html"; charset="utf-8">
<style type="text/css">
.bt{
font-size: 30px;
color: red;
text-align: center;
.........
6.完成响应
最后完成了数据的交互过程,TCP建立的连接经过三次握手之后,还要经过四次挥手,断开连接
HTTP请求方法
方法(Method) | 含义 |
---|---|
GET | 请求读取一个Web页面(下载一个页面) |
POST | 附加一个命名资(如Web页面)(上传) |
DELETE | 删除Web页面 |
CONNECT | 用于代理服务器 |
HEAD | 请求读取一个Web页面的头部 |
PUT | 请求存储一个Web页面 |
TRACE | 用于测试,要求服务器送回收到的请求 |
OPTION | 查询特定选项 |
HTTP响应方法
2xx和3xx都是网页可以正常访问
4xx:Nginx的报错(出错,出在nginx上)去检查nginx服务,或者服务器权限等...
5xx:后端报错(nginx后面连接的服务报错:mysql、php、tomcat、redis.......,如果不是前面的原因:你们的代码有问题,滚回去重写)
状态码 | 含义 |
---|---|
200 | 成功 |
301 | 永久重定向(跳转) |
302 | 临时重定向(跳转) |
304 | 本地缓存(浏览器的缓存) |
307 | 内部重定向(跳转) |
400 | 客户端错误 |
401 | 认证失败 |
403 | 找不到主页,权限不足 |
404 | 找不到页面 |
405 | 请求方法不被允许 |
500 | 内部错误(MySQL关闭等...) |
502 | bad gateway 坏了的网关(php tomcat 等服务关闭) |
503 | 服务端请求限制 |
504 | 请求超时 |
头部信息
User-Agent:浏览器标识(操作系统标识;加密等级标识;浏览器语言)渲染引擎标识 版本信息
Server:响应头包含处理请求的原始服务器的软件信息
Referer:浏览器向 WEB 服务器表明自己是从哪个 网页/URL 获得/点击 当前请求中的网址/URL
详细的http原理
1.用输入域名 - > 浏览器跳转 - > 浏览器缓存 - > Hosts文件 - > DNS解析(递归查询|迭代查询)
客户端向服务端发起查询 - > 递归查询
服务端向服务端发起查询 - > 迭代查询
2.由浏览器向服务器发起TCP连接(三次握手)
客户端 -->请求包连接 -syn=1 seq=x 服务端
服务端 -->响应客户端syn=1 ack=x+1 seq=y 客户端
客户端 -->建立连接 ack=y+1 seq=x+1 服务端
3.客户端发起http请求:
1)请求的方法是什么: GET获取
2)请求的Host主机是: blog.driverzeng.com
3)请求的资源是什么: /index.html
4)请求的端端口是什么: 默认http是80 https是443
5)请求携带的参数是什么: 属性(请求类型、压缩、认证、浏览器信息、等等)
6)请求最后的空行
4.服务端响应的内容是
1)服务端响应使用WEB服务软件
2)服务端响应请求文件类型
3)服务端响应请求的文件是否进行压缩
4)服务端响应请求的主机是否进行长连接
5.客户端向服务端发起TCP断开(四次挥手)
客户端 --> 断开请求 fin=1 seq=x --> 服务端
服务端 --> 响应断开 fin=1 ack=x+1 seq=y --> 客户端
服务端 --> 断开连接 fin=1 ack=x+1 seq=z --> 客户端
客户端 --> 确认断开 fin=1 ack=x+1 seq=sj --> 服务端