Http

HTTP 协议


HTTP 协议详解

超文本传输协议(HTTP,HyperText Transfer Protocol)是互联网上应用最为广泛的一种网络协议。所有的WWW文件都必须遵守这个标准。设计HTTP最初的目的是为了提供一种发布和接收HTML页面的方法。1960年美国人Ted Nelson构思了一种通过计算机处理文本信息的方法,并称之为超文本(hypertext),这成为了HTTP超文本传输协议标准架构的发展根基。Ted Nelson组织协调万维网协会(World Wide Web Consortium)和互联网工程工作小组(Internet Engineering Task Force )共同合作研究,最终发布了一系列的RFC,其中著名的RFC 2616定义了HTTP 1.1。

HTTP 百度百科

HTTP协议工作流程

Http协议与其他协议一样,也需要以特定的方式进行数据包的封装,并按照一定的流程实现通信交互,而基于HTTP协议的请求/响应模式的信息交互过程可分为四个步骤。

  • (1) 客户端与服务器需要建立连接,如:TCP连接
  • (2) 连接建立后,客户端向服务器发送一个请求,请求报文由三部分组成:请求行、消息报头、响应内容。
  • (3) 服务器接到请求后,解析该请求并返回响应信息,响应报文由三部分组成:状态行、消息头、响应内容。
  • (4) 客户端接收服务器所返回的信息并进行解析、处理和显示。

通常,浏览器访问一个页面,需要发出多次请求获取不同的响应内容,在HTTP/1.0版本中默认是传输一次数据就关闭连接,而在HTTP/1.1版本中默认为是持久连接,即一次TCP连接可以完成多次HTTP请求。是否支持持久连接,是由消息报头中的connection字段决定的,如果请求或响应中的connection设置为close,则客户端和服务器的连接为非持久连接。

请求报文和响应的报文结构简介

HTTP协议的请求和响应数据包一般被称为请求报文和响应报文,根据协议标准,请求报文和响应报文是由报文首部、空行和报文主题组成的,而请求报文的首部又由请求行、请求首部字段、通用首部字段、实体首部字段组成,响应报文的首部由状态行、响应首部字段、通用首部字段、实体首部字段组成。结构图请看往下看:

请求报文和响应报文的结构图.png

根据以上结构,可以将HTTP协议报文包含的内容分为五类:

  • 一、请求行,由请求方法、请求URL、HTTP版本组成;
  • 二、是状态行,由HTTP版本、状态码、原因短语组成;
  • 三、首部字段,包含了请求首部、响应首部、通用首部、实体首部四种类型,一般有名字和值组成;
  • 四、是其他报文首部字段,包含了一些RFC()未定义的首部内容;
  • 五、是报文主体,由任意数据组成。

分析下 Laravel 官网的Http协议

这里我们访问 laravel官网 的请求报文和响应报文,来具体分析

请求报文
响应报文
请求行

(1) 请求行 (火狐可以查看到)

请求行中的请求方法用来描述服务器应该执行的操作,而请求URL指定了操作的资源,HTTP版本用来标识客户端使用的HTTP版本。图中 访问的Laravel网站请求报文的请求方法为“GET”,请求URL为“https://laravel.com/”,HTTP版本位 “HTTP/1.1”。在HTTP规范中定义了一组方法,用于指定服务器的响应动作,如GET方法是指从服务器获取一个文本,具体请求报文头方法及其功能描述见下表:

HTTP请求报文方法及其功能

方法名称 功能描述 是否包含主体数据
GET 从服务器获取文本
POST 向服务器发送客户端数据
PUT 上传客户端的文件到服务器
DELETE 从服务器删除一个文件
HEAD 只获取服务器可以执行的方法
OPTIONS 获取服务器可以执行的方法
TRACE 对经过代理服务器的报文进行追踪

(2) 状态行

状态行包含响应报文服务器使用的HTTTP版本、数字状态码和原因短语,对于图响应报文的状态行,其中HTTP版本为“HTTP/1.1”,数字状态码位 “200”,原因短语“OK”。HTTP的状态共分为五大类,用于描述返回的响应结果。实际HTTP规范中定义的状态码有十几种,比较具有代表性的状态码及含义如下:

HTTP响应报文状态码及其含义

状态码范围 状态码类别 含义
100~199 信息类状态码 收到请求初始部分,请继续发送
200~299 成功状态码
300~399 重定向状态码
400~499 客户端错误状态码
500~599 服务器错误状态码

典型状态码

典型状态码 原因短语 含义
100 continue 收到请求初始部分,请继续发送
200 OK 请求已经被正常处理
204 No Content 请求被成功处理,但没有主体数据
206 Partial Content 对资源部分请求成功
301 Moved Permanently 请求的URL资源已被更新,响应首部包含新的URL
302 Found 请求的URL资源临时更新
304 Not Modified 请求不符合条件,需要更改条件
400 Bad Request 客户端发送一个错误请求
401 Unauthorized 请求需要包含通过HTTP认证的信息
403 Forbiden 访问被拒绝
404 Not Found 没有找到请求的URL
500 Internal Server Error 服务器出现错误,无法提供请求的资源
503 Service Unavailable 服务器正忙,无法提供正常请求的服务

(3) 首部字段

首部字段是构成HTTP报文的基本要素之一,这部分包含的信息也是最为丰富,主要用于规定客户端和服务端在处理请求和响应时的操做。通常,根据首部字段的用途可以分为四类:

  • 通用首部字段
  • 请求首部字段
  • 响应首部字段
  • 实体首部字段

首部字段通常由字段名和字段值构成,中间通过“:”分隔。下面简要介绍下四类字段的作用和部分首部字段含义。

通用首部字段

通用首部字段一般用来提供HTTP报文的最基本信息,这些信息无论是请求报文还是响应报文都可以使用,主要用于描述HTTP协议本身。比如描述HTTP是否支持久连接的Connetion 字段、HTTP发送日期的Date字段、用于缓存控制的Cache-Control 字段等。下面列出了通用首部字段及含义:

通用首部字段名 功能说明
Connection 用于指定客服端/服务器间连接选项,例如指定连续连接或者通过“close”选项通知服务器在响应完成后关闭连接
Date 报文创建日期
Transfer-Enocoding 指定报文主体数据的编码方式
Update 发送端协议准备升级为新版本
Via 报文经过中间节点(网关、代理等)的信息
Cache-Control 指定缓存行为
Warning 错误通知

请求首部字段

请求首部字段一般用于HTTP请求报文中,主要描述客户端的版本、处理能力等信息,用于帮助服务器更好的地提供请求响应字段,如告诉服务器只接收某种响应内容的Accept字段、发送Cookies的Cookie字段等。下面列出的是常用的请求首部字段及含义:

HTTP 报文请求首部字段及含义

请求首部字段名 功能说明
Accept 客户端可处理的媒体类型
Accept-Charset 客户端优先接收的字符集
Accept-Encoding 客户端优先接收的编码格式,如 zip
Accept-Langular 客户端希望的语言种类
Authorization 授权信息,通常用于对服务器发送的WWW-Authenticate
Cookie 用于客户端向服务器发送一个令牌
Cookie2 用来说明客户端支持的Cookie版本
From 客户端的E-mail 地址,由一些特殊的Web客户程序使用,浏览器不会用到它
Host 请求资源所在服务器的主机和端口
If-Modified-Since 只有当所有请求的内容在指定的日期之后又经过修改才会返回它,否则返回 304 “Not Modified”应答
Referer 包含一个URL页面出发访问请求页面
User-Agent 客户端信息,如客户端应用程序名称、版本等
UA-OS 客户端主机上的操作系统名称、版本等信息
UA-Pixels 客服端显示器像素信息

响应首部字段

响应首部字段是描述HTTP 响应本身的字段,一般用于HTTP响应报文中,主要用于描述响应主机的信息、功能等,通过响应首部字段有助于客户端处理响应,并在将来发出更适合服务器的请求,如定时刷新的Refresh头、设置Cookie的Set-Cookie头等。下面列出常用的响应首部字段及含义:

响应首部字段名 功能含义
Age 响应资源创建的时间
Set-Cookie 在客户端设置一个Cookie,服务器用来对客户端进行标识
Server 服务器应用程序软件的名称、版本等信息
Retry-After 当资源不可用时,在此期间再次发送请求
Refresh 表示浏览器应该在多长时间之后刷新文档,以秒计

实体首部字段

实体首部字段用于描述HTTP报文体数据字段。由于报文主体可以存在于请求报文和响应报文中,所以这种类型首部字段可以应用在这两种类型的报文中。实体首部字段用于描述主体内容的元信息,包括实体信息类型、长度、压缩方法、最后一次修改时间、数据有效性等,以便告诉接收者如何进行处理,如Content-Language 用于描述报文主体的语言等。下面列出常用的实体首部字段及含义:

实体首部字段名 功能含义
Allow 资源主体可以支持的HTTP请求方法
Content-Location 通知接收端主体的URL,用于接收端定位到该资源
Content-Encoding 主体适用的编码方式
Content-Language 解释主体时适用的语言
Content-Length 主体的大小,通常以字节数表示
Content-MD5 主体的MD5校验和
Content-Type 主体的对象类型

HTTP协议作为应用层协议离不开TCP/IP协议的支持!

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

推荐阅读更多精彩内容