HTTP协议

简介

HTTP(HyperText Transfer Protocol),当前一直使用的译法是超文本传输协议。应该算是当前最广泛使用的一种网络协议,现在人们上网都少不了使用浏览器浏览网页,这里面使用的就是HTTP协议。

这里的Transfer是转移,转换的意思,不是传输的意思。当前的译法是一个历史遗留问题

发展史

HTTP协议更新还是比较慢的,也可以说明此协议还是比较稳定的,这么多年只发布了1.0、1.1、2.0三个版本。

  • 1989年3月Tim BernersLee博士提出的一种能让远隔两地的研究者们共享知识的设想:借助多文档之间相互关联形成的超文本,连成可相互参阅的万维网(World Wide Web, 简称WWW或者web)。
  • 1990年HTTP诞生,但是并没有形成一种标准,这时的HTTP被命名为HTTP/0.9
  • 1996年5月,时隔六年之久才正式将HTTP做为一个标准公布,命名为HTTP/1.0,并记载于RFC1945。
  • 1997年1月公布了HTTP/1.1版本是目前使用最为主流的HTTP协议版本。在HTTP/1.0的基础上增加了很多实用的特性。记载于RFC2068,后面又在RFC2626做了更新。
  • 2015年5月HTTP/2.0版本公布,并记载于RFC7540。此版本来源于谷歌的SPDY协议,主要目标是降低延迟。当前浏览器应该都已经支持此版本,但是使用最多的还是HTTP/1.1版本

特点

HTTP有很明显的优点,也有很明显的缺点,所以现在单单使用HTTP协议的极少

  • 原理简单。基于请求、响应方式来完成通信。客户端发出请求,服务端收到请求并处理返回响应信息。
  • 无连接。即每次连接只处理一个请求,完成之后连接断开。在一开始很少人上网的时候是优点,但是当前上网人太多的时候就是一个缺点了,像同时发送大量请求的时候会导致创建大量的连接,浪费计算机资源。这点已经通过keepalive机制解决。
  • 无状态。HTTP协议自身不对请求和响应之间的通信状态进行保存。这对于一个需要用户登录验证再操作的网站是一个灾难性的优点,因为每发一个请求都需要用户登录一次,不过当前已经通过cookie解决。
  • 安全性很差,这个可以通过结合SSL/TLS协议解决,即我们所说的HTTPS:
    1. 通信使用明文,内容可以被窃听。
    2. 不验证通信方的身份,有可能遭遇伪装。
    3. 无法证明报文的完整性,内容有可能遭到篡改。

HTTP协议所处位置

HTTP是应用层协议底层使用的TCP/IP,如下图:


http协议位置.jpg

HTTP报文

HTTP报文结构包含首部和主体两个部分。根据HTTP的通信原理分为请求报文和响应报文


请求报文结构jpg.jpg
响应报文结构png.png

HTTP请求方法

主要是为了告知服务端要做什么样的操作。HTTP/1.1中可用的有:

  • GET: 获取资源
  • POST: 传输实体主体
  • PUT: 传输文件,因安全性差一般不开启
  • DELETE: 删除文件
  • HEAD: 获取报文首部
  • OPTIONS: 询问支持的方法
  • TRACE: 追踪路径

PUT和POST是争议最大的两个方法,这两个方法都可以实现创建资源以及修改资源的目的,取决于设计实现。两者最主要的区别是PUT具有幂等性,而POST的具有。一般来讲都是使用PUT创建或者覆盖资源,而使用POST修改资源。

HTTP首部

HTTP首部由很多字段构成,每个字段由字段名和字段值构成,中间以":"分隔。字段值可以有多个以","分隔。每个字段值还可以设置属性以“;”分隔,q=[0,1]表示权重(即权重取值0到1,默认为1,越大权重越大)。
Accept-Language:zh-CN,zh;q=0.9

注意:当HTTP首部中出现了多个字段名一样的字段时,规范未做明确规定。所以结果也未可知,所以最好不要出现这种情况 。

4种HTTP首部

  1. 通用首部字段
    请求报文和响应报文都会使用的字段。
    常见的有:

    • Connection: 控制不在转发给代理的首部字段和管理持久连接
      Connection:close关闭连接
      Connection:Keep-AliveHTTP/1.0版本实现长连接的方法
    • Upgrade:用于检测HTTP协议及其他协议是否可以使用更改版本进行通信,其参数值可以用来指定一个完全不同的通信协议,像WebSocket协议,就可以使用下面方法:
      Connection: Upgrade
      Upgrade: websocket
      
  2. 请求首部
    从客户端向服务端发送请求时使用的首部。补充请求的附加内容、客户端信息、响应内容相关优先级等。
    常见的有:

    • Accept: 用户代码可处理的媒体类型
    • Accept-Charset: 优先处理的字符集
    • Accept-Encoding: 优先的内容编码
    • Accept-Language: 优先的语言(中文、英文等自然语言)
    • Host:请求资源所在服务器
    accept:text/plain, */*; q=0.01
    accept-encoding:gzip, deflate, br
    accept-language:zh-CN,zh;q=0.9
    
  3. 响应首部
    从服务端向客户端返回报文时使用的首部。补充了响应的附加内容。
    常见的有:

    • Location: 令客户端重定向到指定的URI
    • Retry-After: 对再次发起请求的时机要求
    • Server: HTTP服务器的安装信息
  4. 实体首部
    针对请求报文和响应报文的实体部分使用的首部。补充了与实体资源有关的信息。
    常用的有:

    • Content-Type: 实体主体的媒体类型
    • Content-Length: 实体主体的大小,单位字节
    • Content-Language: 实体主体的自然语言
    • Content-Encoding: 实体主体适用的编码方式
    • Expires: 实体主体过期时间
    • Last-Modified: 资源的最后修改时间
    content-length:5
    content-type:text/html; charset=utf-8
    

HTTP状态码

状态码主要是描述服务端对请求处理的返回结果。
状态码类别

状态码 类别 描述 常用
1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕 200 OK,204 No Content,206 Partial Content
3XX Redirection(重定向状态码) 需求进行附加操作以完成 301 Moved Permanently, 302 Found, 303 See Other, 304 Not Modified, 307 Temporary Redirect
4XX Client Error(客户端错误码) 服务器无法处理请求 400 Bad Request, 401 Unauthorized, 403 Forbidden, 404 Not Found
5XX Server Error(服务端错误码) 服务器处理请求出错 500 Internal Server Error, 503 Service Unavailable
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 157,012评论 4 359
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 66,589评论 1 290
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 106,819评论 0 237
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 43,652评论 0 202
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 51,954评论 3 285
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,381评论 1 210
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,687评论 2 310
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,404评论 0 194
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,082评论 1 238
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,355评论 2 241
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 31,880评论 1 255
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,249评论 2 250
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 32,864评论 3 232
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,007评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,760评论 0 192
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,394评论 2 269
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,281评论 2 259

推荐阅读更多精彩内容