一、HTTP协议概念
1.1 什么是http协议?
注意
在网络通信中,客户端和服务端角色可以互换
- 协议 :网络协议是计算机之间为了实现网络通信而达成的一种“约定”或者”规则“,有了这种”约定“,不同厂商的生产设备,以及不同操作系统组成的计算机之间,就可以实现通信。
- HTTP协议是超文本传输协议的缩写,英文是Hyper Text Transfer Protocol。它是从WEB服务器传输超文本标记语言(HTML)到本地浏览器的传送协议。
- 设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。
- HTPP有多个版本,目前广泛使用的是HTTP/1.1版本。
1.2 认识URL
平时我们俗称的 “网址” 其实就是说的URL(Uniform Resource Location) 统一资源定位符,格式如图
- URL 是用来定位具体的资源的,标示了一个具体的资源位置。互联网上的每个文件都有一个唯一的URL。
- http或https指定协议类型,不区分大小写,加一个冒号:
- 登陆信息指定用户名和密码作为从服务器端获取资源时必要的登录信息(身份认证)。此项是可选项。
- 服务器地址 使用绝对URI必须指定待访问的服务器地址。
- 服务器端口号 指定服务器连接的网络端口号。此项也是可选项,若用户省略则自动使用默认端口号。
- 带层次的文件路径 指定服务器上的文件路径来定位特指的资源。这与UNIX系统的文件目录结构相似。
- 查询字符串 针对已指定的文件路径内的资源,可以使用查询字符串传入任意参数。此项可选。
- 片段标识符 使用片段标识符通常可标记出已获取资源中的子资源(文档内的某个位置)。但在RFC中并没有明确规定其使用方法。该项也为可选项。
1.3 urlencode和urldecode
- 像上图中 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现.
- 比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义.
转义的规则如下:
将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式
例如
- 像上面将C+±------>C%2B%2B的过程就叫urlencode
- 将C%2B%2B------>C++就叫urldeconde
可以借助工具实现上述过程
二、Fiddler抓包我在校园
- 在学习http协议前我们首先下载fiddler抓包工具,通过fiddler抓包协议学习http,fiddler 官网地址:https://www.telerik.com/fiddler
下载后安装打开就可以使用 - 打开fiddler->登录微信->打开我在校园->打开任意一个我在校园的界面
三、HTTP协议格式
<1> HTTP协议报文构成
通常http协议由四部分构成,且每行以\r\n结束
request报文
-
请求行(以空格为分隔符)
请求方法(GET、POST)和URL(路径)和HTTP版本(http/1.1) \r\n
-
请求报头(请求报头由多个key:value键值对构成)
key: value \r\n
key: value \r\n
key: value \r\n
key: value \r\n
-
空行(服务器读到空行代表请求报头读完了)
\r\n
-
请求正文(可有可无)——有效载荷
GET 可以不要正文
POST 需要携带正文(上传的某些数据)
response报文
-
响应行(以空格为分隔符)
version——http/1.1 code——状态码例如200,404 状态码描述——OK,Not Found \r\n结束
-
响应报头
key: value \r\n
key: value \r\n
key: value \r\n
key: value \r\n
content-Lengh:128——空行之后多少个字节是有效载荷
-
空行(服务器读到空行代表请求报头读完了)
\r\n
-
响应正文(可有可无)——有效载荷
html/image/css/js/video/…可以是图像视频等内容
这样我们可以清晰的看到我在校园小程序的报文信息,接下来我们从请求行开始一行一行分析
<2> HTTP的方法
请求行种常用的方法就是POST和GET
<3> HTTP的状态码
状态码用于描述客户端向服务器发送请求后,服务器返回的请求结果。
通过状态码可以清楚的知道请求是否出错,且出错原因。
分析报头可以看出来200表示请求成功OK
常用的几个状态码我们要重点记忆
- 200 OK - 客户端请求成功
- 301 - 资源(网页等)被永久转移到其它URL
- 302 - 临时跳转
- 400 Bad Request - 客户端请求有语法错误,不能被服务器所理解
- 401 Unauthorized - 请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
- 403 服务器理解客户端请求,但是拒绝执行词请求
- 404 - 请求资源不存在,可能是输入了错误的URL
- 500 - 服务器内部发生了不可预期的错误
- 503 Server Unavailable - 服务器当前不能处理客户端的请求,一段时间后可能恢复正常。
<4> HTTP的首部字段结构
- host:客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上
- connection:长短链接(keep-alive 是长链接)
- content length:正文的长度
- content type:数据类型
- User-Agent:声明用户的操作系统和浏览器版本信息
- referer:当前页面是从哪个页面跳转过来的
- Accept-Encoding:接受的编码
- Accept-Language:接受的语言类型
- Cookie:在客户端存储少量信息,当客户端下一次访问浏览器时,可以通过cookie识别是哪一个客户端发来的请求
Q1:区分长短连接,管线化技术
在connection种有两种连接短连接和长连接。
- 短连接
对于HTTP的短连接很好理解,当服务器客户端三次握手后建立TCP连接后,客户端向服务器发起HTTP请求,服务器HTTP响应,然后四次挥手断开连接,这意味着每次HTTP请求/响应都要建立连接和断开连接,当一个网站存在大量图片时就要执行多次通信,增加通信的开销,如下图所示
- 长连接(持久连接)
为了减少每次连接和断开的额外开销,提高响应速度,HTTP/1.1出现了长连接——keep alive,长连接意味着一旦建立起TCP连接后,可以不断进行多次HTTP请求/响应,直到一方提出断开连接。
长连接需要注意必须通信双方都支持长连接才可以 - 管线化
从上图我们可以看到HTTP响应/请求都是请求一次响应一次,交替执行的,而管线化技术就是可以一次发送多个HTTP请求,一次接收多个HTTP响应,从而提高连接速度。
四、HTTP的优点与不足
4.1 HTTP优点
-
无连接
http不关心底层怎么做的,和tcp的连接性无关,tcp连接好,http请求直接发送——request,类似于udp。
无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。早期这么做的原因是请求资源少,追求快。后来通过Connection: Keep-Alive实现长连接
-
无状态
http本身无状态的,并不会记录任何用户的信息,。缺少状态也意味着如果后续处理需要前面的信息时,则它必须重传,这样会导致传输大量的数据,但另一方面服务器不需要先前信息也意为着应答较快。
记录基本信息的技术:cookie和session
a. cookie
客户端发送name&&passwd给服务器,服务器返回set-cookie:name和set-cookie:passwd给客户端浏览器,cookie(内存级和硬盘级)本质是浏览器中的一个文件
b. session
set-cookie:sid,server
-
简单快捷
短连接(一来一回)进行文本(html.img,css,js…)传输 http/1.0
http/1.1: 长连接
4.2 HTTP缺点
- 通信使用明文(不加密),内容可能会被窃听;例如我们使用抓包工具就可看到用户的敏感信息。
- 不验证通信方的身份,因此有可能遭遇伪装
- 无法证明报文的完整性,所以有可能已遭篡改
转载:https://blog.csdn.net/qq_40076022/article/details/117472366