前端必备的HTTP基础知识

1、HTTP协议的主要特点

  • (1) 简单快速
    每个资源得到URI是固定的,想访问某个资源,只需要输入这个资源对应的URI就可以了。
    (URL(Uniform Resource Location)统一资源定位符,URI(Uniform Resource Identifier)统一资源标识符。URL是URI的子集,URL就是用定位的方式实现的URI。)

  • (2) 灵活
    每个HTTP头部有个Content-Type,一个HTTP协议通过设置不同的Content-Type值,可以完成不同类型的资源的传输。

  • (3) 无连接
    限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

  • (4) 无状态
    HTTP协议对于事务处理没有记忆能力。知乎一句简单回单很好:就是第二次来你无法识别它曾经来过。(人生若只如初见)
    但是,在通过增加cookie和session机制的前提下,现在的网络请求其实是有状态的。

2、HTTP报文

HTTP报文分为请求报文响应报文

  • (1) 请求报文:由 请求行、请求头、空行和请求体组成
    请求行包含HTTP方法,页面地址、HTTP协议和版本
    请求头包含一些key: value值来告诉服务端需要哪些内容,要注意哪些类型
    空行: 最后一个请求头之后是一个空行,发送回车符和换行符,通知服务器以下不再有请求头。
    请求体:即请求正文。
    如下是一个HTTP请求报文示例:
    HTTP请求报文
  • (2) 响应报文:由 状态行、响应头、空行和响应体组成
    状态行由3部分组成,分别为:协议版本,状态码,状态码描述,之间由空格分隔
    响应头与请求头部类似,为响应报文添加了一些附加信息
    空行: 最后一个响应头之后是一个空行,发送回车符和换行符,通知客户端以下不再有响应头。
    响应体:即响应正文。
    如下是一个HTTP响应报文示例:
    HTTP响应报文

3、HTTP方法

常用的HTTP方法有如下5种:
GET:获取资源
POST:传输资源
PUT:更新资源
DELETE:删除资源
HEAD:获取报文首部

4、POST和GET的区别

主要的区别有如下几点:

  • ① GET在浏览器回退是无害的,而POST会再次提交请求
  • ② GET产生的URL地址可以被收藏,而POST不可以
  • ③ GET请求会被浏览器主动缓存,而POST不会,除非手动设置
  • ④ GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留
  • ⑤ GET请求在URL中传送的参数长度是有限制的,基本为2Kb,所以传送参数不要太长,否则会被浏览器截断,而POST没有限制
  • ⑥ GET参数通过URL传递,而POST放在Request body中
  • ⑦ POST比GET安全,因为GET请求参数直接暴露在URL上,所以不能用来传递敏感信息

5、HTTP状态码

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

常用HTTP状态码:
200 OK:客户端请求成功
206 Partual Content:客户发送了一个带有Range头的GET请求,服务器完成了它
301 Moved Permanently:所有请求的页面已经转移至新的URL(永久重定向
302 Found:所有请求的页面已经临时转移到新的URL(临时重定向
304 Not Modifiled:客户端有缓冲的文档并发出了一个条件性的请求,服务器告诉客户,原来缓冲的文档还可以继续使用
400 Bad Request:客户端请求有语法错误,不能被服务器所理解
401 Unauthorized:请求未经授权,这个状态码必须和WWW-Authenticate报头域一起使用
403 Forbidden:请求页面禁止被访问,一般某个地址只允许服务端访问,客服端访问时就会给出403
404 Not Found:请求资源不存在
500 Internal Server Error:服务器错误
503 Server Unavailable:请求未完成,服务器临时过载或宕机,一段时间后可能恢复正常

6、持久连接

HTTP协议采用“请求-应答”模式,当使用普通模式,即非 Keep-Alive(持久连接)模式时,每个请求/应答客户和服务器都要新建一个连接,完成之后立即断开连接(HTTP协议无连接的协议)

当使用Keep-Alive模式时,Keep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接

Keep-Alive只有在HTTP/ 1.1才支持,HTTP 1.0版本是不支持的。

6、管线化

(1) 什么是管线化?

持久连接(Keep-Alive)的情况下,某个连接上消息的传递类似于:
请求1 —> 响应1 —> 请求2 —> 响应2 —> 请求3 —> 响应3

这个过程中请求一直没有断开的

HTTP管线化(HTTP pipelining) 连接上的消息变成了这样:
请求1 —> 请求2 —> 请求3 —> 响应1 —> 响应2 —> 响应3

请求通道是持久建立的,但并不是请求一次,响应一次,而是将所有请求一次打包过去,然后响应也一次打包回来。

(2) 管线化特点
  • 管线化通过持久连接完成,仅HTTP/ 1.1支持此技术
  • 只有GET和HEAD请求可以进行管线化,而POST则有所限制
  • 初次创建连接时,不应启动管线机制,因为对方(服务器)不一定支持HTTP/1.1版本协议
  • 管线化不会影响响应到来的顺序,如上面箭头所示,响应返回的顺序并未改变。
  • 开启管线化很可能并不会带来性能上的大幅度提升,而且很多服务端和代理程序对管线化支持并不好,因此现代浏览器像 Chrome 和 Firefox 默认并未开启管线化支持。
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 206,482评论 6 481
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 88,377评论 2 382
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 152,762评论 0 342
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 55,273评论 1 279
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 64,289评论 5 373
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,046评论 1 285
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,351评论 3 400
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,988评论 0 259
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,476评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,948评论 2 324
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,064评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,712评论 4 323
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,261评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,264评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,486评论 1 262
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,511评论 2 354
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,802评论 2 345

推荐阅读更多精彩内容

  • 构建一个小项目——FlyBird,学习webpack和react。(本文成文于2017/2/25) 从webpac...
    布蕾布蕾阅读 16,801评论 31 98
  • 无意中看到zhangwnag大佬分享的webpack教程感觉受益匪浅,特此分享以备自己日后查看,也希望更多的人看到...
    小小字符阅读 8,140评论 7 35
  • webpack 介绍 webpack 是什么 为什么引入新的打包工具 webpack 核心思想 webpack 安...
    yxsGert阅读 6,450评论 2 71
  • 版权声明:本文为博主原创文章,未经博主允许不得转载。 webpack介绍和使用 一、webpack介绍 1、由来 ...
    it筱竹阅读 11,028评论 0 21
  • 一步一步学WebPack2 最近将webpack的使用总结一下,便于下一步的使用。本文通过若干的demo,让你一步...
    wavesnow阅读 556评论 0 5