HTTP协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器传输超文本到本地浏览器的传输协议。它可以使浏览器更加高效,使网络传输减少。它不仅保证计算机正确快速地传输超文本文档,还确定传输文档中的哪一部分,以及哪部分内容首先显示(如文本先于图形)等。
用于http协议交互的信息被称为http报文。请求端(客户端)的http报文叫做请求报文,响应端(服务器)的叫做响应报文。
请求报文由请求方法,请求URI,协议版本,首部字段(可选),内容实体(可选)构成
响应报文由协议版本,状态码,原因短语,首部字段(可选),实体主体构成
在每份报文中,请求URI,协议版本,状态码,原因短语,首部字段属于报文首部,然后空一行,剩下的是报文主体。
首部字段有4种:请求首部字段,响应首部字段,通用首部字段,实体首部字段,通用首部和实体首部为请求报文和响应报文都有的,而请求首部只有请求报文有,响应首部只有响应报文有。
报文是http通信中的基本单位,由8位组字节流组成,通过http通信传输。
实体作为请求和响应的有效载荷数据(补充项)被传输,其内容由实体首部和实体主体组成
一般情况下,报文主体等于实体主体。只有当传输中进行编码操作时,实体主体的内容发生变化,才会和报文主体不一致。
http1.0和http1.1支持的方法
方法 | 说明 | 支持http协议的版本 |
GET | 获取已被URI识别的资源 | 1.0,1.1 |
POST | 传输实体主体 | 1.0,1.1 |
PUT | 传输文件(不带验证机制) | 1.0,1.1 |
HEAD | 获得报文首部 | 1.0,1.1 |
DELETE | 删除文件(不带验证机制) | 1.0,1.1 |
OPTIONS | 询问支持方法 | 1.1 |
TRACE | 追踪路径 | 1.1 |
CONNECT | 要求用隧道协议链接代理 | 1.1 |
LINK | 建立和资源之间的联系 | 1.0 |
UNLINK | 断开链接关系 | 1.0 |
http状态码
状态码 | 类别 | 原因短语 |
1XX | Informational(信息性状态码) | 接收的请求正在处理 |
2XX | Success(成功状态码) | 请求正常处理完毕 |
3XX | Redirection(重定向状态码) | 需要进行附加操作以完成请求 |
4XX | Client Error(客户端错误状态码) | 服务器无法处理请求 |
5XX | Server Error(服务器错误状态码) | 服务器处理请求出错 |
14中常用的状态码
200 OK | 表示客户端发来的请求在服务器端被正常处理了 |
204 No Content | 表示服务器接收的请求已处理成功,但返回的响应报文不含实体主体部分 |
206 Partial Content | 表示客户端进行了范围请求,而服务器成功执行了这部分的GET请求 |
301 Moved Permaently | 永久性重定向,表示请求的资源已被分配了新的URI,以后应使用该资源现在所指的URI |
302 Found | 临时性重定向,表示请求的资源已被分配了新的URI,希望用户本次能使用新的URI访问 |
303 See Other | 表示由于请求对应的资源存在着另一个URI,应使用GET方法定向获取请求的资源 |
304 Not Modified | 表示客户端发送附带条件请求时,服务器端允许请求访问资源,但因发生请求为满足条件的情况后,直接返回304 Not Modified(服务器端资源为改变,可直接使用客户端未过期的主体部分) |
307 Temporary Redirect | 临时重定向,和302含义相同 |
400 Bad Request | 表示请求报文中存在语法错误。服务器端无法识别请求 |
401 Unauthorized | 表示发送的请求需要通过http认证的认证信息。若之前已进行过一次请求,则表示用户认证失败 |
403 Forbidden | 表示请求资源的访问被服务器拒绝了。没有权限访问 |
404 Not Found | 表示服务器无法找到请求的资源,即没有这个资源 |
500 Internal Server Error | 表示服务器端在执行请求时发生了错误,也有可能是web应用存在bug或某些临时性故障 |
503 Service Unavailable | 表示服务器暂时处于超负载或正在进行停机维护,现在无法处理请求 |
http通用首部字段
通用首部字段名 | 说明 |
Cache-Control | 控制缓存的行为 |
Connection | 管理逐跳首部和持久连接 |
Date | 创建报文的日期时间 |
Pragma | 报文指令 |
Trailer | 报文末端的首部一览 |
Transfer-Encoding | 指定报文主体的传输编码方式 |
Upgrade | 升级为其他协议,检测是否可使用更高版本协议通信 |
Via | 代理服务器的相关信息,追踪客户端和服务器之间的请求和响应报文的传输路径 |
Warning | 错误通知,通常会告知用户一些与缓存相关的问题的警告 |
http1.1 警告码(Warning共七种)
警告码 | 警告内容 | 说明 |
110 | Response is stale(响应已过期) | 代理返回已过期的资源 |
111 | Revalidation failed(再验证失败) | 代理无法验证资源有效性时失败(服务器无法到达等原因) |
112 | Disconnection operation(断开链接操作) | 代理与互联网链接被故意切断 |
113 | Heuristic expiration(试探性过期) | 响应的使用期超过24小时(有效缓存的设定时间大于24小时的情况下) |
199 | Miscellaneous warning(杂项警告) | 任意警告的内容 |
214 | Tansformation applied(使用了转换) | 代理对内容编码或媒体类型等执行了某些处理时 |
299 | Miscellaneous persistent warning(持久杂项警告) | 任意的警告内容 |
http请求首部字段
请求首部字段 | 说明 |
Accept | 用户代理可处理的媒体类型及媒体类型的相对优先级 |
Accept-Charset | 优先的字符集,用户代理支持的字符集及相对优先顺序 |
Accept-Encoding | 优先的内容编码,用户代理支持的内容编码及优先级顺序 |
Accept-Language | 优先的语言,用户代理能处理的自然语言及自然语言集的相对优先级 |
Authorization | Web认证信息 |
Expect | 期待服务器的特定行为 |
From | 用户的电子邮件地址 |
Host | 请求资源所在的服务器(主机名和端口号) |
If-Match | 和实体标记(ETag)比较,若相同则执行请求,否则返回412状态码 |
If-Modefied-Since | 若If-Modefied-Since字段值早于资源的更新时间,则希望处理该请求,否则返回304状态码 |
If-None-Match | 比较实体标记(与If-Match想反) |
If-Range | 资源未更新时发送实体Byte的范围请求。若If-Range字段值和请求资源的ETag值或时间相一致时,则作为范围请求处理,否则返回全体资源 |
If-Unmodified-Since | 比较资源的更新时间(与If-Modified-Since想反) |
Max-Forwards | 最大传输逐跳数(以十进制形式指定可经过的服务器的最大数目) |
Proxy-Authorization | 代理服务器要求客户端的认证信息 |
Range | 实体的字节范围请求 |
Referer | 对请求中URI的原始获取方(请求的原始资源的URI) |
TE | 告知服务器客户端能处理响应的传输编码方式及相对优先级 |
User-Agent | http客户端程序的信息 |
http响应首部字段
响应首部字段 | 说明 |
Accept-Ranges | 是否接受字节范围请求 |
Age | 资源创建经过的时间,单位为秒 |
ETag | 资源的匹配信息,能告知客户端实体标识 |
Location | 令客户端重定向至指定URI |
Proxy-Authenticate | 代理服务器对客户端的认证信息 |
Retry-After | 对再次发起请求的时机要求 |
Server | http服务器的安装信息 |
Vary | 代理服务器缓存的管理信息 |
WWW-Authenicate | 服务器对客户端的认证信息 |
http实体首部字段
实体首部字段 | 说明 |
Allow | 资源可支持的http方法 |
Content-Encoding | 实体适用的编码方式 |
Content-Language | 实体的自然语言 |
Content-Length | 实体的大小(单位为字节) |
Content-Location | 替代对应资源的URI |
Content-MD5 | 实体主体的报文摘要 |
Content-Range | 实体主体的位置范围 |
Content-Type | 实体主体的媒体类型 |
Expires | 实体主体过期的日期时间 |
Last-Modified | 资源最后修改的日期时间 |
作者:大家讲道理
本次使用bootstrap3.4制作一个响应式,关于bootstrap版本的选择问题我在上一篇文章已详细讲解,方法比较简单,截图操作步骤和配...
Bootstrap是一组用于网站和网络应用程序开发的开源前端框架,包括HTML、CSS及JavaScript的框架,提供字体排印、窗体、按钮、导航...
本周开始,你也许想静下心来学些什么新的东西,或者提高一下你在一门特殊计算机语言或者技术的能力。在四月份,我把a colle...
1.效果图 2.原理 第一步绘制一个整圆颜色自定义,第二部绘制一个内圆,其半径要小于外圆颜色自定 最后一步按照百分比绘制第三个...
javascript正则实现判断整数的方法:1、打开相应的js代码文件;2、通过“var r = /^+?[1-9][0-9]*$/;String str = 123;boolean f...
Node.js是一个非常流行的服务器端JavaScript平台,而MySQL则是一种流行的开源关系型数据库管理系统。在此文章中,我们将探讨如何...
这篇文章主要介绍了html格式化json的实例代码,需要的朋友可以参考下废话不多说了,直接给大家贴代码了,具体代码如下所示:!DOCT...