HTTP 协议 - 基础
HTTP:超文本传输协议
HTTP是一个用在计算机世界里的协议。它使用计算机能够理解的语言确立了一种计算机之间交流通信的规范,以及相关的各种控制和错误处理方式。
HTTP 是一个在计算机世界里专门用来在两点之间传输数据的约定和规范。
HTTP Header 请求头和响应头
请求行
请求方法: GET/POST
请求目标:URI
版本号:使用 HTTP 协议版本
状态行
版本号:HTTP 协议版本
状态码:一个三位数,使用代码形式表示处理的结果
原因:作为状态码的补充
请求体
响应体
头字段不区分大小写,原则上不能重复。
常用头字段
HTTP协议规定了非常多的头部字段,可以分为以下四大类:
通用字段:在请求头和响应头都可以出现;
请求字段:仅能出现在请求头里,进一步说明请求信息或者额外的附加条件;
响应字段:仅能出现在响应头里,补充说明响应报文的信息;
实体字段:它实际上属于通用字段,但专门描述body的而外信息。
Host字段是唯一一个HTTP/1.1 规范里要求必须出现的字段,如果请求头里没有Host,那这就是一个错误的报文。
HTTP 请求方法
HTTP1.1规定里8种请求方法,都必须大写的形式存在:
GET:获取资源,可以理解为读取或者下载数据;
HEAD:获取资源的元信息;
POST:向资源提交数据,相当于写入或上传数据;
PUT:类似POST;
DELETE:删除资源;
CONNECT:建立特殊的连接隧道;
OPTIONS:列出课对资源实行的方法;
TRACE:追踪请求-响应的传输路径。
安全和幂等
安全:GET、HEAD(只读)
不安全:POST、PUT、DELETE(修改服务器资源和增删数据)
幂等:GET、HEAD、PUT
非幂等:POST
POST是“新增或者提交数据”,多次提交数据会重建多个资源,所以不是幂等的;而PUT是“替换或更新数据”,多次更新一个资源,资源还是会第一次更新的状态,所以是幂等的。
URI
URI 是用来唯一标记服务器上资源的一个字符串,通常也称为 URL;
URI 通常由 scheme、host:port、path 和 query 四个部分组成,有的可以省略;
scheme 叫“方案名”或者“协议名”,表示资源应该使用哪种协议来访问;
“host:port”表示资源所在的主机名和端口号;
path 标记资源所在的位置;
query 表示对资源附加的额外要求;
在 URI 里对“@&/”等特殊字符和汉字必须要做编码,否则服务器收到 HTTP 报文后会无法正确处理。非 ASCII 码或特殊字符转换成十六进制字节值,然后前面再加上一个“%”
URI 的完整格式
身份信息:登录主机的用户名和密码
片段标识符:URI 所定位的资源内部的一个锚点或者是标签
URI 的编码
仅支持ASCII码,输入非ASCII码会被字段转义。chrome 限制 8182个字符。
Status Code 状态码
1xx:提示信息,表示目前是协议处理的中间状态,还需要后续的操作;能见到的是“101 Switching Protocols” 要求在HTTP 协议的基础上改成其他的协议继续通信,比如WebSocket。
2xx:成功,报文已经收到并被正确处理;
3xx:重定向,资源位置发生变动,需要客户端重新发送请求;
4xx:客户端错误,请求报文有误,服务器无法处理;
5xx:服务器错误,服务器在处理请求时内部发生了错误。
HTTP 特点
HTTP 是灵活可扩展的,可以任意添加头字段实现任意功能;
HTTP 是可靠传输协议,基于 TCP/IP 协议“尽量”保证数据的送达;
HTTP 是应用层协议,比 FTP、SSH 等更通用功能更多,能够传输任意数据;
HTTP 使用了请求 - 应答模式,客户端主动发起请求,服务器被动回复请求;
HTTP 本质上是无状态的,每个请求都是互相独立、毫无关联的,协议不要求客户端或服务器记录请求相关的信息。
以前HTTP协议还有一个“无连接”的特点,指的是协议不保持连接状态,每次请求英东后都会关闭连接,这就和UDP几乎一模一样了。但这样会很影响性能,在HTTP/1.1里就改成了总是默认启用keepalive长连接机制,所以现在的HTTP已经不再是“无连接”的。
HTTP/1.1 优缺点
HTTP 最大的优点是简单、灵活和易于扩展;
HTTP 拥有成熟的软硬件环境,应用的非常广泛,是互联网的基础设施;
HTTP 是无状态的,可以轻松实现集群化,扩展性能,但有时也需要用 Cookie 技术来实现“有状态”;
HTTP 是明文传输,数据完全肉眼可见,能够方便地研究分析,但也容易被窃听;
HTTP 是不安全的,无法验证通信双方的身份,也不能判断报文是否被窜改;
HTTP 的性能不算差,但不完全适应现在的互联网,还有很大的提升空间。
参考资料:
极客时间《透视 HTTP 协议》
评论