关于HTTP 你不能不知道的

HTTP:Hyper Text Transfer Protocol(超文本传输协议),是用于服务器向浏览器传输超文本的协议,其建立在TCP/IP之上,由于其简单、快速的特点,得到广泛应用。小采风同学,自作主张选取部分方面,粗略的聊一聊我们不能不知道的常识。

一、HTTP的工作原理

    HTTP协议定义web客户端(通常为浏览器,以下统称为浏览器)向服务器发送请求报文,服务器读取请求报文内容,定位URL中相应资源,以响应报文的方式传送给浏览器,浏览器解析响应报文中的实体数据,呈现出静态和动态页面。其工作原理如下所示:

1)浏览器建立连接

浏览器根据DNS返回的域名的IP地址和服务器端口号(默认为80),建立基于TCP的套接字连接,具体参考TCP之连接的建立与终止

2)发送HTTP请求

以请求报文的形式,包括请求行、请求头部、空行和实体数据部分

3)服务器解析请求并发送HTTP响应

服务器解析请求报文,定位请求资源位置,以响应报文的方式返回,包括响应行、响应头部、空行和实体数据,具体分析见下文

4)浏览器解析实体数据

将静态页面和动态页面显示在浏览器窗口

    在HTTP/1.0版本中,其连接建立一次,断开一次。为解决此问题,HTTP/1.1中提出持久化连接方式,只要任意一端没有提出断开连接,则保持TCP连接状态。在持久连接基础上,管线化发送成为可能。管线化方式,无需等待上次请求响应,直接发送下一次请求,如图一所示:

图1 : 管线化方式发送

    双方在传送数据时,在不同的业务场景下,可选择不同方式来提高效率。常见的有压缩传输、分割传输的分块传输、多部分对象结合传输和部分内容的范围请求传输。

    需要注意的是,HTTP只被用来发布客户端和服务端的应用层命令。当进行数据传输时,除了在数据流的开始和结束部分,是看不到应用层的控制信息的,如图2所示:

图2 : wireshark抓包分析HTTP

二、HTTP报文结构分析

HTTP报文分为请求报文和响应报文,其组成包括请求首部(响应首部)、空白行和实体数据组成。空白行,即使没有数据也不能省略。而请求首部由请求行(响应首部由响应行)、请求头部(响应头部)、通用首部、实体首部和其他项组成,如图3所示:

图3 : 报文结构

上图中请求行和状态行,是需要特别注意的。而首部的类型和种类之多,需要参考《HTTP权威指南》查阅学习。

1)请求行:方法名、路径名和版本号组成

HTTP/1.1中有八种方法,下面一一介绍方法的使用情况:

GET:用来请求访问已被标示的资源,资源是文本,直接返回;资源是程序,返回执行的结果

POST : 用来传输实体主体,与GET类似,但是主要目的并不是为获取响应的主体内容

PUT : 用来传输文件,因自身不具备验证机制,存在安全问题,通常不使用

DELETE : 用来删除文件,与PUT方法相反,同样因自身不具备验证机制,通常不使用

HEADER: 与GET方法相同,只是不返回报文实体数据,主要用于确认URL的有效性及资源的 日期时间等

OPTIONS: 用来查询针对请求URI指定的资源支持的方法

TRACE: 用来确认连接过程中发生的一系列操作,因容易产生跨站追踪攻击,通常不使用

CONNECT:基于SSL和TLS实现通信内容加密传输,主要在HTTPS中使用,下文介绍

而上面的八种方法中,通常是GET和POST方法,介绍一下二者的不同,如图4和图5所示:

图4 : GET方法
图5 : POST方法

a)GET参数包含在URL中,以?与路径区分,多个参数用&连接;POST参数包含在请求报文的实体数据中

b)URL的数据有长度限制,所以GET方式有限制;通常POST方式没有长度限制

c)GET的数据在URL中,使用明文传送,容易被获取;POST数据也是基于明文传送,安全性比GET好一些

2)响应行:版本号、状态码

状态码由表示状态的数字和原因短语组成,状态码分类如下图6:

图6 :  状态码分类

状态码种类繁多,有60多种,具体参考状态码查询,常见的有12种,介绍如下:

200 OK : 表示浏览器发来的请求在服务器端被正常处理了

204 No Content : 表示浏览器发来的请求被服务器正常处理了,但是返回的响应报文中不包含实体数据,及浏览器的页面不更新

206 Partial Content : 服务器仅返回指定范文中的数据,即上文中的部分内容范围传输方式

301 Moved Peramanently : 永久性重定向,即该请求资源被重新分配了URI

302 Found : 暂时性重定向,即该请求的资源被被分配新的URI,希望本次使用新的URI

304 Not Found : 浏览器发送带有附带条件的请求,但因发生条件不满足的情况,服务器端不返回

400 Bad Request : 表示请求报文中存在语法错误

401 Unauthorized : 第一次请求,表示需要通过HTTP认证;若经过第一次请求,仍然出现表示认证失败

403 Forbidden : 表示请求的资源被服务器拒绝了

404 Not Found : 表示服务器无法找到相应的资源,也可以表示服务端拒绝请求且不想说明原因

500 Internal Server Error : 表示服务器在执行请求时发生错误

503 Service Unavailable : 表示服务器暂时处于超负载或正在进行停机维护


事务具有两面性,HTTP的简单也带来了相应的问题,其是一种无状态的不安全的协议,针对这两种劣势,小采风和大家一起继续往下看:

三、Cookie与Session

HTTP是一种无状态协议,不能管理之前的请求和响应间的状态。为解决此问题,引入Cookie机制,通过在请求和响应报文中增加Cookie信息来管理状态,cookie字段就是上文报文结构中的其他项里,如下图7所示:

图7 : Cookie机制工作原理

Session是服务器为浏览器请求建立的程序。服务器根据请求报文中sid来标示该访问的Session,如果没有,则重新生成,并在响应报文中重新添加sid,cookie与session的区别如下:

a)cookie在浏览器端,session在服务器端

b)cookie不安全,容易被利用进行cookie欺骗

c)session可以设置超时时间,一旦超时,重新建立

关于其具体的工作机制,参考cookie和session的区别详解 

四、HTTPS(通常在浏览器端看到有加锁符号)

HTTP存在的不足有:

a)浏览器和服务器互相不认证,可能遭遇伪装

b)通信的传输数据使用明文传输,容易被截获修改

c)数据的完整性无法保证,中途被人篡改也不知道

    HTTPS是如何弥补HTTP在安全方面的不足呢?HTTPS不是应用层新的协议,而是通过SSL和TSL代替HTTP的通信协议接口。通常,HTTP直接与TCP进行通信,而HTTPS中,HTTP先与SSL进行通信,后与TCP进行通信。SSL是目前应用最广泛的网络安全技术。

    在介绍SSL解决HTTP安全性问题之前,我们先来了解一下加密方法。

    通常,加密算法是大家都知道的,但是加密和解密的密钥是不知道的。一旦加密和解密密钥泄露,存在安全性问题。共享密钥加密方式,也称为对称密钥加密方式,浏览器和服务器加密和解密使用相同的密钥。可是,密钥该如何传输呢?传输中间被攻击,则安全性没有保证。

    人类似乎天生就是来解决问题的。公开密钥加密方式,也称为非对称加密方式。服务器,拥有一对存在一定关系的公开密钥和私有密钥。服务器将公开密钥传送给浏览器,浏览器使用收到的公开密钥进行加密,即使中间收到攻击,也因为没有解密密钥,即私有密钥,无法解密。服务器收到加密数据后,使用私有密钥成功解密。

    公开密钥加密方式,处理速度相比于共享密钥加密方式比较慢。

    HTTPS中,SSL充分结合两者优势,利用公开密钥加密方式传输后面使用的共享密钥加密解密的密钥,然后浏览器和服务器使用共享密钥进行加密解密处理,如图8所示:

图8 : HTTPS中的混合密钥加密方式

        HTTPS相比于HTTP,处理速度要慢2到200倍。主要速度影响在,

a)通信处理:HTTP与TCP之间加上SSL之后,通信量会增加很多

b)加密解密:消耗服务器和浏览器端硬件资源,造成较大负载

    所以,并不是所有的均使用HTTPS,敏感信息使用HTTPS,非敏感信息使用HTTP。

近日来,小采风沉迷在协议的迷乱中不能自拔,未来,会近一步推出协议类系列文章,欢迎各位看官关注哦!

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

推荐阅读更多精彩内容