HTTP简介

引言

HTTP(超文本传输协议)是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。

HTTP协议的主要特点:

  1. 支持客户/服务器模式
  2. 简单快速:客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、HEAD、POST。每种方法规定了客户与服务器联系的类型不同。由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
  3. 灵活:HTTP允许传输任意类型的数据对象。正在传输的类型由 Content-Type 加以标记。
  4. 无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。
  5. 无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

HTTP-URL

URI: 统一资源标识符

URL: 统一资源定位符,URL是一种特殊类型的URI,描述了一台特定服务器上某资源的特定位置

HTTP URL 的格式如下: http://host:port/abs_path

  • http 表示要通过 HTTP 协议来定位网络资源;
  • host 表示合法的 Internet 主机域名或者 IP 地址;
  • port 指定一个端口号,为空则使用缺省端口 80;
  • abs_path 指定请求资源的URI;如果URL中没有给出 abs_path,那么当它作为请求 URI 时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。

eg:

  1. 输入:www.baidu.com 浏览器自动转换成: http://www.baidu.com/

  2. http:192.168.0.116:8080/index.jsp

HTTP-报文

HTTP报文是简单的格式化数据块。每条报文都包含一条来自客户端的请求,或者一条来自服务器的相应。它们由三个部分组成:对报文进行描述的起始行(start line)、包含属性的首部(header)、包含数据的主体(body)。

HTTP报文可以分为两类:请求报文响应报文

请求报文格式:
<methord> <request-URL> <version>
<headers>

<entity-body>

响应报文格式:
<version> <status> <reason-phrase>
<headers>

<entity-body>

请求报文和响应报文的格式,只有起始行的语法有所不同

  • 方法(method)

    客户端希望服务器对资源执行的动作。是一个单独的词,如GET、HEAD或POST。

  • 请求URL(request-URL)

    统一资源标识符。

  • 版本(version)

    报文所使用的HTTP版本。其格式如这样:HTTP/<major>.<minor>

  • 状态码(status-code)

    服务器发回的响应状态代码。这三位数字描述了请求过程中所发生的情况。每个状态码的第一位数字都用于描述状态的一般类别(“成功”、“出错”等)。

  • 原因短语(reason-phrase)

    表示状态码的文字描述。

  • 首部(header)

    可以有零个或者多个首部,每个首部都包含一个名字,后面跟着一个冒号:,然后是一个可选的空格,接着是一个值,最后是一个CRLF(回车或者换行)。首部是由一个空行(CRLF)结束的,表示了首部列表的结束和实体主体部分的开始。

  • 实体的主体部分(entity-body)

    实体的主体部分包含一个由任意数据组成的数据块。并不是所有的报文都包含实体的主体部分,有时,报文只是以一个CRLF结束。

报文结构.png

常用HTTP方法

方法 描述 是否包含主体
GET 请求获取 Request-URL 所标识的资源
POST 在 Request-URL 所标识的资源后附加新的数据
HEAD 请求获取由 Request-URL 所标识的资源的首部,不返回实体的主体部分
PUT 将请求的主体部分存储在服务器,并用 Request-URL 作为其标识
DELETE 请求服务器删除 Request-URL 所标识的资源
TRACE 请求服务器回送收到的请求信息,主要用于测试或诊断
OPTIONS 请求web服务器告知其支持的各种功能,可以询问服务器通常支持哪些方法,或者对某些特殊资源支持哪些方法

状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

  • 1xx:指示信息--表示请求已接收,继续处理
  • 2xx:成功--表示请求已被成功接收、理解、接受
  • 3xx:重定向--要完成请求必须进行更进一步的操作
  • 4xx:客户端错误--请求有语法错误或请求无法实现
  • 5xx:服务器端错误--服务器未能实现合法的请求

常见的状态码

状态码 状态描述 说明
200 OK 客户端请求成功
400 Bad Request 客户端请求有语法错误,不能被服务器所理解
401 Unauthorized 请求未经授权,这个状态代码必须和 WWW-Authenticate 报头域一起使用
403 Forbidden 服务器收到请求,但是拒绝提供服务
404 Not Found 请求资源不存在
500 Internal Server Error 服务器发生不可预期的错误
503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后,可能恢复正常

首部(消息报头)

首部和方法配合工作,共同决定了客户端和服务器能做什么事情。

在请求和响应报文中都可以用首部来提供信息,有些首部是某种报文专用的,有些首部则更通用一些,可以将首部分为四个类型:

通用首部

这些是客户端和服务器都可以使用的通用首部。可以在客户端、服务器和其他应用程序之间提供一些非常有用的通用功能。提供了与报文相关的最基本的信息。

首部 描述
Connection 允许客户端和服务器指定与请求/响应连接有关的选项,例如指定连接是连续,或者指定“close”选项,通知服务器,在响应完成后,断开连接
Date 提供日期和时间标志,说明报文是什么时间创建的
Cache-Control 用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响另一个消息处理的缓存机制)
Pragma 另一种随报文传送只是的方式,但并不专用于缓存

请求首部

请求首部是请求报文特有的。他们为服务器提供了一些额外信息,比如客户端希望接收什么类型的数据。用于说明是谁或者什么在发送请求、请求源自何处,或者客户端的喜好及能力。服务器可以根据请求首部给出的客户端信息,试着为客户端提供更好的响应。

请求的信息性首部
首部 描述
Client-IP 提供了运行客户端的机器的IP地址
From 提供了客户端用户的E-mail地址
Host 给出了接收请求的服务器的主机名和端口号
User-Agent 将发起请求的应用程序名称告知服务器
Accept首部

Accept首部为客户端提供了一种能够将其喜好和能力告知服务器的方式,包括它们想要什么,可以使用什么,以及最重要的,它们不想要什么。这样服务器就可以根据这些额外的信息,对要发送的内容作出更明智的决定。

首部 描述
Accept 告诉服务器可以发送哪些媒体类型
Accept-Charset 告诉服务器可以发送哪些字符集
Accept-Encoding 告诉服务器可以发送哪些编码方式
Accept-Language 告诉服务器可以发送哪些语言
安全请求首部
首部 描述
Authorization 包含了客户端提供给服务器,以便对其自身进行认证的数据
Cookie 客户端向服务器传送一个令牌——它并不是真正的安全首部,但确实隐含了安全功能

响应首部

响应首部是响应报文特有的。响应首部为客户端提供了一些额外信息,比如谁在发送响应、响应者的功能,甚至与响应相关的一些特殊指令。这些首部有助于客户端处理响应,并在将来发起更好的请求。

首部 描述
Age (从最初创建开始)响应持续时间
Location 可以将响应接收方(客户端,如浏览器)引导至某个与请求URI位置不同的资源,当请求的资源位置改变时会返回该响应
Server 服务器应用程序软件的名称和版本
WWW-Authenticate 来自服务器的对客户端的质询列表,该首部必须被包含在状态码为401的响应报文中,客户端收到401响应消息的时候,发送含Authorization首部的请求报文请求服务器对其进行验证,服务器响应报文里就包含本首部

实体首部

实体首部提供了有关实体及其内容的大量信息,请求和响应报文中都可能包含实体部分,所以这两类报文都可能出现这些首部。总之,实体首部可以告知报文的接收者它在对什么进行处理。

首部 描述
Content-Base 解释主体中的相对 URL 时使用的基础 URL
Content-Encoding 对主体执行的任意编码方式
Content-Language 主体资源所用的自然语言
Content-Length 主体的长度或尺寸
Content-Locaton 资源实际所处的位置
Content-Type 发送给接收者的实体正文的媒体类型
Content-Range 在整个资源中此实体表示的字节范围
Expires 响应过期的日期和时间,超过该事件,实体不再有效,要从原始的源端再次获取此实体
Last-Modified 实体最后一次被修改的日期和时间
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 193,968评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,682评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,254评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,074评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 60,964评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,055评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,484评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,170评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,433评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,512评论 2 308
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,296评论 1 325
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,184评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,545评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,880评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,150评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,437评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,630评论 2 335

推荐阅读更多精彩内容