http协议工作原理及工作流程
什么是url ?
url = 协议 + 域名 + 资源路径 比如: https://www.baidu.com/index.html
- http : 超文本传输协议
- https: 安全套接字协议
HTTP的工作原理
访问https://mirrors.aliyun.com/centos-vault/readme.txt的时候发生了什么?
1、浏览器解析url,对url进行解析域名对应的IP
2、将域名交给DNS服务器,询问dns服务器该域名对应IP是什么
3、DNS返回IP给浏览器
4、浏览器与DNS返回的IP的80端口进行tcp连接
5、请求站点目录下的centos-vault/readme.txt
6、服务器响应返回一个状态码,浏览器就断开tcp连接
7、如果状态码是2xx或者是3xx,就可以加载页面
请求分析
页面信息
# 基本信息
Request URL: https://www.baidu.com/ # 请求的主机
Request Method: GET # http请求方法
Status Code: 200 OK # 返回的状态码
Remote Address: 14.215.177.39:443 # 目标主机的ip和端口
Referrer Policy: no-referrer-when-downgrade
# 响应头部
Bdpagetype: 1
Bdqid: 0xbb77515a0073bd0f
Cache-Control: private
Connection: keep-alive # 建立长连接
Content-Encoding: gzip
Content-Type: text/html;charset=utf-8 # 解析方式和字符集
Date: Wed, 13 May 2020 02:23:21 GMT # 日期
Expires: Wed, 13 May 2020 02:22:25 GMT
Server: BWS/1.1 # web服务器的名称
Set-Cookie: BDSVRTM=0; path=/
Set-Cookie: BD_HOME=1; path=/
Set-Cookie: H_PS_PSSID=1438_21100_31595_31605_31270_31463_31228_30824_31163; path=/; domain=.baidu.com
Strict-Transport-Security: max-age=172800
Traceid: 1589336601022180301813508355054317583631
Transfer-Encoding: chunked
X-Ua-Compatible: IE=Edge,chrome=1
# 请求头部
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3 # 请求的资源类型
Accept-Encoding: gzip, deflate, br # 资源类型压缩
Accept-Language: zh-CN,zh;q=0.9 # 资源类型语言
Cache-Control: max-age=0 # 缓存控制,服务端的缓存
Connection: keep-alive # 长连接
Cookie: BIDUPSID=C660B517FF8D703361BEF27A8E0B4A86; PSTM=1589100937; BAIDUID=C660B517FF8D7033A98FCF75B8449AC5:FG=1; BD_UPN=12314753; BDORZ=B490B5EBF6F3CD402E515D22BCDA1598; H_PS_PSSID=1438_21100_31595_31605_31270_31463_31228_30824_31163; delPer=0; BD_CK_SAM=1; PSINO=6; H_PS_645EC=94f7XUqf2UNuFyrpWJocENb5EtAFjG61sQS1yaq%2B9tPHYmQPOTzqO5NtnNU; COOKIE_SESSION=83388_0_8_5_1_8_1_1_8_2_0_0_1589201145_0_0_0_1589201330_0_1589335040%7C9%230_0_1589335040%7C1; __yjsv5_shitong=1.0_7_9449884d52ca169ba37dc788ecf839422ab2_300_1589336389184_106.84.9.86_0cf955f8; yjs_js_security_passport=057098de95624ead2bac92e4c7abd3e8b8e85870_1589336389_js; BD_HOME=1
Host: www.baidu.com # 访问的主机
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
Upgrade-Insecure-Requests: 1 # 客户端优先加密
# 访问时浏览器和操作系统标识
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36
HTTP请求方法
方法(Method) | 含义 |
---|---|
GET | 请求读取一个Web页面 |
POST | 附加一个命名资(如Web页面) |
DELETE | 删除Web页面 |
CONNECT | 用于代理服务器 |
HEAD | 请求读取一个Web页面的头部 |
PUT | 请求存储一个Web页面 |
TRACE | 用于测试,要求服务器送回收到的请求 |
OPTION | 查询特定选项 |
返回状态码
状态码 | 含义 |
---|---|
200 | 成功 |
301 | 永久重定向(跳转)在本地缓存不清除的情况下,可以一直访问,即使服务器断开。 |
302 | 临时重定向(跳转)服务器断开就看不了网页,http会自动跳转为https。 |
304 | 本地缓存,先打开一次网页,再刷新的时候,会使用本地缓存 |
307 | 内部重定向(跳转) |
400 | 客户端错误 |
401 | 认证失败 |
403 | 找不到主页,权限不足;站点目录没有内容,或者权限不足的情况 |
404 | 找不到页面 |
405 | 请求方法不被允许 |
500 | 内部错误,比如:数据库被停掉 |
502 | 找不到后端主机 bad gateway |
503 | 服务器过载,服务端请求限制,被ddos攻击的时候可以这样返回。 |
504 | 后端主机超时 |
2xx和3xx可以正常访问
4xx都是nginx的报错
5xx后端报错(nginx后面连接的服务报错:mysql、php、tomcat、redis)
正常访问网页的时候基本信息里面返回的状态码:
使用了本地缓存加载网页
访问一个不存在的资源的时候
没有默认站点的情况
个人主页输入用户名和密码访问失败的时候
referer
HTTP Referer是header的一部分,当浏览器向web服务器发送请求的时候,一般会带上Referer,告诉服务器该网页是从哪个页面链接过来的,服务器因此可以获得一些信息用于处理。
HTTP请求过程
1.用输入域名 -> 浏览器跳转 -> 浏览器缓存 -> Hosts文件 -> DNS解析
2.由浏览器向服务器发起TCP连接。
3.客户端发起http请求:
1)请求的方法是什么: GET获取
2)请求的Host主机是: www.baidu.com
3)请求的资源是什么: /index.html
4)请求的端端口是什么: 默认http是80 https是443
5)请求携带的参数是什么: 属性(请求类型、压缩、认证、浏览器信息、等等)
6)请求最后的空行
4.服务端响应的内容是
1)服务端响应使用WEB服务软件
2)服务端响应请求文件类型
3)服务端响应请求的文件是否进行压缩
4)服务端响应请求的主机是否进行长连接
5.客户端向服务端发起TCP断开