HTTP(一)协议

HTTP--Hyper Text Transfer Protocol,超文本传输协议,是一种建立在TCP上的无状态连接,客户端发送一个HTTP请求,说明客户端想要访问的资源和请求的动作,服务端收到请求之后,服务端开始处理请求,并根据请求做出相应的动作访问服务器资源,最后通过发送HTTP响应把结果返回给客户端。

HTTP请求

HTTP请求由状态行、请求头、请求正文三部分组成:

状态行:包括请求方式Method、资源路径URL、协议版本Version;

请求头:包括一些访问的域名、用户代理、Cookie等信息;

请求正文:就是HTTP请求的数据。

 

HTTP响应

响应数据格式

HTTP响应由三部分组成:状态行、响应头、响应正文

状态行:包括协议版本Version、状态码Status Code、回应短语;

响应头:包括搭建服务器的软件,发送响应的时间,回应数据的格式等信息;

响应正文:就是响应的具体数据

1xx表示HTTP请求已经接受,继续处理请求
2xx表示HTTP请求已经处理完成
3xx表示把请求访问的URL重定向到其他目录
4xx表示客户端出现错误
5xx表示服务端出现错误

 

常见状态码的含义

200---OK/请求已经正常处理完毕

301---/请求永久重定向

302---/请求临时重定向

304---/请求被重定向到客户端本地缓存

400---/客户端请求存在语法错误

401---/客户端请求没有经过授权

403---/客户端的请求被服务器拒绝,一般为客户端没有访问权限

404---/客户端请求的URL在服务端不存在

500---/服务端永久错误

503---/服务端发生临时错误

HTTP报文格式

HTTP报文是HTTP应用程序之间传输的数据块,HTTP报文分为HTTP请求报文和HTTP响应报文,但是无论哪种报文,他的整体格式是类似的,大致都是由起始、首部、主体三部分组成,起始说明报文的动作,首部说明报文的属性,主体则是报文的数据。接下来具体说明。

HTTP请求报文

 

请求报文的起始由请求行构成(有些资料称为状态行,名字不一样而已,都是指的一个东西),用来说明该请求想要做什么,由<Method>、<URL>、<Version> 三个字段组成,注意每个字段之间都有一个空格

 其中<Method>字段有不同的值

 GET   --- 访问服务器的资源

 POST  --- 向服务器发送要修改的数据

 HEAD  --- 获取服务器文档的首部

 PUT   --- 向服务器上传资源

 DELETE--- 删除服务器的资源

<URL>字段表示服务器的资源目录定位

<Version>字段表示使用的http协议版本

首部部分由多个请求头(也叫首部行)构成,那些首部字段名有如下

Accept     指定客户端能够接收的内容格式类型

Accept-Language 指定客户端能够接受的语言类型

Accept-Ecoding  指定客户端能够接受的编码类型

User-Agent      用户代理,向服务器说明自己的操作系统、浏览器等信息

Connection      是否开启持久连接(keepalive)

Host            服务器域名

主体部分就是报文的具体数据

HTTP响应报文

响应报文的起始由状态行构成,用来说明服务器做了什么,由<Version>、<Status-Code>、<Phrase>三个字段组成,同样的每个字段之间留有空格

<Status-Code> 上边已经说明

首部由多个响应头(也叫首部行)组成, 首部字段名如下

Server    服务器软件名,Apache/Nginx

Date      服务器发出响应报文的时间

Last-Modified   请求资源的最后的修改时间

主体部分是响应报文的具体数据

HTTP协议版本更替

HTTP/0.9

HTTP协议的最初版本, 仅支持请求方式GET,并且仅能请求访问HTML格式的资源

HTTP/1.0

增加了请求方式POST和HEAD;根据Content-Type可以支持多种数据格式,即MIME多用途互联网邮件扩展,例如text/html、image/jpeg等;同时也开始支持cache

但是1.0版本的工作方式是每次TCP连接只能发送一个请求,当服务器响应后就会关闭这次连接,下一个请求需要再次建立TCP连接,就是不支持keepalive

HTTP/1.1    

        解决了1.0版本的keepalive问题,1.1版本加入了持久连接,一个TCP连接可以允许多个HTTP请求; 加入了管道机制,一个TCP连接同时允许多个请求同时发送,增加了并发性;新增了请求方式PUT、PATCH、DELETE等

HTTP/2.0

        为了解决1.1版本利用率不高的问题,提出了HTTP/2.0版本。增加双工模式,即不仅客户端能够同时发送多个请求,服务端也能同时处理多个请求,解决了队头堵塞的问题;HTTP请求和响应中,状态行和请求/响应头都是些信息字段,并没有真正的数据,因此在2.0版本中将所有的信息字段建立一张表,为表中的每个字段建立索引,客户端和服务端共同使用这个表,他们之间就以索引号来表示信息字段,这样就避免了1.0旧版本的重复繁琐的字段,并以压缩的方式传输,提高利用率

版本

产生时间

内容

发展现状

HTTP/0.9

1991

不涉及数据包传输, 规定客户端和服务器之间通信格式, 只能GET请求

没有作为正式的标准

HTTP/1.0

1996

传输内容格式不限制, 增加PUT, PATCH, HEAD, OPTIONS, DELETE命令

正式作为标准

HTTP/1.1

1997

持久连接(长连接), 节约带宽, HOST, 管道机制, 分块传输编码

2015年前使用最广泛

HTTP/2

2015

多路复用, 服务器推送, 头信息压缩, 二进制协议等

逐渐覆盖市场

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值