深度解析http协议

Url详解

在这里插入图片描述

  1. 协议方案名:有http和https,两者区别为https相比http协议多了一层加密层,从而使得数据传输更安全。
    在这里插入图片描述
  2. 登录信息:这一部分是用户登录的账号和密码,由于不安全,现在几乎不用到了
  3. IP地址/域名:在浏览器输入该ip地址来跳转到网页,比如www.baidu.com
  4. 端口号:http协议默认端口号为80,https协议默认端口号为443
  5. 文件路径:该文件路径就是tomcat中webapps中定位到的资源路径。
  6. url参数:是追加到 URL 上的一个名称-值对,参数以问号 (?) 开始 并采用 name=value. 如果存在多个 URL 参数,则参数之间用 (&) 符隔开,每个参数用=确认键值对关系。下例显示带有两个名称-值对的 URL 参数:
    http://server/path/document?name1=value1&name2=value2
  7. 片段标识符:用#表示,因为网页由于屏幕有限,只显示一部分,二片段标识符可以直接定位到想要的片段,如下图:
    在这里插入图片描述

程序的交互图

当在浏览器输入url回车后,前端会向后端发送一个请求(request)
后端接收到request信息后会先解析url的命令,根据url判断后端要做的事情,对应的进行处理逻辑业务。
后端把响应的结果response返回给前端
前端拿到了后端相应的结果response,通过浏览器的引擎把后端的业务进行解析和渲染,用户就可以看到对应的结果。
在这里插入图片描述
而http就是用于request和response中间传输的规则,是基于TCP/IP的关于数据如何在万维网中如何通信的协议。说白了就是用于前后端数据交互的,在数据传输的过程中就用到了http协议,那么下面我们就来说http协议究竟都有些什么。

get和post区别

GET和POST是HTTP请求的两种基本方法,有什么区别呢

  1. GET在浏览器回退时是无害的,而POST会再次提交请求。
  2. GET产生的URL地址可以被Bookmark,而POST不可以。
  3. GET请求会被浏览器主动cache,而POST不会,除非手动设置。
  4. GET请求只能进行url编码,而POST支持多种编码方式。
  5. GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
  6. GET请求在URL中传送的参数是有长度限制的,而POST么有。
  7. 对参数的数据类型,GET只接受ASCII字符,而POST没有限制。
  8. GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
  9. GET参数通过URL传递,POST放在Request body中。

编码和解码

如果我在百度里面搜“键盘”二子,出现的URL就是这样子的
在这里插入图片描述
这就是编码后的一个结果,把这个url复制下来,就会发现键盘是一堆别的码,这是因为网页显示的是编码后的结果。

谷歌自带的开发者工具有decodeURL解码 和 encodeURL编码的一个方法,如下所示:
在这里插入图片描述
为什么需要编码和解码呢?
像 / ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现.
比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义.

转义的规则如下:
将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式

http协议格式

在这里插入图片描述

request组成:

  1. 首行:【方法get/post】【url】【版本】(最常见的是http/1.1)
  2. 请求头:多个参数(key,value)组成,每个参数以 \n作为分隔符,参数之间使用:进行分割
  3. 空行:用于表示请求头的结束
  4. body正文:get的body是空的,post的body采用内容。
    body存储的是参数,而get的参数已经在url上面进行拼接了,所以body就可以为空
    key=value & key2=value2
    body规则:可以有多个参数,每个参数之间是以 & 分隔,参数中以=分隔

response组成:
与request不同的是首行,变为了【版本】【状态码】【状态码描述】

抓包工具fiddler

fiddler可以看到前后端交互的具体细节,有需要的小伙伴可以下载一个,下面演示一下抓取请求相应的具体过程

  1. 我先把抓到的包都清空一下
    在这里插入图片描述

  2. 比如说我现在在百度上搜个键盘,然后对应的fiddler就会抓取到对应的包显示出来,我们不想让他继续抓包了,就点击Capturing停止抓取
    在这里插入图片描述

  3. 找到对应的请求和相应,find后有关baidu的都会标黄
    在这里插入图片描述

  4. 此时就选中想要看的包,在点击raw查看原生数据,这时上面的就是request的资源,下面的就是response资源。
    在这里插入图片描述

状态码解析

首先按大类可以分为五类,如下图
在这里插入图片描述


然后又细分为很多的小类,重点要掌握的用红框标红了
在这里插入图片描述

301和302的区别:

  1. 含义不同:301为永久重定向,而302为临时重定向
  2. 对于搜索引擎的收录权重是不同的:301收录权重比302高

HTTP常见Header

HTTP协议格式中有请求头和响应头,里面的内容都有什么呢?

  • Content-Type: 数据类型(text/html等)
  • Content-Length: Body的长度
  • Host: 客户端告知服务器, 所请求的资源是在哪个主机的哪个端口上;
  • User-Agent: 声明用户的操作系统和浏览器版本信息;
  • referer: 当前页面是从哪个页面跳转过来的;
  • location: 搭配3xx状态码使用, 告诉客户端接下来要去哪里访问;
  • Cookie: 用于在客户端存储少量信息. 通常用于实现会话(session)的功能;
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值