HTTP协议快速入门

一、定义

The Hypertext Transfer Protocol (HTTP) is an application protocol for distributed, collaborative, hypermedia information systems. HTTP is the foundation of data communication for the World Wide Web. Hypertext is structured text that uses logical links (hyperlinks) between nodes containing text. HTTP is the protocol to exchange or transfer hypertext. -- wikipedia

从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,指示资源的最后修改日期和时间。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,417评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,921评论 3 387
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,850评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,945评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,069评论 6 385
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,188评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,239评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,994评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,409评论 1 304
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,735评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,898评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,578评论 4 336
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,205评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,916评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,156评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,722评论 2 363
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,781评论 2 351

推荐阅读更多精彩内容