“网络要想学得好,HTTP少不了” 详解HTTP协议

认识HTTP协议

应用层协议

前言:
应用层认识:程序员自己编写,用来满足日常需求、解决实际问题的网络程序都属于应用层
应用层协议概念:负责应用程序之间的数据沟通
分类:自定制协议和知名协议(HTTP)

1.自定制协议:

由程序员自己编写,使用不同方法解决问题
例:网络版计算器

例如, 我们需要实现一个服务器版的加法器. 我们需要客户端把要计算的两个加数发过去, 然后由服务器进行计算, 最后再把结果返回给客户端.

约定方案一:
客户端发送一个形如"1+1"的字符串;
这个字符串中有两个操作数, 都是整形;
两个数字之间会有一个字符是运算符, 运算符只能是 + ; 数字和运算符之间没有空格;

约定方案二:
定义结构体来表示我们需要交互的信息;
发送数据时将这个结构体按照一个规则转换成字符串, 接收到数据的时候再按照相同的规则把字符串转化回结构体;
这个过程叫做 “序列化” 和 “反序列化”
无论我们采用方案一, 还是方案二, 还是其他的方案, 只要保证, 一端发送时构造的数据, 在另一端能够正确的进行解析, 就是ok的. 这种约定, 就是 应用层协议

2.HTTP协议

虽然我们说, 应用层协议是我们程序猿自己定的.但实际上, 已经有大佬们定义了一些现成的, 又非常好用的应用层协议, 供我们直接参考使用. **HTTP(超文本传输协议)**就是其中之一.

2.1URL

概念:URL学名又称为统一资源定位符,俗称“网址”

2.1.1URL中包含的要素:

在这里插入图片描述

2.1.2urlencode和urldecode

像/ ? : 等这样的字符, 已经被url当做特殊意义理解了. 因此这些字符不能随意出现.比如, 某个参数中需要带有这些特殊字符, 就必须先对特殊字符进行转义.
urlencode编码转义的规则如下:
将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式
在这里插入图片描述
urldecode解码就是urlencode的逆过程

2.1.3将网址输入浏览器回车后,会发生什么?(面试考点)

1、浏览器依次在 浏览器缓存 -->系统缓存 —>路由器缓存中去寻找匹配的url,如果这些缓存中有,就会直接在屏幕中显示出页面内容。若没有,则跳到下一步操作。
2、在发送http请求前,浏览器需要先进行域名解析(即DNS解析),以获取相应的IP地址。
3.http是一个应用层协议,在传输层使用tcp协议,浏览器将建立一个tcp的客户端,组织HTTP请求数据,将数据发送到服务端。
4.服务端收到请求,进行解析处理,最终组织相应,将结果返回给浏览器。
5.浏览器收到响应,对响应进行解析,最终将html数据元染成为页面。

3.HTTP协议格式

首先一个完成的HTTP协议格式包含首行、头部、空行、正文四个部分

3.1首行

可使用抓包软件进行抓包观察
HTTP请求:
在这里插入图片描述
HTTP响应:
在这里插入图片描述

3.1.1请求首行

组成:[请求方法] + [URL] + [版本号] 以空格隔开
在这里插入图片描述

请求方法

在这里插入图片描述
其中最常用的就是GET方法和POST方法.
GET和POST方法的区别(常考):
1.GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
2.GET参数通过URL传递,POST放在正文中
3.GET请求在URL中传送的参数是有长度限制的,而POST没有。
4.GET没有正文,提交数据通过URL中的查询字符串完成,而POST提交数据在正文中

3.1.2响应首行

组成:[版本号] + [状态码] + [状态码解释] 以空格隔开
在这里插入图片描述

HTTP的状态码

这个网址里比较齐全
在这里插入图片描述
最常见的状态码, 比如 200(OK), 404(Not Found), 403(Forbidden), 302(Redirect, 重定向), 504(Bad Gateway)

3.2头部

在这里插入图片描述

HTTP常见Header

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

空行\r\n间隔头部与正文
正文:客户端与服务器提交/响应数据

cookie和session的区别与联系(重点常考)

Cookie(客户端会话技术)
作用:一般用来存储不敏感的信息,一般用来做服务器对客户端的用户识别;
Session(服务器端会话技术)
数据存储在服务器端,以Cookie为基础做客户端识别;
作用

  1. session用于存储一次会话的多次请求的数据,存在服务器端
  2. session可以存储任意类型,任意大小的数据
    两者区别:
  3. session存储数据在服务器端,Cookie在客户端
  4. session没有数据大小限制,Cookie有
  5. session数据安全,Cookie相对于不安全

4.认识HTTPS

概念:
HTTP属于超文本传输协议,用来在Internet上传送超文本,而HTTPS为安全超文本传输协议,在HTTPS基础上拥有更强的安全性,简单来说HTTPS是HTTP的安全版,是使用TLS(对称加密)/SSL加密(非对称加密)的HTTP协议。
实现原理:
可参考这篇博客HTTPS 部分

HTTPS 和 HTTP 的区别(重点常考)

主要为以下四点:
https 协议需要到 ca 申请证书,目前市面上的免费证书也不少,收费的也都比较贵。
http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl 加密传输协议。
http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。
http 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全。

对称加密与非对称加密的区别

非对称加密和对称加密在加密和解密过程、加密解密速度、传输的安全性上都有所不同,具体介绍如下:
1、加密和解密过程不同
对称加密过程和解密过程使用的同一个密钥,加密过程相当于用原文+密钥可以传输出密文,同时解密过程用密文-密钥可以推导出原文。但非对称加密采用了两个密钥,一般使用公钥进行加密,使用私知钥进行解密。
2、加密解密速度不同
对称加密解密的速度比较快,适合数据比较长时的使用。非对称加密和解密花费的时间长、速度相对较慢,只适合对少量数据的使用。
在这里插入图片描述
3、传输的安全性不同
对称加密的过程中无法确保密钥被安全传递,密文在传输过程中是可能被第三方截获的,如果密码本也被第三方截获,则传输的密码信息将被第三方破获,安全性相对较低。

非对称加密算法中私钥是基于不同的算法生成不同的随机数,私钥通过一定的加密算法推导出公钥,但私钥到公钥的推导过程是单向的,也就是说公钥无法反推导出私钥。所以安全性较高。

发布了39 篇原创文章 · 获赞 141 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_43676757/article/details/105385905