HTTP协议初认识、速了解

简介: 系统讲解HTTP定义、特点(无状态、无连接、灵活等)、版本演进(HTTP/1.0→1.1→2.0对比),以及URI/URL/URN区别和请求流程,适合初学者快速掌握核心概念。

前言

本文讲解,什么是HTTP协议,旨在了解HTTP协议

个人主页:艺杯羹

1. 什么是HTTP协议

HTTP中文名叫 超文本

超文本是用超链接的方法,将各种不同空间的文字信息组织在一起的网状文本。超文本更是一种用户界面范式,用以显示文本及与文本之间相关的内容

HTTP协议:

HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写, HTTP是万维网(WWW:World Wide Web)的数据通信的基础。

HTTP是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。

HTTP是一个基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)

2. HTTP协议特点

  1. 支持客户端/服务端模式
    需要使用浏览器作为客户端来访问服务端
  2. 简单快速:
    客户向服务器请求服务时,只需传送请求方法和路径。请求方法常用的有GET、POST等。
  3. 灵活:
    HTTP允许传输任意类型的数据对象。正在传输的类型由Content-Type(Content-Type是HTTP包中用来表示内容类型的标识)加以标记。
  4. 无连接:
    每次请求一次,释放一次连接。所以无连接表示每次连接只能处理一个请求。优点就是节省传输时间,实现简单。我们有时称这种无连接为短连接。
    这里提到了短连接,那么就有对应的长连接(下方解释)
  5. 单向性:
    服务端永远是被动的等待客户端的请求
  6. 无状态:
    HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力
    你可以想一下,在网上登录一些网站的时候,下一次又要重新登录了,这就是因为HTTP协议没有记忆力(无状态)
    那为什么有些网站可以保留自己的登录记录,就是因为使用了两种技术  
  1. Cookie    2. Session (之后会讲到)
    那么FTP是有状态的,最大的特点就是支持断点续传(下载东西时,电脑突然停电,但是重启电脑后,又可以继续下载)
    这个状态就是能够知道上次下载到哪了

长连接

长连接专门解决效率问题。当建立好了一个连接之后,请求可以多次。但是缺点就是容易造成占用资源不释放的问题。
为什么短连接效率低?
1. 短连接效率低:因为一次连接就要进行三次握手,四次挥手
2. 长连接效率高:一次创建,多次请求,缺点是资源不释放的问题
默认长连接,对服务器优化,在固定时间内关掉所有的客户端的TCP连接

3. HTTP协议发展和版本

3.1. HTTP1.0

最早在1996年在网页中使用,内容简单,所以浏览器的每次请求都需要与服务器建立一个TCP连接,服务器处理完成后立即断开TCP连接(无(短)连接),服务器不跟踪每个客户端也不记录过去的请求(无状态),请求只能由客户端发起(单向性)

3.2. HTTP1.1

到1999年广泛在各大浏览器网络请求中使用,HTTP/1.0中默认使用Connection: close。在HTTP/1.1中已经默认使用Connection: keep-alive(长连接)
1.1中最重要的一个特点是支持“长连接”,即“一次连接可以多次请求”

3.3. HTTP2.0

因为HTTP2.0需要客户端和服务器都是2.0版本的才可以用
所以现在还没有用起来
慢慢的1.1会被2.0代替

3.4. http1.1和http2.0区别

协议

传输格式

多路复用

首部压缩

服务器推送

请求优先级

http1.1

文本

×

×

×

×

http2.0

二进制帧

4. HTTP协议中URI、URL、URN

4.1. URI

URI:(Uniform Resource Identifier),统一资源标识符,是一个用于标识互联网某个唯一资源的字符串名称。

URL和URN都是URI的子集。

URI是个纯粹的语法结构,用于指定标识Web资源的字符串的各个不同部分。他不属于定位符,因为根据该标识符无法定位任何资源。
只标识唯一

4.2. URL

URL(Uniform Resource Location),统一资源定位符,可以帮助我们定位互联网上的某一个唯一资源,相当于是互联网资源的身份证号。

URL的五个元素包括在一个简单的地址中:

  • 传送协议
  • 服务器(通常为域名或者IP地址)
  • 端口号(以数字方式表示,若为HTTP的默认值“:80”可省略)
  • 请求资源路径
  • 传递数据(在URL中传递数据是以key=value的结构进行数据绑定,以“?”字符为起点,每个参数以“&”隔开,再以“=”分开参数名称与数据,通常以UTF8的URL编码,避开字符冲突的问题)

例如

http://www.baidu.com:80/image/yibeigen.html?a=1b=2
1. https 是协议
2. www.baidu.com 服务器域名
3. 80 端口
4. ?a=1b=2 请求时传递的数据(get方式)

4.3. URN

URN(Uniform Resource Name,)统一资源名称,其目的是通过提供一种途径,用于在特定的命名空间资源的标识,以补充网址

URN是URI的子集,包括名字(给定的命名空间内),但是不包括访问方式来。
地址栏的地址可以叫URI也可以叫URL

5. HTTP协议的请求

5.1. HTTP协议中的请求信息

打开一个网页就会需要浏览器发送很多次Request

  • 当你在浏览器输入URL https://blog.csdn.net/qq_46987323?spm=1010.2135.3001.5343 的时候,浏览器发送一个Request去获取https://blog.csdn.net/qq_46987323?spm=1010.2135.3001.5343的html. 服务器把Response发送回给浏览器。
    如果后面没有资源,浏览器就会默认的将首页地址给客户端
  • 浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如图片,CSS文件,JS文件
  • 浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件
  • 等所有的文件都下载成功后。 网页就被显示出来了

5. 总结

HTTP 协议是 Web 通信的基础,从 HTTP1.0 的短连接到 HTTP1.1 的长连接优化,再到 HTTP2.0 的性能升级,其发展始终围绕效率和用户体验。URI / URL / URN 则从不同维度标识和定位网络资源,而请求流程则体现了浏览器与服务器的交互逻辑

下一文再深入HTTP

目录
相关文章
人工智能 缓存 前端开发
11944 62
人工智能 JavaScript 开发工具
4781 17
Web App开发 人工智能 API
1349 1
人工智能 Java BI
1425 1
开发工具 Swift git
1954 6
人工智能 JavaScript 测试技术
2338 2
人工智能 自然语言处理 安全
896 0
人工智能 JavaScript 测试技术
1168 4
缓存 JavaScript Shell
2094 3