超文本传输协议(HTTP)

1. 简介

HTTP是位于应用层的一个无状态的协议,默认HTTP的端口号为80,HTTPS的端口号为443。HTTP协议本身是不可靠的实现,要实现可靠地数据传输需要依靠底层的TCP协议。

2. 实现

HTTP的报文包括请求报文响应报文两种

请求报文

请求报文是浏览器向服务器发出请求的报文,由第一行的请求行和后面的首部行组成,每一行都由回车换行(\r\n)结尾,当请求的方法是POST的时候,会在首部行结尾再回车换行加上POST携带的实体数据。

请求行 \r\n
首部行 \r\n
\r\n
实体行

请求行

  • 方法字段:
    • GET(主要方法)
    • POST
    • HEAD
    • PUT
    • DELETE
  • URI字段:请求对象的标识
  • HTTP版本字段:有HTTP/1.0和HTTP/1.1两种

首部行

  • Host:要访问的主机名
  • Connection:值为keep-alive表示该连接为持续连接,为close表示非持续连接。
  • Accept: 可接受的MIME类型,即报文类型。
  • User-Agent: 用户代理, 表示请求的浏览器的类型。
  • Referer: 表示发出请求时处于哪个页面,可用做反盗链。
  • Accept-Encoding: 告诉服务器自己接受的页面编码。
  • Accept-Language: 告诉服务器自己接受的网页语言。
  • Cookie: 将服务器存储在浏览器本地的Cookie值发送给服务器,实现无状态的。HTTP协议的会话跟踪。

响应报文

请求报文是服务器向浏览器发出响应报文,由第一行的状态行、接着首部行、最后的实体行组成,每一行都由回车换行(\r\n)结尾,其中实体行就是请求的数据。

状态行 \r\n
首部行 \r\n
\r\n
实体行

状态行

  • 协议版本:有HTTP/1.0和HTTP/1.1两种
  • 状态码:
    • 200:成功。
    • 301:内容已经永久移动,浏览器会重定向到响应指定的新URI。
    • 302:内容临时移动
    • 304:内容未被修改,响应不包含内容
    • 400:请求不能被服务器理解。
    • 403:无权访问该文件。
    • 404:不能找到请求文件。
    • 500:服务器内部错误。
    • 501:服务器不支持请求的方法。
    • 505:服务器不支持请求的版本。
  • 状态信息:状态码的含义

首部行

  • Connection:值为keep-alive表示该连接为持续连接,为close表示非持续连接。
  • Date:表示报文发送的时间。
  • Server:Web服务器用来处理请求的软件信息。
  • Cache-control:缓存控制
  • ETag:响应对象的标识符
  • Last-Modfied:对象创建或者最后修改的时间。
  • Content-Encoding:Web服务器表明了自己用什么压缩方法压缩对象。
  • Content-Length:被发送的对象的字节数。
  • Content-Type:表示响应的实体行的对象类型。

缓存机制

HTTP的缓存机制是通过Cache-control字段来控制,Cache-control是一个通用首部,请求和响应的首部都可以使用,有几个常见的值:

  • private: 只允许发出请求的客户端缓存
  • public: 允许客户端和代理服务器缓存
  • max-age=x: 缓存的有效期为x秒
  • no-cache: 不直接使用缓存,使用前得向服务器发出请求验证缓存有效性
    • If-None-Match/Etag:当缓存的内容具有Etag标识,就向服务器发送含有If-None-Match字段的请求报文以判断缓存的内存是否与服务器上的内容一致,如果一致,服务器就会返回304状态的响应报文表示可以直接使用缓存,否则返回200状态含有新资源实体的响应报文。
    • If-Modified-Since/Last-Modified:当缓存的内容具有Last-Modified(最后修改时间),就向服务器发送含有If-Modified-Since字段的请求报文以判断缓存的内存在服务器上的是否改变,如果时间一致,就会返回304状态的响应表示可以直接使用缓存,否则返回200状态含有新资源实体的响应报文。
  • no-store: 所有内容都不会缓存
HTTP缓存的使用

HTTPS

HTTPS中的S指的是SSL(安全套接字层)或TLS(传输层安全),TLS是基于SSL开发的。

HTTP的缺点

HTTP属于不安全的通信协议:

  • 使用明文不加密,内容容易被窃读
  • 不能验证对方身份,对方可能是一个伪装的通讯方
  • 无法验证报文的完整性,报文可能被篡改

加密算法

要解决第一个问题必须采用加密算法对报文进行加密,常见的加密算法有对称加密(AES算法,加密解密使用同一把秘钥)、非对称加密(RSA算法,加密和解密采用不同秘钥),HTTPS采用混合加密算法集合和两者的优点。由于非对称加密开销比对称加密大,所以通信过程中报文的加密采用对称加密,而非对称加密用于一开始共享秘钥的传输。

通信过程

  • 客户端发出请求报文,报文包含客户端支持的SSL协议版本、加密算法。

  • 服务器发送数字证书,数字证书可以向数字证书认证机构申请,证书包含以下内容:

    • 证书的发布机构CA
    • 证书的有效期
    • 证书所有人的名称
    • 公开秘钥
    • 签名算法
    • 数字签名(证书内容摘要值的加密结果)
  • 客户端收到证书后验证证书的合法性。数字签名是数字证书机构使用私钥进行加密的结果,得在浏览器本地可以找到对应的公钥进行解密,为了保证证书没有被篡改,客户端会根据签名算法计算出证书内容的摘要值(哈希算法),如与解密后的数字签名一致的话就证明内容没有被篡改并且对方是一个合法通信方。

  • 随后客户端产生一个pre-master secret的随机数用于对称加密,使用数字证书里的公开秘钥对随机数加密并发送给服务器。

  • 服务器收到包含共享秘钥的报文后用自己的私钥解密得到共享秘钥。

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

推荐阅读更多精彩内容