HTTP1.1协议详解

HTTP概述

HTTP协议用于约定服务端(如Web服务器Tomcat、IIS)和客户端(如浏览器、APP)通信的消息格式和响应方式。了解HTTP协议内容有助于优化Http请求,如断点下载、多线程下载、防盗链等功能的实现。HTTP协议是建立在TCP协议之上的,理论上只要有一个Socket就能够实现Http消息的请求,实现比如HttpClient、UrlConnection的请求操作。只要有一个SocketServer就能够实现Http消息的响应,实现比如Tomcat、IIS等Web服务器的功能,比如在手机上部署网站,用户可以在浏览器端访问同一网络下的手机部署的站点。

HTTP请求协议详解

HTTP1.1的请求协议报文结构如下图,大体上可以分为三块,即请求行、头部、消息主体。

HTTP请求协议报文结构

请求行

请求行包含HTTP请求方法、请求的URL、HTTP协议版本三个内容,它们之间以空格间隔,并以回车+换行结束。

HTTP请求方法有下面几种,常用的有GET、POST请求。
- OPTIONS
- GET
- HEAD
- POST
- DELETE
- TRACE
- CONNECT

请求头部

头部可以分成三个部分,为常用头域、请求头域、实体头域。其中常用头域和实体头域部分内容在响应协议部分也有相同的定义。

常用头域
常用头域名称作用描述
Cache-Control缓存控制
ConnectionHTTP 1.1默认是支持长连接的(Keep-Alive),如果不希望支持长连接则需要在此域中写入close
Date表明消息产生的日期和时间
Pragma
Trailer
Transfer-Encoding告知接收端为了保证报文的可靠传输,对报文采用了什么编码方式
Upgrade给出了发送端可能想要”升级”使用的新版本或协议
Via显示了报文经过的中间节点(代理、网关)
Warning
请求头域
请求头域名称作用描述
Accept指明请求端可以接受处理的媒体类型
Accept-Charset指明请求端可以接受的字符集
Accept-Encoding指明请求端可以接受的编码格式
Authorization授权
Expect允许客户端列出某请求所要求的服务器行为
From提供了客户端用户的E-mail地址
Host指明请求端的网络主机和端口号
If-Match服务端在响应头部里面返回ETag信息,客户端请求时在头部添加If-Match(值为响应的ETag),服务端接收后判断ETag是否相同,若相同则处理请求,否则不处理请求。
If-Modified-Since客户端在请求某一资源文件时,在头部加上If-Modified-Since(值为该资源文件的最后修改时间),服务端接收后将客户端上报的修改时间与服务器存储的文件的最后修改时间做对比,如果相同,说明资源文件没有更新,返回304状态码,告诉客户端使用原来的缓存文件。否则返回资源内容。
If-None-Match服务端在响应头部里面返回ETag信息,客户端请求时在头部添加If-None-Match(值为响应的ETag),服务端接收后判断ETag是否相同,若相同,说明资源没有更新,返回304状态码,告诉客户端使用原来的缓存文件。否则返回资源内容。
If-Range该头域与Range头域一起使用,服务端在响应头部里面返回ETag信息,客户端请求时在头部添加If-Range(值为响应的ETag),服务端接收后判断ETag是否相同,若相同,则返回状态码206,返回内容为Range指定的字节范围。若不相同,则返回状态码200,返回内容为整个实体。
If-Unmodified-Since客户端在请求某一资源文件时,在头部加上If-Modified-Since(值为该资源文件的最后修改时间),端接收后将客户端上报的修改时间与服务器存储的文件的最后修改时间做对比,如果相同,则返回资源内容,如果不相同则返回状态码412。
Max-Forwards配合TRACE、OPTIONS方法使用,限制在通往服务器的路径上的代理或网关的数量。
Proxy-Authorization代理授权
Range表示客户端向服务端请求指定范围的字节数量:Range:bytes=0-500表示请求第1个到第501个的字节数量。Range:bytes=100-表示请求第101到文件倒数第一个字节的字节数量。Range:bytes=-500表示请求最后500个字节的数量。Range可以同时指定多组(Range:bytes=500-600,601-999)。并不是所有的服务端都支持字节范围请求的,如果支持字节范围请求,服务端会返回状态码206,若不支持则会返回200,客户端需要根据状态码来判断服务端是否支持字节范围操作。此域可用于断点下载,即在断点处请求后面的内容,也可用于多线程下载同一个文件,每个线程负责一个文件的一部分下载工作,多个线程协同完成整个文件的下载。
Referer用于指定客户端请求的来源,是从搜索引擎过来的?还是从其它网站链接过来的?服务器根据此域,有时可以用做防盗链处理,不在指定范围内的来源,统统拒绝。
TE指明客户端可以接受哪些传输编码。
实体头域
实体头域名称作用描述
Allow指明被请求的资源所支持的方法,如GET、HEAD、PUT
Content-Encoding指明实体内容所采用的编码方式
Content-Language指明实体内容使用的语言
Content-Length指明请求实体的字节数量
Content-Location可以用来为实体提供对应资源的位置
Content-MD5指定实体内容的MD5,用于内容的完整性校验(base64的128位MD5)
Content-Range
Content-Type指定实体的媒体类型
Expires指明实体的过期时间
Last-Modified指明实体最后被修改的时间

HTTP响应协议详解

HTTP1.1的响应协议报文结构如下图,大体上可以分为三块,即状态行、头部、消息主体。

HTTP响应报文结构

状态行

状态行包含HTTP协议版本、状态码、原因短语三个内容,它们之间以空格间隔,并以回车+换行结束。

状态码由三位数字组成,第一位数字定义了响应类型,主要有如下五种类型的状态码

状态码类型作用描述
1xx报告(请求被接收,继续处理)
2xx成功(请求被成功的接收并处理)
3xx重发
4xx客户端出错(客户端错误的协议格式和不能处理的请求)
5xx服务器出错(服务器无法完成有效的请求处理)

状态码和对应的原因短语详细描述

状态码原因短语中文描述
100Continue继续
101Switching Protocols切换协议
200OK成功
201Created已创建
202Accepted接受
203Non-Authoritative information非权威信息
204No Content无内容
205Reset Content重置内容
206Partial Content部分内容
300Multiple Choices多个选择
301Moved Permanently永久移动
302Found发现
303See Other见其它
304Not Modified没有改变
305Use Proxy使用代理
307Temporary Redirect临时重发
400Bad Request坏请求
401Unauthorized未授权的
402Payment Required必需的支付
403Forbidden禁用
404Not Found没有找到
405Method Not Allowed方法不被允许
406Not Acceptable不可接受的
407Proxy Authentication Required需要代理验证
408Request Timeout请求超时
409Confilict冲突
410Gone不存在
411Length Required长度必需
412Precondition Failed先决条件失败
413Request Entity Too Large请求实体太大
414Request-URI Too Long请求URI太长
415Unsupported Media Type不支持的媒体类型
416Requested Range Not Satisfiable请求范围不被满足
417Expectation Failed期望失败
500Internal Server Error内部服务器错误
501Not Implemented服务端没有实现
502Bad Gateway坏网关
503Service Unavailable服务不能获得
504Gateway Timeout网关超时
505HTTP Version Not SupportedHTTP协议版本不支持
响应头域
响应头域名称作用描述
Accept-Ranges服务器向客户端指明服务器对范围请求的接受度
Age从原始服务器到代理缓存形成的估算时间(以秒计,非负)
ETag实体标签
Location指定重定向的URI
Proxy-Autenticate它指出认证方案和可应用到代理的该URL上的参数
Retry-After如果实体暂时不可取,通知客户端在指定时间之后再次尝试
Server指明服务器用于处理请求的软件信息
Vary告诉下游代理是使用缓存响应还是从原始服务器请求
WWW-Authenticate表明客户端请求实体应该使用的授权方案

参考资料

Http协议部分讲解

Http协议官方文档

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值