HTTP 简介
HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。
HTTP 注意事项
- HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
- HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。
- HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。
HTTP 消息结构
客户端请求消息
客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。

服务器响应消息
HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

HTTP 报文解析
- 请求行: 请求行包括了一个方法和一个请求URL,这个方法描述了服务器应执行的操作,请求URL描述了要对哪个资源执行这个方法,还包含HTTP的版本,用来告知服务器,客户端使用的是哪种HTTP。
- 相应行: 响应行包含了状态信息和操作产生的所有数据结果,将其返回给客户端。响应报文的起始行,称为响应行,包含了响应报文使用的HTTP版本、数字状态码,以及描述操作状态的文本形式的原因短语。
- 方法: 客户端希望服务器对资源执行的动作
GET:从服务器获取一份文档

HEAD:只从服务器获取文档得首部

POST:向服务器发送需要处理得数据

PUT:将请求的主体部分存储在服务器上

TRACE:对可能经过代理服务器传送到服务器上的报文进行追踪

OPTIONS:探测服务器支持哪些方法

DELETE:从服务器上删除一份文档

扩展方法:没有在http/1.1中定义的方法,称为webDAV HTTP扩展(由于扩展方法具有危险性,可以在服务器上添加、删除文件等,故一般站点不支持扩展方法)
COPY:用于在服务器上复制资源
MOVE:用于在服务器上移动资源
MKCOL:允许用户创建资源
LOCK:允许用户锁定资源
- 状态码: 告诉客户端,服务器发生了什么事情
常见的状态码
200:表示从客户端发来的请求在服务器端被正常处理了。
201:一般用于PUT方法上传文件,表示文件创建成功。
301:永久重定向,表示请求的资源已分配信的URI,以后使用该URI代替现在请求的URI。这时应按照Location字段重新保存URI。
302:临时重定向,和301类似,但资源不是被永久移动,只是临时的。
401:表示该请求需要有HTTP认证的认证信息,首次接受到401响应,浏览器会弹出认证的对话窗口。
403:表示该请求的资源服务器拒绝了,一般是该资源设置了权限。
404:表示该请求资源在服务器上无法找到。
500:表示服务器端在执行请求时发生了错误。
503:表示当前服务器超负载正在进行停机维护,目前无法处理请求。
- 首部
常见的HTTP首部字段
Accept:告诉服务器能够发送哪些媒体类型
Accept-Charset:告诉服务器能够发送哪些字符集
Accept-Encoding:告诉服务器能够发送哪些编码
Accept-Language:告诉服务器可以发送哪些语言
Accept-Ranges:对此资源来说,服务器可接受的范围类型
Authorization:包含客户端提供给服务器的认证数据,用于401中
Cookie:用户身份会话令牌,用于服务器标识客户端身份,因为HTTP是无状态的协议,需要引入cookie机制来进行有状态管理
Age:响应持续时间
Server:服务器应用程序的名称和版本
Set-Cookie:服务器返回给客户端的会话标识
Content-Length:主体的大小
Content-Type:主体的对象类型
Date:创建报文的时间
Host:请求资源所在的服务器
User-Agent:HTTP客户端程序的信息
Location:令客户端重定向到指定URL
Allow:资源可支持的HTTP方法
Cookie
由于HTTP是匿名、无状态的请求/响应协议,服务器处理客户端的请求,然后向客户端回送一条响应,但服务器无法通过协议判定是哪个用户发送的请求,也无法记录用户的请求序列。
有关用户相关信息的HTTP首部
From:用户的邮件地址
User-Agent:用户的浏览器信息
Referer:用户是从哪个页面跳转过来的
Authorization:用户名和密码认证
Client-IP:客户端的IP
X-Forwarded-For:客户端的IP
Cookie:服务器产生的会话令牌
可以看到,除了用Cookie首部,其他首部都无法有效的标识一个具体的用户(都可以伪造)。
Cookie分为两种:会话Cookie和持久Cookie
会话Cookie:是临时Cookie,记录在浏览器内存中,关闭浏览器,内存中的Cookie就删除了(但服务器端的对应Cookie还存在)
持久Cookie:存储在硬盘上,浏览器退出再打开依然存在,通过设置过期时间来进行控制
HTTPS
因为HTTP通信使用明文,可能会造成窃听以及篡改,且无法识别客户端与服务器身份,正是由于这些不安全的因素导致HTTPS产生。
HTTP+加密+认证+完整性保护=HTTPS
- HTTPS是基于SSL的HTTP
HTTPS并非是应用层的一种新协议,只是HTTP通信接口部分用SSL和TLS协议替代而已。
通常,HTTP直接与TCP通信,当使用SSL时,则变成先和SSL通信,再由SSL和TCP通信。在采用了SSL后,HTTP就拥有了HTTPS的加密证书和完整性保护功能。
SSL是独立于HTTP的协议,其他运行在应用层的SMTP和TELNET等协议都可配合该协议进行使用,是目前当前世界上应用最为广泛的网络安全技术。
- HTTP采用混合加密机制
HTTPS采用共享密钥加密和公开密钥加密两者混合并用的混合加密机制。若密钥能够实现安全交换,那么就可考虑只使用公开密钥加密来通信,但公开密钥加密与共享加密相比,其处理速度较慢。
- SSL和TLS
SSL技术最初由网景通信公司提倡,开发过SSL3.0之前的版本,目前已转移到IETE的手中,IETR以SSL3.0为基础,又制定了TLS1.0、1.1、1.2。TSL是以SSL为原型开发的协议,所以统一称为SSL协议。当前主流的版本是SSL3.0和TLS1.0。
认证机制
HTTP 使用的认证方式
BASIC 认证(基本认证)
DIGEST 认证(摘要认证)
SSL 客户端认证
FormBase 认证(基于表单认证)
此外,还有 Windows 统一认证(Keberos 认证、NTLM 认证)
BASIC 认证
HTTP基本认证将用户名和密码打包在一起,并用Base-64编码方式进行编码,BASIC 认证虽然采用 Base64 编码方式,但这不是加密处理。不需要任何附加信息即可对其解码。
换言之,由于明文解码后就是用户 ID和密码,在 HTTP 等非加密通信的线路上进行 BASIC 认证的过程中,如果被人窃听,被盗的可能性极高。
代理、网关、隧道
HTTP通信时,除客户端和服务器外,还有一些用于通信数据转发的应用程序,例如代理、网关和隧道,它们可以配合服务器一起工作。
代理
一种具有转发功能的应用程序,它扮演了位于服务器和客户端“中间人”角色,接受客户端发送的请求并转发给服务器,同时也接受服务器返回的响应并转发给客户端,如我们常说代理IP上网。
使用代理服务器的理由有:利用缓存技术减少网络带宽的流量,进行上网访问控制,获取访问的日志等。
网关
转发其他服务器通信数据的服务器,接受从客户端发送来的请求时,它就像自己是服务器一样对请求进行处理,有时客户端不会查觉自己的通信目标是个网关。但是网关可以使通信线路上的服务器提供非HTTP协议服务,利用网关可以提高安全性,因为可以在客户端与网关之间的通信线路上加密保证数据安全,比如网关可以连接数据库,使用SQL语句查询数据。
隧道
在相隔较远的客户端和服务器两者之间进行中转,并保持双方通信连接的应用程序,隧道本身不会解析HTTP请求。
缓存
指代理服务器或客户端本地磁盘内保存的资源副本,利用缓存技术可减少对源服务器的访问,因此也就节省了通信流量和通信时间,缓存服务器是代理服务器的一种,并归类在缓存代理类型中,如目前流行的CDN技术。
————————————————
版权声明:本文为CSDN博主「a15803617402」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/a15803617402/article/details/81503137