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.服务器回应

响应头部,响应空行,发送主体

image-20200513162546741

页面分析

# 基本信息
请求网址: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 请求超时

头部信息

image-20200513184913163

User-Agent:浏览器标识(操作系统标识;加密等级标识;浏览器语言)渲染引擎标识 版本信息

image-20200513201540218

Server:响应头包含处理请求的原始服务器的软件信息

image-20200513203524848

Referer:浏览器向 WEB 服务器表明自己是从哪个 网页/URL 获得/点击 当前请求中的网址/URL

image-20200513204509565

详细的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 -->    服务端

浏览器输入URL后HTTP请求返回的完整过程 流程图

image-20200513212755653

posted @ 2020-06-01 23:21  柯正  阅读(299)  评论(0编辑  收藏  举报