初识HTTP | 青训营笔记

91 阅读5分钟
http.png

这是我参与【第四届青训营】笔记创作活动的第3天

嗨害嗨,这里是因比赛与前端结缘的非科班练习生bf,今天来简单整理一下青训营“HTTP实用指南”的相关内容,废话不多说,开始整活!ヾ(≧ ▽ ≦)ゝ*


一、什么是 HTTP?

HTTP:超文本传输协议(Hyper Text Transfer Protocol)

HTTP定义了 Web 客户向 Web 服务器请求 Web 页面的方式,以及服务器向客户传送 Web 页面的方式

HTTP交互过程:当用户请求一个 Web 页面时,浏览器向服务器发出对该页面中所包含对象的HTTP请求报文,服务器接收到请求并用包含这些对象的HTTP响应报文进行响应(关键词:请求、响应)

HTTP是一个应用层协议,并使用 TCP 作为它的支撑运输协议(而不是UDP)

HTTP是一个无状态协议:因为HTTP服务器并不保存关于客户的任何信息,即服务器不需要维护客户端状态,简单点来说就是你要啥我就给你啥,其他的我不管


二、报文格式

6.png

(左边是请求报文,右边是响应报文)

1.请求报文

第一行:请求行

  有三个字段:方法字段、URL字段和HTTP版本字段

  下方列出了一些方法字段可以使用的值:

7.png

第一行后续的行:首部行

  HOST:指明对象所在的主机

  User-Agent:指明用户代理,即向服务器发送请求的浏览器的类型

  Accept-language:表示用户想得到该对象的语言版本(如果服务器有的话),否则服务器应当发送它的默认版本

  ......

  还有更多的请求头内容,可以看下面这张图: 9.png

2.响应报文

响应报文分为三个部分:状态行、首部行、实体体

状态行:

  有3个字段:协议版本字段、状态码和响应状态信息

  关于状态码,下图有介绍:

8.png

首部行:

  Server:类似于HTTP请求报文中的User-agent

  Date:指示服务器产生并发送该响应报文的日期和时间

  注意:这个时间不是指对象创建或者最后修改的时间,而是服务器从它的文件系统中检索到该对象,将该对象插入响应报文,并发送该响应报文的时间

  Content-Length:指示被发送对象中的字节数

  ......

  还有更多的响应头内容,可以看下面这张图:

10.png

实体体:

  报文的主要部分,即它包含了所请求的对象本身


三、用户与服务器的交互:cookie

前面说到了HTTP是一个无状态协议,即服务器不需要维护客户端状态,

不可否认,这样做到好处就是服务器那边不用去维护客户端的信息,可以减少服务器的CPU以及内存资源的消耗,

但如果一个 Web 站点想要能够识别到用户的信息,可能是因为你在这个站点的黑名单里,人家不想让你使用,也可能是它想要将你的浏览内容和你的用户信息进行挂钩,从而更好地进行个性化服务,那么,作为不维护客户端状态的HTTP如何解决这个问题呢?

这个时候,就引入了一个新的技术:cookie

cookie技术通过在请求和响应报文中写入cookie信息来控制客户端的状态,即cookie可以用于标识一个用户

上张图片(来源:图解HTTP)

4.png

cookie技术有4个组件:

  1. 在HTTP响应报文中的一个cookie首部行
  2. 在HTTP请求报文中的一个cookie首部行
  3. 在用户端系统中保留有一个cookie文件,并由用户的浏览器进行管理
  4. 位于Web站点的一个后端数据库

尽管 cookie 能够简化用户的一些登录方面的行为,但它仍然存在一些争议:

因为它被认为是对用户隐私的一种侵害,cookie允许站点知道许多关于用户的信息,那如果有人将这些知道的信息卖给了第三方,就会造成信息的泄露,同时你在站点的行为,也会为算法了解并分析你个人的浏览行为和方式提供大量的数据

所以,事物皆具两面性,一项技术都有其利弊,这就需要去权衡了


四、HTTPS

HTTP本身存在着一些不足:

  1. 通信使用明文(不加密)
  2. 不去验证通信方的身份
  3. 无法证明报文的完整性

那么如何解决这些不足呢?这就要使用————HTTPS

简单了解一下HTTPS:

HTTPS: HTTP + SSL/TLS

5.png

HTTPS采用混合加密机制,即同时使用下面两种加密技术:

  • 对称加密:加密和解密都是使用同一个密钥
  • 非对称加密:加密和解密需要使用两个不同的密钥--公钥和私钥

未完待续...


以上就是本次的整理了,我们下次再见,拜了个拜(。・∀・)ノ