这是我参与【第四届青训营】笔记创作活动的第3天
嗨害嗨,这里是因比赛与前端结缘的非科班练习生bf,今天来简单整理一下青训营“HTTP实用指南”的相关内容,废话不多说,开始整活!ヾ(≧ ▽ ≦)ゝ*
一、什么是 HTTP?
HTTP:超文本传输协议(Hyper Text Transfer Protocol)
HTTP定义了 Web 客户向 Web 服务器请求 Web 页面的方式,以及服务器向客户传送 Web 页面的方式
HTTP交互过程:当用户请求一个 Web 页面时,浏览器向服务器发出对该页面中所包含对象的HTTP请求报文,服务器接收到请求并用包含这些对象的HTTP响应报文进行响应(关键词:请求、响应)
HTTP是一个应用层协议,并使用 TCP 作为它的支撑运输协议(而不是UDP)
HTTP是一个无状态协议:因为HTTP服务器并不保存关于客户的任何信息,即服务器不需要维护客户端状态,简单点来说就是你要啥我就给你啥,其他的我不管
二、报文格式
(左边是请求报文,右边是响应报文)
1.请求报文
第一行:请求行
有三个字段:方法字段、URL字段和HTTP版本字段
下方列出了一些方法字段可以使用的值:
第一行后续的行:首部行
HOST:指明对象所在的主机
User-Agent:指明用户代理,即向服务器发送请求的浏览器的类型
Accept-language:表示用户想得到该对象的语言版本(如果服务器有的话),否则服务器应当发送它的默认版本
......
还有更多的请求头内容,可以看下面这张图:
2.响应报文
响应报文分为三个部分:状态行、首部行、实体体
状态行:
有3个字段:协议版本字段、状态码和响应状态信息
关于状态码,下图有介绍:
首部行:
Server:类似于HTTP请求报文中的User-agent
Date:指示服务器产生并发送该响应报文的日期和时间
注意:这个时间不是指对象创建或者最后修改的时间,而是服务器从它的文件系统中检索到该对象,将该对象插入响应报文,并发送该响应报文的时间
Content-Length:指示被发送对象中的字节数
......
还有更多的响应头内容,可以看下面这张图:
实体体:
报文的主要部分,即它包含了所请求的对象本身
三、用户与服务器的交互:cookie
前面说到了HTTP是一个无状态协议,即服务器不需要维护客户端状态,
不可否认,这样做到好处就是服务器那边不用去维护客户端的信息,可以减少服务器的CPU以及内存资源的消耗,
但如果一个 Web 站点想要能够识别到用户的信息,可能是因为你在这个站点的黑名单里,人家不想让你使用,也可能是它想要将你的浏览内容和你的用户信息进行挂钩,从而更好地进行个性化服务,那么,作为不维护客户端状态的HTTP如何解决这个问题呢?
这个时候,就引入了一个新的技术:cookie
cookie技术通过在请求和响应报文中写入cookie信息来控制客户端的状态,即cookie可以用于标识一个用户
上张图片(来源:图解HTTP)
cookie技术有4个组件:
- 在HTTP响应报文中的一个cookie首部行
- 在HTTP请求报文中的一个cookie首部行
- 在用户端系统中保留有一个cookie文件,并由用户的浏览器进行管理
- 位于Web站点的一个后端数据库
尽管 cookie 能够简化用户的一些登录方面的行为,但它仍然存在一些争议:
因为它被认为是对用户隐私的一种侵害,cookie允许站点知道许多关于用户的信息,那如果有人将这些知道的信息卖给了第三方,就会造成信息的泄露,同时你在站点的行为,也会为算法了解并分析你个人的浏览行为和方式提供大量的数据
所以,事物皆具两面性,一项技术都有其利弊,这就需要去权衡了
四、HTTPS
HTTP本身存在着一些不足:
- 通信使用明文(不加密)
- 不去验证通信方的身份
- 无法证明报文的完整性
那么如何解决这些不足呢?这就要使用————HTTPS
简单了解一下HTTPS:
HTTPS: HTTP + SSL/TLS
HTTPS采用混合加密机制,即同时使用下面两种加密技术:
- 对称加密:加密和解密都是使用同一个密钥
- 非对称加密:加密和解密需要使用两个不同的密钥--公钥和私钥
未完待续...
以上就是本次的整理了,我们下次再见,拜了个拜(。・∀・)ノ