Http协议概述
HTTP全称HyperText Transfer Protocol中文名为超文本传输协议
1.什么是超文本?
包含有超链接(Link)和各种多媒体元素标记的文本。这些超文本文件彼此链接,形成网状(Web),因此又被称为网页(Web Page)。这些链接使用URL表示。最常见的超文本格式是超文本标记语言HTML。
由html文件->包含各种各样的元素(URL链接)->形成web页面
2.那什么是URL, URL的结构图如下
3.那超文本传输http协议是什么?
是一种按照URL指示,将超文本文档从一台主机(Web服务器)传输到另一台主机(浏览器)的应用层协议,以实现超链接的功能。
Http工作原理
http的短连接:建立一次tcp的连接,发起一次http的请求,结束,tcp断开。
http的长连接:建立一次tcp的连接,发起多次http的请求,结束,tcp端口。
Http请求响应
1.http请求报文的方法
get # 获得请求文件信息的数据内容(下载)
post # 用户提交数据至服务器端存储(上传)
Request URL:http://10.0.0.7/index.html # 请求的URL
Request Method:GET # 请求的方法
Status Code:200 OK # 当前的状态
Remote Address:10.0.0.7:80 # 远程的主机
2.http返回状态码(Status-Code), 以3位数字组成
200 成功
301 永久重定向(redirect)
302 临时重定向(redirect)
304 浏览器缓存
403 请求不到首页,权限被拒绝
404 资源找不到
500 服务器内部错误,程序代码错误
502 找不到后端的资源
504 请求超时
3.用户访问网站携带的参数,以及服务端返回的参数
//1.概况
Request URL: http://10.0.0.7/index.html # 请求的URL地址
Request Method: GET # 请求的方法(获取)
Status Code: 304 Not Modified # 返回的状态
Remote Address: 10.0.0.7:80 # 请求的地址
//2.客户端请求的头部信息
Accept: text/html, # 请求的类型
Accept-Encoding: gzip, deflate # 是否进行压缩
Accept-Language: zh-CN,zh;q=0.9 # 请求的语言
Cache-Control: max-age=0 # 缓存
Connection: keep-alive # TCP长连接
Host: www.ct99.cn # 请求的域名
If-Modified-Since: Fri, 04 May 2018 08:13:44 GMT# 修改的时间
If-None-Match: "a49-56b5ce607fe00" # 标记
Upgrade-Insecure-Requests:1 # 在http和https之间起的一个过渡作用
User-Agent: Mozilla/5.0 # 请求浏览器的工具
"=== 请求一个空行 ==="
"=== 请求内容主体 ==="
//3.服务端响应的头部信息
HTTP/1.1 304 Not Modified # 返回服务器的http协议,状态码
Date: Fri, 14 Sep 2018 09:14:28 GMT # 返回服务器的时间
Server: Apache/2.4.6 (CentOS) PHP/5.4.16 # 返回服务器使用的软件(Apache php)
Connection: Keep-Alive # TCP长连接
Keep-Alive: timeout=5, max=100 # 长连接的超时时间
ETag: "a49-56b5ce607fe00" # 验证客户端标记
"=== 返回一个空行 ==="
"=== 返回内容主体 ==="
4.Http相关术语pv
、ip
、uv
假设公司有一座大厦,大厦有100人,每个人有一台电脑和一部手机,上网都是通过nat转换出口,每个人点击网站2次, 请问对应的pv
,uv
,ip
分别是多少
PV:页面浏览量, 400
uv:独立的客户, 200
ip:独立IP, 1个
Http访问流程
http协议原理
1.用户输入域名->浏览器跳转->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主机是: www.ct99.cn
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=z+1 seq=sj --> 服务端
用户访问网站整体流程
1.客户端发起http请求,请求会先抵达前端的防火墙
2.防火墙识别用户身份,正常的请求通过内部交换机通过tcp连接后端的负载均衡,传递用户的http请求
3.负载接收到请求,会根据请求的内容进行下发任务,通过tcp连接后端的web,然发用户的http请求
4.web接收到用户的http请求后,会根据用户请求的内容进行解析,解析分为如下:
静态请求:由web服务器向nfs建立tcp连接,获取对应的图片,最后返回给负衡(负载均衡->防火墙->用户)
动态请求:有web向后端的动态程序建立TCP连接,将用户的动态http请求传递态程序->由动态程序进行解析
5.动态程序在解析的过程中,如果碰到查询数据库的请求,则优先和缓存建立tcp接,然后缓存服务发起http的查询
6.如果缓存没有对应的数据,动态程序再次向数据库建立tcp的连接,然后发起查作。
7.由数据库返回->动态程序->缓存->web服务->负载均衡->防火墙->用户。
用户访问网站流程面试时需注意:
1.按照五层架构模型回答 CDN层->负载层->WEB层->存储层->缓存层->数据库层
同时需要注意, 每一层都有对应的缓存机制