HTTP协议

HTTP

HTTP的特性

  • HTTP协议构建于TCP/IP协议之上,是一个应用层协议,默认端口号是80
  • HTTP是无连接无状态

HTTP报文

请求报文

HTTP协议是以ASCII码传输,建立在TCP/IP协议之上的应用层规范。
规范把HTTP请求分为三个部分:状态行、请求头、消息主体

<method> <request-URL> <version>
<headers>
<entity-body>

HTTP定义了与服务器交互的不同方法,最基本的方法有四种
分别是GET/POST/PUT/DELETE

一个URL地址用于描述一个网络上的资源,而HTTP以上的四种方法对应这对这个资源的查、增、改、删四种操作

  1. GET用于信息获取,而且应该是安全的和幂等的
    安全意味着该操作用于获取信息而非修改信息。
    幂等意味着对同一URL的多个请求应该返回相同的结果

    GET请求报文示例:

    GET /books/?sex=man&name=Professional HTTP/1.1
    Host:www.example.com
    User-Agent:Mozilla/5.0(Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
    Gecko/20050225 Firefox/1.0.1
    Connection:Keep-Alive
    
  2. POST代表一个可能会改变服务器资源的请求

    POST / HTTP/1.1
    Host:www.example.com
    User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
    Gecko/20050225 Firefox/1.0.1
    Content-Type:application/x-www-form-urlencoded
    Content-Length: 40
    Connection:Keep-Alive
    
    sex=man&name=Professional
    
  3. ATTENTION:

    • GET可提交的数据量受到URL长度的限制,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器和服务器对它的限制
    • 理论上说,POST是没有大小限制的,HTTP协议规范也没有进行大小限制,处于安全考虑服务器在实现时会做一定限制

    POST提交数据的方式

    HTTP协议规定POST提交的数据必须在body部分中,但是协议中没有规定数据使用哪种编码方式或者数据格式。实际上,开发者完全可以自己决定消息主体的格式,只要最后发送的HTTP请求满足上面的格式即可。

    但是数据发送出去,还要服务端解析成功才有意义。服务端通常根据请求头(headers)中的Content-Type字段来获取请求中的消息主体的编码方式,再对主体进行解析。POST提交数据方案,包含了Content-Type和消息主题编码方式两部分

    • application/x-www-form-urlencoded
      这是最常见的POST数据提交方式。浏览器的原生<form>表单,如果不设置enctype属性,那么最终就会以 application/x-www-form-urlencoded方式提交数据
    • multipart/form-data
      这是另一种常见的POST数据提交方式。我们使用表单上传文件时,必须让<form>表单的enctype等于multipart/form-data。示例如下:

HTTP1.0与HTTP1.1的区别

  1. 缓存处理:
    • HTTP1.0 使用if-Modified-Since,Expired来作为缓存判断的标准
    • HTTP1.1 使用Entity tag, if-Unmodified-Since, if-Match, if-None-Match控制缓存
  2. 带宽优化及网络连接的使用
    • HTTP1.0 存在带宽浪费的现象,不支持断点续传
    • HTTP1.1 引入range头域,允许只请求资源的某个部分
  3. 错误通知的管理
    • HTTP1.0新增 24个错误状态响应码,
      如409(conflict)表示请求的资源与当前状态发生冲突,410(Gone)表示服务器上的某个资源被永久性删除
  4. Host头处理
    • HTTP1.0中认为每台服务器都绑定一个唯一的IP地址,因此请求消息中URL不会传递主机名(hostname),随着虚拟主机技术的发展,一台物理服务器上可以存在多个虚拟主机,并且共享一个IP地址。
    • HTTP1.1请求消息和响应消息都支持Host头域,且请求消息中如果没有Host头域会报告一个错误(400 Bad Request)
  5. 长连接
    • HTTP1.1支持长连接(PersistentConnection)和请求的流水线处理(Pipelining)处理,在一个TCP连接上可以传送多个HTTP请求和响应,减少了简历和关闭连接的消耗和耗时。在HTTP1.1中默认开启Connection:keep-alive

HTTPS与HTTP的区别

  1. HTTPS协议需要到CA申请证书,一般免费证书少,需要缴费
  2. HTTP协议运行在TCP之上,所有传输的内容都是明文的,HTTPS运行在SSL/TLS之上,SSL/TLS运行在TCP之上,所有传输的内容都是经过加密的
  3. HTTP和HTTPS使用完全不同的连接方式,用的端口也不一样(80->443)
  4. HTTPS可以有效的防止运营商劫持

SPDY:HTTP1.x的优化

  1. 多路复用:SPDY采用多路复用,解决了HTTP高延迟的问题
  2. 请求优先级:多个请求同时发送时,可优先发送高优先级的请求
  3. header压缩
  4. 基于HTTPS的加密协议传输,大大提高了传输数据的可靠性
  5. 服务端推送

SPDY: HTTP->SPDY->SSL->TCP

HTTP2.0和SPDY的区别

  1. HTTP2.0支持明文HTTP传输,而SPDY强制使用HTTPS
  2. HTTP2.0消息头的压缩算法采用HPACK,而SPDY采用DEFLATE

HTTP2.0与HTTP1.x相比的新特性

  1. 新的二进制格式(Binary Format)
    HTTP1.0 解析是基于文本的,HTTP2.0解析采用二进制格式
  2. 多路复用
    每一个request 都支持连接共享机制,一个request对应一个id,这样一个连接上可以有多个request。每个request可以随机混杂在一起,接收方可以根据id将request归属带不同的服务端请求中
    • HTTP1.x一次请求建立一个连接,用完关闭;每一个请求建立一个连接
    • HTTP1.1 Pipelining 采用串行排队处理请求,一旦前面有请求超时,后面的都会被阻塞
    • HTTP2.0 多个请求可同时在一个连接上并行执行,某个请求被阻塞不会影响其它连接
  3. header压缩
    HTTP2.0维护一个字典,差量更新HTTP头部,大大降低因头部传输产生的流量
  4. 服务端推送
    服务端推送可以将客户端需要的资源伴随index.html一起发送到客户端,省去客户端重复请求的步骤。因为没有发起请求,建立连接等操作,所以静态资源通过服务端推送可以极大提高速度
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 229,237评论 6 537
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 98,957评论 3 423
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 177,248评论 0 382
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 63,356评论 1 316
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 72,081评论 6 410
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 55,485评论 1 324
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 43,534评论 3 444
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 42,720评论 0 289
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 49,263评论 1 335
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 41,025评论 3 356
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 43,204评论 1 371
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 38,787评论 5 362
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 44,461评论 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 34,874评论 0 28
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 36,105评论 1 289
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 51,945评论 3 395
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 48,205评论 2 375

推荐阅读更多精彩内容

  • 01概述 HTTP(Hyper Text Transformer Protocol,超文本传输协议)是一种通信协议...
    程序员姜戈阅读 93评论 0 0
  • 在鸡年的最后一天完成了这篇文章。表示愉悦的同时,更要祝福大家狗年大吉吧....下方是一根不正经的分割线... 重新...
    Xiao呆不糊涂阅读 2,166评论 2 26
  • 本文主要内容: 前言:什么是协议?1.http的由来(http是什么)2.http消息格式3.http的使用4.h...
    小曼blog阅读 2,265评论 0 4
  • 原文地址HTTP 协议是互联网的基础协议,也是网页开发的必备知识,最新版本 HTTP/2 更是让它成为技术热点。 ...
    baixiaoshuai阅读 377评论 0 0
  • HTTP协议报文 Http协议报文分为【Http请求报文】和【Http响应报文】 HTTP请求报文 Http请求报...
    四核阿宅阅读 1,466评论 1 2