一、定义

从HTTP的定义可以看出,HTTP协议是互联网上进行数据通信的基础协议,用来交换或传输超文本。超文本是一种结构化的文本,在包含文本的节点之间使用逻辑链接(也叫超链接)。

二、概述

HTTP是基于TCP/IP协议的应用层协议。HTTP允许进行客户端和服务器之间的通信。通过HTTP或HTTPS请求的资源由URI(统一资源标识符)或URL(统一资源定位符)来标识。

在客户端-服务器的模式中,HTTP扮演着请求-响应协议的角色。客户端(通常是浏览器)提交HTTP请求消息给服务器。服务器可以提供HTML文件或其他类型的资源,或者代表客户端执行操作,返回响应消息给客户端。响应包含关于请求的完整状态信息。

三、历史

1、HTTP/0.9

该版本于1991年发布。

  • 只接受GET一种请求方法,没有指定版本号,且不支持请求头。
  • 服务器只能返回HTML格式的字符串。

2、HTTP/1.0

该版本于1996年发布。

  • 除了GET方法,还新增了POST和HEAD。任何格式的内容都可以发送。
  • 请求和响应的格式,除了数据部分,还包括头信息,用来描述元数据。
  • 新增了状态码、多字符集支持、权限、缓存、内容编码等功能。

3、HTTP/1.1

该版本于1997年发布。对1.0版本进行了修订和完善,并一直沿用至今。

  • 新增了PUT、PATCH、OPTIONS、DELETE等方法。
  • 客户端请求的头信息新增了Host字段,用来指定服务器的域名,这样就可以将请求发往同一台服务器的不同网站。
  • 新增了持久连接,可以被多个请求多次使用。
  • 新增了管道机制,在同一个TCP连接里,客户端可以同时发送多个请求,但服务器还是按照顺序进行响应。
  • 使用Content-Length声明本次响应的数据长度,以区分多个响应。

4、HTTP/2

该版本于2015年发布。

  • 头信息和数据都是二进制,统称为帧。对头信息进行了压缩。
  • 在一个TCP连接中,客户端可以同时发送多个请求或接收响应,不需要按照顺序一一对应。
  • 将每个请求或响应的所有数据包称为一个数据流,在发送数据包的时候必须标记属于哪个数据流。
  • 允许服务器主动向客户端推送,发送资源。

四、格式

每个HTTP请求和响应都遵循相同的格式,包含请求行/状态行、消息头(Header)和消息体(Body),其中消息体是可选的。

  • 消息头包含若干属性,但要保证一行只有一个属性,并且必须以\r\n(回车换行)结尾。
  • 当遇到空行时,后面的数据全属于消息体。

五、HTTP请求

1、请求行

GET / HTTP/1.1

其中,GET表示请求方法;/表示请求资源的路径;HTTP/1.1表示协议版本。

2、请求方法

用来表明对指定资源的操作方式。常用的请求方法有:

  • OPTIONS,返回服务器针对特定资源所支持的HTTP请求方法。
  • HEAD,与GET请求一致,只不过不会返回响应体。
  • GET,请求指定的资源。
  • POST,向指定资源提交数据进行处理请求,数据包含在请求体中,可能会导致新资源的创建或已有资源的修改。
  • PUT,向指定资源位置上传最新内容。
  • DELETE,请求服务器删除所标识的资源。

GET和POST方法的主要区别:

  • GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连。POST把提交的数据放在Body中。
  • GET提交的数据大小最多1024字节。POST提交的数据大小没有限制。
  • GET提交数据时,会出现在URL上。POST则不会出现在URL上。

3、请求头

是对请求的一种限定,包含很多属性。常用的属性有:

  • Accept,客户端可以接受的MIME类型。
  • Accept-Encoding,客户端可以接受的数据压缩格式。
  • Accept-Charset,客户端可以接受的字符集编码。
  • Accept-Language,客户端可以接受的语言。
  • User-Agent,客户端的一些基本信息,如使用的操作系统和浏览器的名称和版本等。
  • Content-Type,表示请求中的媒体类型信息。
  • Content-Length,表示请求消息体的长度。
  • Connection,指定是否继续保持连接。
  • Host,指定要访问的虚拟主机名和端口号。
  • Cookie,将cookie值发送给服务器。
  • If-Modified-Since,缓存资源的最后获取时间。

六、HTTP响应

1、状态行

HTTP/1.1 200 OK

其中,HTTP/1.1表示协议版本;200表示状态码;OK是状态说明。

2、状态码

根据响应结果的类型,大致分为以下几类:

2.1 1XX(信息类)

该类型状态码表示接收到请求并且继续处理。

  • 100,客户端必须继续发出请求。
  • 101,客户端要求服务器根据请求转换HTTP协议版本。

2.2 2XX(响应成功)

该类型状态码表示动作被成功接收、理解和接受。

  • 200,表明该请求被成功地完成,所请求的资源发送到客户端。
  • 201,提示知道新文件的URL。
  • 202,接受并处理,但处理未完成。
  • 203,返回信息不确定或不完整。
  • 204,收到请求,但返回信息为空。
  • 205,服务器完成了请求,用户必须复位当前已经浏览过的文件。
  • 206,服务器已经完成了部分用户的GET请求。

2.3 3XX(重定向类)

该类型状态码表示为了完成指定的动作,必须接受进一步处理。

  • 300,请求的资源可在多处获得。
  • 301,本网页被永久性转移到另一个URL。
  • 302,请求的网页被重定向到新的地址。
  • 303,建议用户访问其他URL或访问方式。
  • 304,自从上次请求后,请求的网页未修改过。
  • 305,请求的资源必须从服务器指定的地址获得。
  • 306,前一版本HTTP中使用的代码,现已不再使用。
  • 307,声明请求的资源临时性删除。

2.4 4XX(客户端错误类)

该类型状态码表示请求包含错误语法或不能正确执行。

  • 400,客户端请求有语法错误。
  • 401,请求未经授权。
  • 402,保留有效ChargeTo头响应。
  • 403,禁止访问,服务器收到请求,但拒绝提供服务。
  • 404,可连接服务器,但服务器无法取得所请求的网页,请求资源不存在。
  • 405,用户在Request-Line字段定义的方法不被允许。
  • 406,根据用户发送的Accept,请求资源不可访问。
  • 407,类似401,用户必须首先在代理服务器上取得授权。
  • 408,客户端没有在用户指定的时间内完成请求。
  • 409,对当前资源状态,请求不能完成。
  • 410,服务器上不再有此资源。
  • 411,服务器拒绝用户定义的Content-Length属性请求。
  • 412,一个或多个请求头字段在当前请求中错误。
  • 413,请求的资源大于服务器允许的大小。
  • 414,请求的资源URL长于服务器允许的长度。
  • 415,请求资源不支持请求项目格式。
  • 416,请求中包含Range请求头字段,在当前请求资源范围内没有range指示值。
  • 417,服务器不满足请求Expect头字段指定的期望值。

2.5 5XX(服务器错误类)

该类型状态码表示服务器或网关错误。

  • 500,服务器错误。
  • 501,服务器不支持请求的功能。
  • 502,网关错误。
  • 503,无法获得服务。
  • 504,网关超时。
  • 505,不支持的http版本。

3、响应头

是对响应的一种限定,包含很多属性。常用的属性有:

  • Location,实现请求重定向。
  • Server,服务器的基本信息。
  • Content-Encoding,服务器发送数据时使用的压缩格式。
  • Content-Language,发送的数据所用的语言。
  • Content-Type,所发送的数据的类型。
  • Content-Length,发送数据的大小。
  • Set-Cookie,把cookie发送到客户端。
  • Last-Modified,指示资源的最后修改日期和时间。

http协议中各个响应状态200_301_404_500等返回值含义快速一览的更多相关文章

  1. http协议中的响应代码从 1xx ~ 5xx,一共有41种

    http协议中的响应代码从 1xx ~ 5xx,一共有41种 http://how2j.cn/k/http/http-response-code/572.html

  2. 【Android】12.3 在当前Activity中获取另一个Activity的返回值

    分类:C#.Android.VS2015: 创建日期:2016-02-23 一.简介 在上一节的示例中,通过StartActivity(Intent)方法启动另一个Activity后,这两个Activ ...

  3. SendMessage的返回值,就是由相应的响应消息函数的返回值(解释的简洁明了)

    SendMessage Return Values The return value specifies the result of the message processing and depend ...

  4. JAVA中执行JavaScript代码并获取返回值

    JAVA中执行JavaScript代码并获取返回值 场景描述 实现思路 技术要点 代码实现 测试方法 运行结果 改进空间 场景描述 今天在CSDN上偶然看到一个帖子对于一段字符串 “var p=‘xx ...

  5. spring 基于xml的申明式AspectH中的后置通知的返回值获取

    spring 基于xml的申明式AspectH中的后置通知的返回值获取 1. 配置文件 <aop:config> <aop:aspect ref="myAspect&quo ...

  6. HTTP协议图--HTTP 响应状态码(重点分析)

    1. 状态码概述 HTTP 状态码负责表示客户端 HTTP 请求的返回结果.标记服务器端的处理是否正常.通知出现的错误等工作. HTTP 状态码如 200 OK ,以 3 位数字和原因短语组成.数字中 ...

  7. 使用 Vue + axios 时,返回状态200,返回值被浏览器拦截

    目录 一.前言 二.解决方案 1. 在全局定义 2. 单独定义 一.前言 在使用 Vue + TypeScript + axios 时,后端已经配置了Cors的前提下,但是在请求接口的时候,返回状态为 ...

  8. (四)Asp.net web api中的坑-【api的返回值】

    void无返回值 IHttpActionResult HttpResponseMessage 自定义类型 我这里并不想赘述这些返回类型, 可以参考博文http://blog.csdn.net/leon ...

  9. SpringMVC controller中业务方法的参数、返回值

    业务方法的参数 业务方法的参数类型.参数个数是任意的,根据需要使用. 常见的参数类型: HttpServletRequest.HttpServletResponse.HttpSession    获取 ...

随机推荐

  1. [置顶] getopt_long函数基本用法-linux

    一.感性认识: [c-sharp]  view plain copy   #include <stdio.h> #include <getopt.h> char * l_opt ...

  2. iOS学习之sqlite的创建数据库,表,插入查看数据

    目录(?)[-] 新建项目sqliteDemo添加使用sqlite的库libsqlite3dylib sqlite 的方法 获取沙盒目录并创建或打开数据库 创建数据表 插入数据 查询数据库并打印数据 ...

  3. Internationalization composition diagram

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdHJvdWJsZXNob290ZXI=/font/5a6L5L2T/fontsize/400/fill/I0 ...

  4. LM27313 (ACTIVE) 具有 30V 内部 FET 开关(采用 SOT-23 封装)的 1.6 MHz 升压转换器

    The LM27313 switching regulator is a current-mode boost converter with a fixed operating frequency o ...

  5. Ant简单工程的构建

    1.在Ant的官方网站http://ant.apache.org/bindownload.cgi下载Ant最新版本(我下载的是apache-ant-1.8.2-bin.zip),Ant无需安装,直接解 ...

  6. Android屏幕尺寸适配注意事项

    1 基本设置 1.1 AndroidManifest.xml设置 在中添加子元素 android:anyDensity="true"时,应用程序安装在不同密度的终端上时,程序会分别 ...

  7. VS2010 VC++ 项目添加引用 出现 Internal CPS Error问题原因及解决办法

    在VS2010 VC++ 项目添加引用时,有时会出现Internal CPS Error错误,提示信息: 'Internal CPS Error: We couldn't find the exist ...

  8. MYSQL三个默认库的介绍

    数据库INFORMATION_SCHEMA:提供了访问数据库元数据的方式. 元数据是关于数据的数据,如数据库名或表名,列的数据类型,或访问权限等.有些时候用于表述该信息的其他术语包括“数据词典”和“系 ...

  9. GOOGLE突破图书馆入口IP限制之技巧

    很多图书馆都要注册或要本地IP才能浏览或下载图书,有没有另类的快速办法能快速突破图书馆的入口,能随意地下载图书呢? 希望大家在GOOGLE里试试这个:“index of/ ” inurl:lib 你将 ...

  10. [置顶] 一个Web报表项目的性能分析和优化实践(一):小试牛刀,统一显示SQL语句执行时间

    最近,在开发和优化一个报表型的Web项目,底层是Hibernate和MySQL. 当报表数据量大的时候,一个图表要花4秒以上的时间. 以下是我的分析和体会.  1.我首先需要知道哪些函数执行了多少时间 ...