目录
一、HTTP
- HTTP全称为Hyper Text Transfer Protocol,中文翻译为超文本传输协议,目的是保证浏览器与服务器之间的通信。
- HTTP的工作方式是客户端与服务器之间的请求-应答协议(一次请求对应一次响应)。
- HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
工作原理
- HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端即WEB服务器发送所有请求。
- Web服务器有:Apache服务器,IIS服务器(Internet Information Services)等。
- Web服务器根据接收到的请求后,向客户端发送响应信息。
- HTTP默认端口号为80,但是你也可以改为8080或者其他端口。
注意事项
- HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
- HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
- HTTP历史版本:HTTP/1.0:每一次请求响应都会建立新的连接。HTTP/1.1:复用连接。
交互流程
二、HTTP协议到底怎么回事
HTTP协议定义了客户端和服务器之间交互的信息内容和步骤。
首先,客户端会向服务器发送请求消息。请求消息中包含的内容是“对什么”和“进行怎样的操作”两个部分。
- “对什么”的部分称为URI。
URI的内容是一个存放网页数据的文件名过着是一个CGI程序的文件名。
换句话说就是:写的各种访问目标统称为URI。
URI:Uniform Resource Identifier,统一资源标识符
CGI程序:对Web服务器程序调用其他程序的规则所做的定义就是CGI,而按照CGI规范来工作的程序就称为CGI程序。
实际上,这个文件在Web服务器上未必是真实存在的,因为Web服务器可以通过重写规则对虚拟的URI进行映射。
- “进行怎样的操作”的部分称为方法。
方法表示需要让Web服务器完成怎样的工作,就比如读取URI表示的数据、将客户端输入的数据发送给URI表示的程序等。
HTTP主要方法
方法 | 含义 |
---|---|
GET | 获取URI指定的信息。URI指定的是文件,则返回文件的内容;URI指定的是CGI程序,则返回该程序的输出数据 |
POST | 从客户端向服务器发送数据。一般用于发送表单中填写的数据等情况下 |
HEAD | 和GET基本相同。不过它只返回HTTP的消息头,而不返回数据的内容。用于获取文件最后更新时间等属性信息 |
OPTIONS | 用于通知或查询通信选项 |
PUT | 替换URI指定的服务器上的文件。如果URI指定的文件不存在,则创建该文件 |
DELETE | 删除URI指定的服务器上的文件 |
TRACE | 将服务器收到的请求行和头部直接返回给客户端。用于在使用代理的环境中检查改写请求的情况 |
CONNECT | 使用代理传输加密消息时使用的方法 |
除了表格中的这些,HTTP消息中还有一些用来表示附加信息的头字段。客户端向Web服务器发送数据时,会先发送头字段,然后再发送数据。
收到请求消息后,Web服务器会对其中的内容进行解析,通过URI和方法来判断“对什么”、“进行怎样的操作”,并根据这些要求来完成自己的工作,然后将结果存放在响应消息中。
在响应消息的开头有一个状态码(用来表示操作的执行结果是成功还是发生了错误),就比如当我们访问Web服务器时,遇到找不到文件就会显示出 404 Not Found 的错误信息,其实这就是状态码和它的描述。
HTTP状态码
分类 | 分类描述 |
---|---|
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
需要重点了解的:
状态码 | 状态码英文名称 | 中文描述 |
---|---|---|
200 | OK | 请求成功。一般用于GET与POST请求 |
301 | Moved Permanently | 永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替 |
302 | Found | 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI |
304 | Modified | 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源 |
307 | Temporary Redirect | 临时重定向。与302类似。使用GET请求重定向 |
400 | Bad Request | 客户端请求的语法错误,服务器无法理解 |
401 | Unauthorized | 请求要求用户的身份认证 |
402 | Payment Required | 保留,将来使用 |
403 | Forbidden | 服务器理解请求客户端的请求,但是拒绝执行此请求 |
404 | Not Found | 服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置"您所请求的资源无法找到"的个性页面 |
405 | Method Not Allowed | 客户端请求中的方法被禁止 |
500 | Internal Server Error | 服务器内部错误,无法完成请求 |
502 | Bad Gateway | 作为网关或者代理工作的服务器尝试执行请求时,从远程服务器接收到了一个无效的响应 |
状态码后面就是头字段和网页数据。响应消息会被发送回客户端,客户端收到后,浏览器会从消息中读取所需的数据并显示在屏幕上。至此,HTTP整个工作就完成了。
GET和POST区别
-
GET 是不安全的,因为在传输过程,数据被放在请求的 URL 中;POST 的所有操作对用户来说都是不可见的。 但是这种做法也不时绝对的,大部分人的做法也是按照上面的说法来的,但是也可以在GET请求加上 request body,给 POST 请求带上 URL 参数。
-
GET 请求提交的 URL 中的数据最多只能是2048字节,这个限制是浏览器或者服务器给添加的,HTTP 协议并没有对 URL 长度进行限制,目的是为了保证服务器和浏览器能够正常运行,防止有人恶意发送请求。POST 请求则没有大小限制。
-
GET 限制Form表单的数据集的值必须为ASCII字符;而POST支持整个ISO10646字符集。
-
GET 执行效率却比 POST 方法好。GET 是 form 提交的默认方法。
-
GET 产生一个 TCP 数据包;POST 产生两个 TCP 数据包。
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
三、HTTP请求
- 请求行: [方法] + [url] + [协议版本]
- Header: 请求的属性,冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束。
- Message Body: 空行后面的内容都是Body,Body允许为空字符串。如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度。
四、HTTP响应
- 响应行:[协议版本]+ [状态码] + [状态码描述]
- Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束。
- Message Body: 空行后面的内容都是Body,Body允许为空字符串。如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度;如果服务器返回了一个html页面,那么html页面内容就是在body中。
五、HTTPS
HTTPS 主要由两部分组成:HTTP + SSL / TLS,也就是在 HTTP 上又加了一层处理加密信息的模块。服务端和客户端的信息传输都会通过 TLS 进行加密,所以传输的数据都是加密后的数据。
简单理解,HTTP传送数据(包括账号和密码),都是明文传送,很容易被窃取或者侦听,在现有的互联网应用中,很明显有不安全因素,所以有了HTTPS,可以简单理解成HTTPS多了一层加密解密层,在发送前加密,在收到后解密,在网络里传输的都是经过加密的数据。
优点
- 使用 HTTPS 协议可认证用户和服务器,确保数据发送到正确的客户机和服务器;
- HTTPS 协议是由 SSL+HTTP构建的可进行加密传输、身份认证的网络协议,要比 HTTP安全,可防止数据在传输过程中被窃取、改变,确保数据的完整性。
- HTTPS 是现行架构下最安全的解决方案,虽然不是绝对安全,但它大幅增加了中间人攻击的成本。
缺点
- 相同网络环境下,HTTPS 协议会使页面的加载时间延长近 50%,增加 10%到 20%的耗电。此外,HTTPS 协议还会影响缓存,增加数据开销和功耗。
- HTTPS 协议的安全是有范围的,在黑客攻击、拒绝服务攻击和服务器劫持等方面几乎起不到什么作用。
- 最关键的是,SSL 证书的信用链体系并不安全。特别是在某些国家可以控制 CA 根证书的情况下,中间人攻击一样可行。
- 成本增加。部署 HTTPS 后,因为 HTTPS 协议的工作要增加额外的计算资源消耗,例如 SSL 协议加密算法和 SSL 交互次数将占用一定的计算资源和服务器成本。在大规模用户访问应用的场景下,服务器需要频繁地做加密和解密操作,几乎每一个字节都需要做加解密,这就产生了服务器成本。
HTTP和HTTPS区别
区别 | HTTP | HTTPS |
---|---|---|
协议 | 运行在TCP之上,明文传输,客户端与服务端都无法验证对方的身份 | 身披SSL(Secure Socket Layer)外壳的HTTP,运行于SSL上,SSL运行于TCP之上,是添加了加密和认证机制的HTTP |
端口 | 80 | 443 |
资源消耗 | 较少 | 由于加解密处理,会消耗更多的CPU和内存资源 |
开销 | 无需证书 | 需要证书,而证书一般需要向认证机构购买 |
加密机制 | 无 | 共享密钥加密和公开密钥加密并用的混合加密机制 |
安全性 | 弱 | 由于加密机制,安全性强 |
六、对称加密与非对称加密
对称密钥加密:指加密和解密使用同一个密钥的方式,这种方式存在的最大问题就是密钥发送问题,即如何安全地将密钥发给对方;
非对称加密:指使用一对非对称密钥,即公钥和私钥,公钥可以随意发布,但私钥只有自己知道。发送密文的一方使用对方的公钥进行加密处理,对方接收到加密信息后,使用自己的私钥进行解密。
由于非对称加密的方式不需要发送用来解密的私钥,所以可以保证安全性;但是和对称加密比起来,非常的慢。