澳门新蒲京娱乐


开发编译mqtt报错
图片 29
Aspect基于spingmvc自定义表明完结操作记录,操作日志记录

HTTP协议简介详解

协议简介

协议,自然语言里面就是契约,也是双方或者多方经过协商达成的一致意见;

契约也即类似于合同,自然有甲方123…,乙方123…,哪些能做,哪些不能做;

通信协议,也即是双方通过网络通信必须遵从的一组约定;

计算机网络的本质在于传递数据,协议自然是针对于数据的结构格式以及传送规则的约定;

之前介绍过计算机网络的发展,其中TCP/IP协议栈共分为四层,两个程序端点数据的传输是U字形的

应用层

传输层

网络层

网络接口层

HTTP是工作在应用层的协议,所谓的工作在哪层,只不过是对底层的封装程度而已;

 

HTTP报文 — 用于HTTP协议交互的信息

  • 报文结构:报文首部和报文主体

  • 报文首部:

    • 状态/请求行:

      • 请求行:用于请求的方法,请求URI和HTTP版本,例:GET/HTTP/1.1
      • 状态行:表明响应结果的状态码,原因短语和HTTP版本,例:HTTP/1.1
        200 OK
    • 报文首部字段

    • 其他 – 可能包含HTTP的RFC里未定义的首部,例如Cookie

  • 报文主体 — 用户和资源的信息

  • 在Chrome浏览器下查看报文的方法

![](https://upload-images.jianshu.io/upload_images/11244650-fc37f01e11998bc5.png)

http\_main.png

HTTP协议是什么

HTTP协议是Tim(计算机发展系列提到过)发明的,也正是他完成了万维网三大基础技术的设计:命名方案(URI),通信协议(HTTP)和用来表示信息的标记语言(HTML);

回过神来仔细想想web的发展过程,web是B/S结构的,浏览器(B)通过网络向服务器(S)请求数据,

有了TCP/IP协议以及Socket编程,你可以很容易的完成服务器与请求方的数据沟通;

但是信息的传递的重点在于信息本身,而不是这一次的数据交换,必须要能够相互理解;

因为单纯的数据交流并没有任何意义,必须有对话的基础,那就是”语言”;

就好像你(请求方)在说普通话,水果店老板(服务器)在讲英语,你们从早上交流到晚上可能并没有有效的传递任何信息;

所以HTTP协议就是这样一种用于浏览器客户端与服务器交流的一种”语言”;

他规定了对话的语法以及格式,有了HTTP协议,客户端和服务器端就可以相互理解对方,才能达到信息交换的目的;

既然HTTP是为了WEB创造的,自然是请求获取的一个过程,而且当时就是HTML

所以最初他就是这么简单,获取一个名为XXX的HTML文件

GET /index.html

1991年Tim写了一篇关于HTTP的协议的文章,被看做是HTTP/0.9

地址:

HTTP-Hypertext Transfer protocol
,超文本传输协议,他的名字完整的对自己进行了释义:传输超文本HTML文件的协议;

 

请求格式

  • 最多分为4部分,最少三部分,即第四部分可以没有
  • 第一部分的动词包括:
    • GET(获取)
    • POST(新增或上传)
    • PUT(更新,整体更新)
    • PATCH(更新,更新其中一部分)
    • DELETE(删除)
    • HEAD (获取请求中隐含的元信息,而不传输实体本身)
    • OPTIONS()
  • 第一部分的路径:包括查询参数即?后的内容,但是不包括锚点即#后的内容,如果没有写路径,默认为\
  • 第二部分的Content-Type用于定义第四部分的格式
  • 第三部分永远是空行,用于区分第二部分和第四部分

1 动词 路径 协议/版本
2 Key1: value1
2 Key2: value2
2 Key3: value3
2 Content-Type: application/x-www-form-urlencoded
2 Host: www.baidu.com
2 User-Agent: curl/7.54.0
3 
4 要上传的数据
  • 在Chrome浏览器查看一个实际的请求报文
![](https://upload-images.jianshu.io/upload_images/11244650-aadf1150b1aa5ef6.png)

http\_request\_header.png

HTTP协议的发展

最初的版本,看起来可能比较简陋,他只能单独的请求数据,连是不是请求出错了都无法感知,显然,这不可能持续满足需求;

1996年 HTTP/1.0 版本发布

1.0是相对于0.9的大阔步发展,增加了很多内容,详见RFC1945 

不再限制内容的格式只能是HTML,任何格式都可以;

除了GET还引入了POST 和 HEAD
丰富了浏览器客户端和服务器的交互

HTTP请求和相应的格式信息也更加丰富,还增加了状态码等等内容

1997年1月,HTTP/1.1 版本发布,只比 1.0
版本晚了半年,1.1是1.0的升级优化版,重点在于完善优化

这也是目前一直在用的一个版本

 

响应格式

  • 状态码:
    • 1XX:信息性状态码,接受的请求正在处理
    • 2XX:成功状态码
    • 3XX:重定向状态码
    • 4XX:客户端错误状态码
    • 5XX:服务器错误状态码

1 协议/版本号 状态码 状态解释
2 Key1: value1
2 Key2: value2
2 Content-Length: 17931
2 Content-Type: text/html
3
4 要下载的内容

HTTP协议的格式

 

HTTP默认的端口号为80,HTTPS的端口号为443,HTTP协议包括请求和响应

 

图片 1

其中CRLF是回车换行

图片 2图片 3

图片 4图片 5

 

图片 6

此图片来自于<计算机网络>
,首部也就是前面图中的头部 一个意思

请求和响应都包括:行/头部/主体

请求行包括:方法/URL/版本号

响应行包括:版本号/状态码/描述

请求头和响应头都是KEY:VALUE的键值对形式,个数为n

头部可以分成三个部分:请求/响应头字段、通用头字段、实体头字段。

其中通用头字段和实体头字段部分内容也在响应部分有相同的定义。

请求体通常不用,响应体也不一定用;

 

报文的编码

  • 内容编码:在实体内容上的编码格式,并保持实体信息原样压缩
  • gzip
  • compress
  • deflate
  • identity(不进行编码)
  • 分块传输编码:
  • HTTP通信中,如果实体资源没有全部传输完成,浏览器是无法显示请求的页面的
  • 将传输的大容量数据分割成多块,能够让浏览器逐步显示页面

HTTP请求方法

 

HTTP请求方法有下面几种,常用的有GET、POST请求.

GET 请求指定的页面信息,并返回实体主体。
POST 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
HEAD 类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
PUT 从客户端向服务器传送的数据取代指定的文档的内容。
DELETE 请求服务器删除指定的资源。
CONNECT HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS 允许客户端查看服务器的性能。
TRACE 回显服务器收到的请求,主要用于测试或诊断,还回测试的请求报文

 

报文首部字段 — 用于给浏览器和服务器提供报文主体大小、所使用的语言、认证信息等内容

  • 键值对的形式 — key:value1,value2

  • 类型

  • 通用首部 – 请求报文和响应报文都会使用的首部

  • Cache-Control:操作缓存

  • 请求指令的值

  • no-cache:不接受缓存过的资源

  • no-store:不缓存请求或响应的任何内容

  • max-age=[秒]:如果缓存服务器的资源缓存时间小于max-age,则接受该缓存,否则将请求转发给服务器

  • max-stale(=[秒]):接收已过期的响应,如果没有指定值,则无论过期多久都可以接受,如果指定值,则过期时间在指定值内可以接受

  • min-fresh=[秒]:如果缓存服务器的资源没有超过该事件,则可以接受,否则无法接受

  • no-transform:代理不可更改媒体类型

  • only-if-cached:从缓存获取资源,如果缓存服务器有该资源,不向服务器请求,则接受,如果无,则返回504

  • cache-extension:新指令标记(token)

  • 响应指定的值

  • public:可向任意方提供响应的缓存

  • private:仅向特定用户返回响应

  • no-cache:缓存服务器不能对资源进行缓存

  • no-store:同上

  • no-transform:同上

  • must-revalidate:可缓存但必须再向源服务器进行确认,

  • proxy-revalidate:要求中间缓存服务器对缓存的响应有效性再进行确认

  • max-age=[秒]:资源保存为缓存的最长时间,比Expires优先级高

  • s-maxage=[秒]:公共缓存服务器响应的最大时间,忽略Expires和max-age指令的处理

  • Connection:控制不再转发给代理,管理持久链接

  • Close:明确提出要关闭链接

  • Keep-Alive:1.0的时候需要手动指定持久链接

  • Date:创建HTTP报文的日期和时间

  • Pragma:1.1之前版本使用

  • Trailer:声明在报文主体后记录了哪些首部字段

  • Transfer-Encoding:传输报文主体时采用的编码方式,仅对分块传输编码有效

  • Via:在经过代理和网关时,会在首部字段Via中附加该服务器的信息,可以用于追踪浏览器和服务器之间的传输路径

  • Warning:用于告知用于与缓存相关的问题的警告

  • 请求首部 — 从客户端向服务器端发送请求报文时使用的

  • Accept:客户端能处理的媒体类型及媒体类型的相对优先级

  • 文本文件:text/html,text/plain,text/css…

  • 图片文件:image/jpeg,image/gif,image/png…

  • 视频文件:video/mpeg,video/quicktime..

  • 应用程序使用的二进制文件:application/octet-stream,application/zip…

  • 权重:q= 权重值;(值为0-1之间,1位最大,默认为1)

  • Accept-Charset:客户端支持的字符集

  • Accept-Encoding:支持的内容编码

  • Accept-Language:客户端能够使用的语言集(中文zh-cn或英文en等)

  • Authorization:告知服务器,客户端的认证信息

  • From:告知服务器用户的电子邮箱地址

  • Host:告知服务器,请求的资源所处的互联网主机名和端口号(必写)

  • If-Modified-Since:如果资源更新时间早于该时间,则返回304,否则返回新资源

  • If-Range:值和ETag值相同则作为范围请求处理,否则返回全体资源

  • Range:获取部分资源的范围请求,返回206,无法处理该范围返回200和全部资源

  • Referrer:告知服务器请求的原始资源的URI

  • TE:传输编码,例如分块传输TE:trailers

  • User-Agent:创建请求的浏览器和用户代理名称等信息

  • 响应首部

  • Age:告知客户端,服务器在多久前创建了响应,如果是缓存服务器,则指缓存后的响应再次发起认证到认证完成的时间值

  • ETag:客户端实体标志,将资源以字符串形式做唯一性标识的方式,当资源更新时ETag也需要更新

  • Location:将响应接收方引导至某个于请求URI位置不同的资源

  • Retry-After:客户端应该在多久后再次发送请求

  • Server:告知客户端当前服务器上安装的HTTP服务器应用程序的信息

  • 实体首部

  • Allow:通知客户端能够支持的所有HTTP方法,如GET等,如不支持则返回405

  • Content-Encoding:告知客户端服务器对实体的主体部分使用的编码方式

  • Content-Language:告知客户端实体的主体的自然语言

  • Content-Length:实体主体部分的大小

  • Content-MD5:用于检查报文主体在传输过程中是否保持完整

  • Content-Range:针对范围请求,告知客户端作为响应返回的实体的哪个部分范围

  • Content-Type:实体主体内对象的媒体类型

  • Expires:将资源失效的日期告知客户端

  • Last-Modified:资源最终修改的时间

  • Cookie

  • Set-Cookie:开始状态管理所使用的Cookie信息

  • NAME=VALUE:赋予Cookie的名称和其值

  • expires=DATE:Cookie的有效值(若不明确指定则默认为浏览器关闭前为止)

  • path=PATH:将服务器上的文件目录作为Cookie的适用对象

  • domain=域名:作为Cookie适用对象的域名

  • Secure:仅在HTTPD安全通信时才会发送Cookie

  • HttpOnly:加以限制,使Cookie不能被JS脚本访问

  • Cookie:服务器接收到的Cookie信息

HTTP状态码

三位数字表示,第一位表示类型

1XX  
消息,服务器收到请求,需要请求者继续执行操作

2XX  成功,操作被成功接收并处理

3XX 
重定向,需要进一步的操作以完成请求

4XX 
客户端错误,请求包含语法错误或无法完成请求

5XX 
服务器错误,服务器在处理请求的过程中发生了错误

 

100

Continue

继续。客户端应继续其请求

101

Switching Protocols

切换协议。服务器根据客户端的请求切换协议。只能切换到更高级的协议,例如,切换到HTTP的新版本协议

 

200

OK

请求成功。一般用于GET与POST请求

201

Created

已创建。成功请求并创建了新的资源

202

Accepted

已接受。已经接受请求,但未处理完成

203

Non-Authoritative Information

非授权信息。请求成功。但返回的meta信息不在原始的服务器,而是一个副本

204

No Content

无内容。服务器成功处理,但未返回内容。在未更新网页的情况下,可确保浏览器继续显示当前文档

205

Reset Content

重置内容。服务器处理成功,用户终端(例如:浏览器)应重置文档视图。可通过此返回码清除浏览器的表单域

206

Partial Content

部分内容。服务器成功处理了部分GET请求

 

300

Multiple Choices

多种选择。请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端(例如:浏览器)选择

301

Moved Permanently

永久移动。请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。今后任何新的请求都应使用新的URI代替

302

Found

临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI

303

See Other

查看其它地址。与301类似。使用GET和POST请求查看

304

Not Modified

未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。客户端通常会缓存访问过的资源,通过提供一个头信息指出客户端希望只返回在指定日期之后修改的资源

305

Use Proxy

使用代理。所请求的资源必须通过代理访问

306

Unused

已经被废弃的HTTP状态码

307

Temporary Redirect

临时重定向。与302类似。使用GET请求重定向

 

400

Bad Request

客户端请求的语法错误,服务器无法理解

401

Unauthorized

请求要求用户的身份认证

402

Payment Required

保留,将来使用

403

Forbidden

服务器理解请求客户端的请求,但是拒绝执行此请求

404

Not Found

服务器无法根据客户端的请求找到资源(网页)。通过此代码,网站设计人员可设置”您所请求的资源无法找到”的个性页面

405

Method Not Allowed

客户端请求中的方法被禁止

406

Not Acceptable

服务器无法根据客户端请求的内容特性完成请求

407

Proxy Authentication Required

请求要求代理的身份认证,与401类似,但请求者应当使用代理进行授权

408

Request Time-out

服务器等待客户端发送的请求时间过长,超时

409

Conflict

服务器完成客户端的PUT请求是可能返回此代码,服务器处理请求时发生了冲突

410

Gone

客户端请求的资源已经不存在。410不同于404,如果资源以前有现在被永久删除了可使用410代码,网站设计人员可通过301代码指定资源的新位置

411

Length Required

服务器无法处理客户端发送的不带Content-Length的请求信息

412

Precondition Failed

客户端请求信息的先决条件错误

413

Request Entity Too Large

由于请求的实体过大,服务器无法处理,因此拒绝请求。为防止客户端的连续请求,服务器可能会关闭连接。如果只是服务器暂时无法处理,则会包含一个Retry-After的响应信息

414

Request-URI Too Large

请求的URI过长(URI通常为网址),服务器无法处理

415

Unsupported Media Type

服务器无法处理请求附带的媒体格式

416

Requested range not satisfiable

客户端请求的范围无效

417

Expectation Failed

服务器无法满足Expect的请求头信息

 

500

Internal Server Error

服务器内部错误,无法完成请求

501

Not Implemented

服务器不支持请求的功能,无法完成请求

502

Bad Gateway

充当网关或代理的服务器,从远端服务器接收到了一个无效的请求

503

Service Unavailable

由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中

504

Gateway Time-out

充当网关或代理的服务器,未及时从远端服务器获取请求

505

HTTP Version not supported

服务器不支持请求的HTTP协议的版本,无法完成处理

 

 

相关文章

No Comments, Be The First!
近期评论
    功能
    网站地图xml地图