【计算机网络】应用层 - HTTP协议

mac2022-07-05  34

HTTP协议

概述URL, URN和URIHTTP报文报文结构通用首部请求首部响应首部实体首部 HTTP请求方法HTTP状态码1XX 信息2XX 成功3XX 重定向4XX客户端错误5XX服务器错误 Cookie和Session长连接,短连接和流水线HTTPS加密对称加密非对称加密HTTPS采用的加密方式 数字签名认证 GET和POST比较HTTP1.0 HTTP1.1 和 HTTP2.0的区别

概述

HTTP超文本传输协议规定了浏览器怎样向万维网服务器请求万维网文档, 以及服务器怎样把文档传送给浏览器。

HTTP通过同一资源定位符URL获得互联网上资源的位置和访问这些资源的方法。

URL, URN和URI

URI (Uniform Resource Identifier) : 统一资源标识符 URI 是一种更高层次, 更抽象的概念, URN 和 URL 都是 URI 的子集URL(Uniform Resource Locator) : 统一资源定位器 URL是URI的一种, 不仅标识了Web 资源, 还指定了操作或者获取方式, 同时指出了主要访问机制和网络位置。URN( Uniform Resource Name) : 统一资源命名 URN是URI的一种,用特定命名空间的名字标识资源。

HTTP报文

HTTP报文是由多行数据构成的字符串文本

客户端发送的报文叫做请求报文,服务端回复的报文为响应报文。

报文结构

通用首部

首部字段名说明Cache-Control控制缓存的行为Connection控制不再转发给代理的首部字段、管理持久连接Date创建报文的日期时间Pragma报文指令Trailer报文末端的首部一览Transfer-Encoding指定报文主体的传输编码方式Upgrade升级为其他协议Via代理服务器的相关信息Warning错误通知

请求首部

首部字段名说明Accept用户代理可处理的媒体类型Accept-Charset优先的字符集Accept-Encoding优先的内容编码Accept-Language优先的语言(自然语言)AuthorizationWeb 认证信息Expect期待服务器的特定行为From用户的电子邮箱地址Host请求资源所在服务器If-Match比较实体标记(ETag)If-Modified-Since比较资源的更新时间If-None-Match比较实体标记(与 If-Match 相反)If-Range资源未更新时发送实体 Byte 的范围请求If-Unmodified-Since比较资源的更新时间(与 If-Modified-Since 相反)Max-Forwards最大传输逐跳数Proxy-Authorization代理服务器要求客户端的认证信息Range实体的字节范围请求Referer对请求中 URI 的原始获取方TE传输编码的优先级User-AgentHTTP 客户端程序的信息

响应首部

首部字段名说明Accept-Ranges是否接受字节范围请求Age推算资源创建经过时间ETag资源的匹配信息Location令客户端重定向至指定 URIProxy-Authenticate代理服务器对客户端的认证信息Retry-After对再次发起请求的时机要求ServerHTTP 服务器的安装信息Vary代理服务器缓存的管理信息WWW-Authenticate服务器对客户端的认证信息

实体首部

首部字段名说明Accept-Ranges是否接受字节范围请求Age推算资源创建经过时间ETag资源的匹配信息Location令客户端重定向至指定 URIProxy-Authenticate代理服务器对客户端的认证信息Retry-After对再次发起请求的时机要求ServerHTTP 服务器的安装信息Vary代理服务器缓存的管理信息WWW-Authenticate服务器对客户端的认证信息

HTTP请求方法

GET 请求获取资源POST 传输实体主体, 用来传输数据HEAD 获取报文首部,与GET类似PUT 上传文件,没有验证机制,不安全,一般不用PATCH 对资源进行部分修改DELETE 删除文件,与PUT功能相反OPTIONS 查询URL能支持的方法CONNECT 用于代理服务器

HTTP状态码

状态码类别含义1XXInformational(信息性状态码)接收的请求正在处理2XXSuccess(成功状态码)请求正常处理完毕3XXRedirection(重定向状态码)需要进行附加操作以完成请求4XXClient Error(客户端错误状态码)服务器无法处理请求5XXServer Error(服务器错误状态码)服务器处理请求出错

1XX 信息

100 Continue : 表明到目前为止都很正常, 客户端可以继续发送请求或者忽略这个响应

2XX 成功

200 OK204 No Content 请求成功处理, 返回的响应报文不包含实体的主体部分。 表示没有数据返回。206 Partial Content 表示客户端进行了范围请求,相应报文包含指定范围的内容。

3XX 重定向

301 Moved Permanently 永久重定向302 Found 临时重定向304 Not Modified 没有满足请求报文包含的一些条件。

4XX客户端错误

400 Bad Requset 请求报文出现语法错误401 Unauthorized 发送的请求需要有认证信息403 Forbidden 请求被拒绝404 Not Found 没有找到对应的网页信息

5XX服务器错误

500 Internal Server Error 服务器正在执行请求时发生错误503 Service Unavailable 服务器处于超负荷或正停机维护

Cookie和Session

HTTP是无状态的, 因此想要实现连接会话的管理(登陆状态,信息记录等),就需要引入Cookie来保存状态信息。

Cookie是服务器发送到用户浏览器并保存在本地的一块小数据,它会在下次请求时被携带,用来维持会话。

创建过程 服务器发送响应报文时,在首部添加Set-Cookie字段

Set-Cookie: info=test

客户端收到该报文时,取出Cookie信息并且在下次发送请求报文时携带上。

Cookie:info=test

Set-Cookie字段可设置一些Cookie的属性

属性说明NAME=VALUE给Cookie赋予名称和值(必选)expires=DATACookie的有效期,默认到浏览器关闭path=PATH到服务器上的目录为Cookie适用对象domain=域名Cookie使用的域名Secure仅在HTTPS下发送CookieHttpOnly防止Cookie被JavaScript访问

长连接,短连接和流水线

当浏览器访问一个HTML页面是, 同时需要访问多个页面资源,还要请求图片等,如果使用端连接每次请求访问都建立一个TCP连接,那么会有多余的开销浪费,如图1。

HTTP/1.1 提出了长连接的方法,长连接如图2, 只用建立一次连接即可进行多次HTTP通信,只要任意一段没有明确提出断开连接,则保持TCP连接状态。

HTTP/1.1默认长连接,设置通用首部Connection:close;即可断开连接HTTP/1.1之前默认是短链接,使用长连接需设置Connection:Keep-Alive

流水线指在一条长连接上不等待响应返回而是连续发出请求,减少网络传输的延迟开销。

HTTPS

加密

对称加密

加密和解密使用同一密钥

优点 : 加密和解密速度快, 适合大数据场景缺点 : 一对多的通信中需要维护多组密钥, 且密钥传输时容易被窃取。

非对称加密

使用公钥和私钥一对密钥,使用其中一个加密则需要用另一个解密。

优点:加密和解密使用不同的密钥, 方便密钥的传输和分发。缺点:加密和解密的速度较慢。

HTTPS采用的加密方式

HTTPS采用混合的加密方式

客户端向服务器发送请求, 获取服务端的证书(带有公钥)客户端用公钥加密对称密钥, 再发送给服务器.服务器收到了加密的密钥后, 用自己的私钥进行解密, 这样双方就安全地获得了对称密钥.之后双方使用对称密钥加密进行通信。

数字签名

数字签名就是加了密的校验和

签名的作用: 数字签名对原文的保密性没有要求, 主要负责发送者身份的验证和发送内容完整的检验。

签名原理:对要发送的内容采用哈希算法生成一段摘要,根据摘要可以验证内容的完整性。 为了防止摘要被篡改伪造,发送者可以用自己的私钥对摘要进行加密,接受者将收到的内容生成的摘要和用公钥就解密后的摘要进行对比,即可防止伪造摘要,也可以确认发送者身份。

存在的问题: 公钥会被伪造

认证

为了解决公钥被伪造的问题, 引入了证书中心(CA机构), 为服务端的公钥做认证。

证书的获得:

A找CA证书中心, 提供私钥,组织信息,个人信息等,申请认证证书中心通过线上,线下等手段验证申请者的身份,向申请者发送数字证书。数字证书的内容:A的公开密钥,A的名称,过期时间,证书发布者,来自证书发布者的数字签名

证书的验证:

客户端收到证书后会对签名的颁发机构进行检查,如果堆机构一无所知,浏览器会提示是否信任该证书颁发机构如果该机构是可信任的,客户端会用签名颁发机构的公钥密钥解密证书附带的数字签名,验证证书的完整性和发送方的可靠性。

GET和POST比较

GETPOST用途从服务器上获取数据向服务器上传数据请求行GET /url HTTP/1.1POST /url HTTP/1.1请求体没有请求体在首部后 以空行分割参数参数拼接在URL里, 安全性较低,参数只能是ASCII,长度最大2048参数放在请求体里, 安全性较高,参数类型和长度均无限制幂等性浏览器退回和刷新无害退回和刷新会重复提交

HTTP1.0 HTTP1.1 和 HTTP2.0的区别

HTTP1.0HTTP1.1连接默认使用短连接默认长连接, 支持流水线缓存主要以header里的If-Modified-Since,Expires为判断增加了Entity tag, If-Unmodified-Since, If-Match等更多的缓存控制策略带宽优化header和body一起发送支持只发送header信息, 如果服务器认为客户端有权限则返回100, 客户端可继续发送body, 无权限返回401, 则不需发送body, 节约带宽。支持range范围请求。Host请求首部无法访问同一个服务器IP地址上的不同主机支持Host头域,可以访问同一服务器的不同主机。 HTTP1.1HTTP2.0多路复用客户端在同一时间对同一域名的请求有一定数目限制采用多路复用技术,给request加上id区分,一个连接可以并发处理多个request首部压缩不支持header数据压缩支持header数据压缩,且双方同时维护更新一个首部字段表,从而避免首部重复传输服务器推送不支持在客户端请求数据时,服务器会把相关的数据一同发送。比如请求一个page.html页面时,服务器会将script.js和style.css等一起发送。
最新回复(0)