应用层之HTTP

应用层之HTTP

文章目录

  • 应用层之HTTP
    • 一、前言
    • 二、应用层之HTTP
      • [2.1 概述](#2.1 概述)
      • [2.2 HTTP连接行为](#2.2 HTTP连接行为)
        • [2.2.1 HTTP/1.0](#2.2.1 HTTP/1.0)
        • [2.2.2 HTTP/1.1(应用最多)](#2.2.2 HTTP/1.1(应用最多))
      • [2.3 HTTP报文格式](#2.3 HTTP报文格式)
        • [2.3.1 总体](#2.3.1 总体)
        • [2.3.2 HTTP请求](#2.3.2 HTTP请求)
        • [2.3.3 HTTP响应](#2.3.3 HTTP响应)
    • 三、小结

一、前言

关于万维网有一个重要的数据传输协议------HTTP,这在我们的日常生活中也很常见:浏览器的各种网页,几乎都遵循HTTP协议。

二、应用层之HTTP

2.1 概述

Web的应用层协议就是HTTP(HyperText Transfer Protocol,HTTP),超文本传输协议 ,它是Web的核心协议。下面是HTTP协议中的几个核心概念。

HTML是超文本标记语言,针对的对象是浏览器

HTTP定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及万维网服务器怎样把万维网文档传送给浏览器。

借助浏览器访问对应的服务,大部分都是80端口,我以什么格式表示我要什么,你怎么知道是我要,都是需要双方需要约定的。客户端请求服务,不管成功与否,浏览器都会进行一个响应

HTTP是一个专门在计算机世界里专门在两点之间 传输文字、图片、音频、视频等超文本数据的约定和规范 。HTTP是一种应用层协议 ,它使用TCP 作为传输层协议,因为文档、数据这些信息在我们看来是一种重要的信息,不可丢失

2.2 HTTP连接行为

按照历史进程

2.2.1 HTTP/1.0

概述 :HTTP/1.0采用非持续连接 的方式。在该方式下,每次浏览器要请求一个文件都要与服务器建立TCP连接,当收到响应后就会立即关闭连接

浏览器访问资源,一个资源连接一次。

什么叫资源呢?

a.ttml就是一个资源

a.html是主文件,href,src也是资源,浏览器接收到该文本,开始解析,解析到对应的资源,就会向服务器请求对应的资源

有3个资源,就要建立3次链接,这样就会有一个缺点------效率很差

弊端 :每请求一个文档就要有2倍的RTT的开销。若一个网页上有很多引用对象(例如图片等),那么请求每一个对象都需要花费2RTT的时间。为了减小时延,浏览器通常会建立多个并行的TCP连接同时请求多个对象。但是,这会大量占用万维网服务器的资源,特别是万维网服务器往往要同时服务于大量客户的请求,这会使其负担很重

因为经过3次握手后,服务器希望客户端立即发送请求,然后自己回复一个响应就结束连接。但是这并不可控,为了节省时间,客户端就会在第三次握手(只有一个ACK,没有正文,len = 0)的时候,就顺便发送请求报文(信息复用)。

2.2.2 HTTP/1.1(应用最多)

鉴于1.0版本的HTTP协议,每次都有一个开始握手的时延,响应完立马断掉,于是1.1应运而生~

概述 :HTTP/1.1采用持续连接 方式。在该方式下,万维网服务器在发送响应后仍然保持这条连接,使同一个客户(浏览器)和该服务器可以继续在这条连接上传送后续的HTTP请求报文和响应报文。这并不局限于传送同一个页面上引用的对象,而是只要这些文档都在同一个服务器上就行

优势:节省了很多个RTT时间,使TCP连接的空闲时间减少,提高了下载文档的效率

在浏览器请求主页时,请求了很多html文档,在解析属性时,会链接很多资源,如果每个资源都要握手,就会消耗很多资源

重要字段

Connection:keep-alive(保持长久的连接关系)

2.3 HTTP报文格式

我们上面描述了一下HTTP的理念,那么HTPP的报文格式是怎样的?

报文类型分为请求报文响应报文 。按理说请求和响应的格式不一致,但是为了提供统一化管理,HTTP报文在定义时,将这两种格式设计成了通用的格式

2.3.1 总体

HTTP协议主要由三大部分组成:

  • 起始行(start line):描述请求或响应的基本信息
  • 头部字段(header):使用key-value形式更详细地说明报文。
  • 消息正文(entity):实际传输的数据,它不一定是纯文本,可以是图片、视频等二进制数据。

其实起始行和头部字段并称为请求头或响应头,统称为Header(请求和响应格式一样,内容不一样 );消息正文也叫做实体,称为body。HTTP协议规定每次发送的报文必须要有Header,但是可以没有body,也就是说头信息是必须的,实体信息可以没有。而且在header和body之间必须要有一个空行(CRLF)。如图:

  • 起始行后面一定有一个\r\n(回车换行,二进制格式:0D0A)

    mac:\n

    windows:\r\n

  • 协议头和正文之间应该有一个分隔标志(图中空白部分,空行),不然分不清楚协议头和正文(都是二进制流)

HTTP的格式(更通俗的版本)请求/响应:

起始行\r\n

k-v对的头部字段(\r\n)

\r\n(空行)

正文

2.3.2 HTTP请求

概述

  • 方法:告诉服务器要做什么,具有严格的规范(双方共同约定的)
  • URL(资源)一定是从/开始的
  • 首部字段:后面一定有空格

实例:

重要的字段:

  • accept:接收,我(客户端)发出请求,表示我能接收什么类型的文本
  • Connection:keep-alive(保持长久的连接关系-1.1版本);closed(表示只发一次请求-1.0版本)
  • User-Agent:用户代理,表示请求者(用户)的机器是怎样的
  • Host:主机(常用于验证)

如果使用GET 方法,是没有实体 的,如果使用的是POST 方法,才会有实体 。当用户提交表单时,HTTP客户端通常使用POST方法;与此相反,HTML表单的获取通常使用GET方法。HEAD方法使用类似于GET方法,只不过HEAD方法不会返回对象

主要目的:让服务器识别出"我(客户端)是谁"

2.3.3 HTTP响应

概述

  • 状态码:非常关键(见下文)

  • 状态响应:对状态码进行进一步解释

  • 重要的字段:

    • Server:服务器

      nginx:C/C++写的

    • Connection:和请求头一样

    • Content-Length:界定TCP数据粘包

重定向:网站开发中,很久之前维护的链接------http://.../a.html,后来这个资源的架构变了,网址也变了,但是用户收藏了这个网址,再次点开时,发现"404"了,最终服务器会让已过期的URL转向新的URL,因此就会返回一个3xx的状态码,进行重定向

3xx :还有一个行为,本地浏览器会对已访问的链接进行缓存,下次访问时,尽管仍然需要往远程服务器发送请求,就会发现一个timestamp,当本地服务器和远程服务器的时间戳进行对比,就会返回3xx,表明已经有缓存了,不需更新

练习

解析:

A:GET。。确实是请求报文 A√

B:由Host可知:B√

C:持续连接应该是keep-alive C×

D:有Cookie(身份证),说明此前访问过才会有身份证 D√

解析:

1.1版本,是持续连接的,一次请求-响应是一个RTT,本题考查一共是请求多少资源,由题目可知:1个页面 + 2个JPEG = 3个资源,HTTP是建立在TCP基础上,浏览器建立连接也需要一个RTT,并且第3次握手和第1个资源请求是同步的,因此最终是4个RTT

三、小结

HTTP利用TCP保证了稳定传输,协议定义保证了持续连接,格式上也具有严格的划分,真正为万维网的数据传输保驾护航。

相关推荐
插件开发2 小时前
win10电脑手机蓝牙连接共享手机网络
网络·智能手机·电脑
爱吃生蚝的于勒2 小时前
【Linux】深入理解软硬链接
linux·运维·服务器·c语言·数据结构·c++·算法
照海19Gin2 小时前
静态路由 + 浮动路由实战:小型网络互通配置指南
网络·智能路由器
糕......2 小时前
Java IO流:数据传输的艺术与机制
java·开发语言·网络·学习
散修-小胖子2 小时前
进程的概念、组成、特征—简单易懂
计算机网络·操作系统
米羊1212 小时前
身份威胁检测与响应(上)
网络·安全
全栈工程师修炼指南3 小时前
Nginx | HTTP 反向代理:当缓存失效时如何减轻后端(上游)服务压力?
运维·网络协议·nginx·http·缓存
wwwlyj1233213 小时前
劳特巴赫 cotex-m trace指南
网络
prettyxian3 小时前
【Linux】内核编织术:task_struct的动态网络
linux·运维·服务器