HTTP:Web世界的基石(前言)

在互联网的浩瀚海洋中,我们每天都在与各种网站、应用、服务进行着无缝的交互。无论是浏览新闻、观看视频、在线购物,还是使用社交媒体、发送电子邮件,这些看似平常的操作背后,都离不开一个至关重要的协议——HTTP(Hypertext Transfer Protocol,超文本传输协议)。

HTTP,作为Web世界的基石,定义了客户端(通常是浏览器)与服务器之间交换数据的规则。它是一种应用层协议,构建在TCP/IP协议栈之上,负责处理Web内容(如HTML、CSS、JavaScript、图片、视频等)的请求和响应。自1990年代初诞生以来,HTTP经历了多个版本的演进,从最初的HTTP/0.9到广泛使用的HTTP/1.1,再到性能大幅提升的HTTP/2,以及最新的HTTP/3,每一次更新都为Web带来了更快的速度、更强的安全性和更丰富的功能。

HTTP的简洁性、灵活性和可扩展性,使其成为Web开发的基础。理解HTTP的工作原理,对于Web开发者、网络工程师、系统管理员,甚至是普通用户,都具有重要的意义。对于开发者而言,掌握HTTP有助于构建高效、可靠的Web应用;对于网络工程师和系统管理员,了解HTTP可以更好地进行网络性能优化和故障排除;而对于普通用户,了解HTTP的基本概念,也能更好地理解Web的工作方式,更安全、高效地使用互联网。

本文将深入探讨HTTP协议的方方面面,包括:

  • HTTP的基本概念、请求和响应的结构。
  • HTTP的方法(GET、POST、PUT、DELETE等)及其语义。
  • HTTP的状态码(200、404、500等)及其含义。
  • HTTP的头部字段(Headers)及其作用。
  • HTTP的缓存机制。
  • HTTP的安全性(HTTPS)。
  • HTTP/1.1、HTTP/2和HTTP/3的比较。
  • HTTP的常见问题和优化技巧。
  • 以及如何使用Python等编程语言进行HTTP编程。

希望通过本文的阐述,读者能够对HTTP协议有一个全面、深入的理解,为构建更出色的Web应用、优化网络性能、提升互联网使用体验打下坚实的基础。让我们一起探索HTTP的世界,揭开Web背后的奥秘!


目录

HTTP:Web世界的基石(前言)

一、HTTP协议介绍

1. HTTP 协议的介绍

2. HTTP 协议的作用

3. 浏览器访问web服务器的通信过程

二、URL的概念

1. URL的概念

2. URL的组成

三、HTTP协议的通信过程

1. 浏览器开发者工具的使用

2. 查看HTTP协议的通信过程

四、HTTP请求报文

1. HTTP 请求报文介绍

2. HTTP GET 请求报文分析

3. HTTP POST 请求报文分析

五、HTTP响应报文

1. HTTP响应报文分析

2. HTTP 状态码介绍

 系列文章目录


一、HTTP协议介绍

1. HTTP 协议的介绍

HTTP 协议的全称是(HyperText Transfer Protocol),翻译过来就是超文本传输协议

超文本是超级文本的缩写,是指超越文本限制或者超链接,比如:图片、音乐、视频、超链接等等都属于超文本。

HTTP 协议的制作者是蒂姆·伯纳斯-李,1991年设计出来的,HTTP 协议设计之前目的是传输网页数据的,现在允许传输任意类型的数据

传输 HTTP 协议格式的数据是基于 TCP 传输协议的,发送数据之前需要先建立连接。

2. HTTP 协议的作用

规定了浏览器和 Web 服务器通信数据的格式,也就是说浏览器和web服务器通信需要使用http协议

3. 浏览器访问web服务器的通信过程

通信效果图:

二、URL的概念

1. URL的概念

URL的英文全拼是(Uniform Resoure Locator),表达的意思是统一资源定位符,通俗理解就是网络资源地址,也就是我们常说的网址。

2. URL的组成

URL的样子:

https://www.csdn.net/?spm=1000.2507.3001.4476

URL的组成部分:

  1. 协议部分https://、http://、ftp://
  2. 域名部分: www.csdn.net
  3. 资源路径部分: /?spm=1000.2507.3001.4476

域名:

域名就是IP地址的别名,它是用点进行分割使用英文字母和数字组成的名字,使用域名目的就是方便的记住某台主机IP地址

URL的扩展:

https://news.163.com/hello.html?page=1&count=10

  • 查询参数部分: ?page=1&count=10

参数说明:

  • ? 后面的 page 表示第一个参数,后面的参数都使用 & 进行连接

三、HTTP协议的通信过程

1. 浏览器开发者工具的使用

首先需要安装Chrome浏览器,然后Windows和Linux平台按F12调出开发者工具, mac OS选择 视图 -> 开发者 -> 开发者工具或者直接使用 alt+command+i 这个快捷键,还有一个多平台通用的操作就是在网页右击选择检查

开发者工具的效果图:

开发者工具的标签选项说明:

  • 元素(Elements):用于查看或修改HTML标签
  • 控制台(Console):执行js代码
  • 源代码(Sources):查看静态资源文件,断点调试JS代码
  • 网络(Network):查看http协议的通信过程

开发者工具使用效果图:

开发者工具的使用说明:

  1. 点击Network标签选项
  2. 在浏览器的地址栏输入百度的网址,就能看到请求百度首页的http的通信过程
  3. 这里的每项记录都是请求+响应的一次过程

2. 查看HTTP协议的通信过程

查看http请求信息效果图:

 

查看http响应信息效果图:

四、HTTP请求报文

1. HTTP 请求报文介绍

HTTP最常见的请求报文有两种:

  1. GET 方式的请求报文
  2. POST 方式的请求报文

说明:

  • GET: 获取web服务器数据
  • POST: 向web服务器提交数据

2. HTTP GET 请求报文分析

HTTP GET 请求报文效果图:

GET 请求报文说明:

---- 请求行 ----
GET / HTTP/1.1  # GET请求方式 请求资源路径 HTTP协议版本
---- 请求头 -----
Host: www.itcast.cn  # 服务器的主机地址和端口号,默认是80
Connection: keep-alive # 和服务端保持长连接
Upgrade-Insecure-Requests: 1 # 让浏览器升级不安全请求,使用https请求
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36  # 用户代理,也就是客户端的名称
Accept:text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8 # 可接受的数据类型
Accept-Encoding: gzip, deflate # 可接受的压缩格式
Accept-Language: zh-CN,zh;q=0.9 #可接受的语言
Cookie: pgv_pvi=1246921728; # 登录用户的身份标识

---- 空行 ----

 GET 请求原始报文说明:

GET / HTTP/1.1\r\n
Host: www.itcast.cn\r\n  
Connection: keep-alive\r\n
Upgrade-Insecure-Requests: 1\r\n
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36\r\n
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8\r\n
Accept-Encoding: gzip, deflate\r\n
Accept-Language: zh-CN,zh;q=0.9\r\n
Cookie: pgv_pvi=1246921728; \r\n
\r\n  (请求头信息后面还有一个单独的’\r\n’不能省略)

说明:

  • 每项数据之间使用:\r\n

3. HTTP POST 请求报文分析

HTTP POST 请求报文效果图:

请求体效果图:

 

POST 请求报文说明:

---- 请求行 ----
POST /xmweb?host=mail.itcast.cn&_t=1542884567319 HTTP/1.1 # POST请求方式 请求资源路径 HTTP协议版本
---- 请求头 ----
Host: mail.itcast.cn # 服务器的主机地址和端口号,默认是80
Connection: keep-alive # 和服务端保持长连接
Content-Type: application/x-www-form-urlencoded  # 告诉服务端请求的数据类型
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36 # 客户端的名称
---- 空行 ----
---- 请求体 ----
username=hello&pass=hello # 请求参数

POST 请求原始报文说明: 

POST /xmweb?host=mail.itcast.cn&_t=1542884567319 HTTP/1.1\r\n
Host: mail.itcast.cn\r\n
Connection: keep-alive\r\n
Content-Type: application/x-www-form-urlencoded\r\n
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_4) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/69.0.3497.100 Safari/537.36\r\n
\r\n(请求头信息后面还有一个单独的’\r\n’不能省略)
username=hello&pass=hello

说明:

  • 每项数据之间使用:\r\n

五、HTTP响应报文

1. HTTP响应报文分析

HTTP 响应报文效果图:

 响应报文说明:

--- 响应行/状态行 ---
HTTP/1.1 200 OK # HTTP协议版本 状态码 状态描述
--- 响应头 ---
Server: Tengine # 服务器名称
Content-Type: text/html; charset=UTF-8 # 内容类型
Transfer-Encoding: chunked # 发送给客户端内容不确定内容长度,发送结束的标记是0\r\n, Content-Length表示服务端确定发送给客户端的内容大小,但是二者只能用其一。
Connection: keep-alive # 和客户端保持长连接
Date: Fri, 23 Nov 2018 02:01:05 GMT # 服务端的响应时间
--- 空行 ---
--- 响应体 ---
<!DOCTYPE html><html lang=“en”> …</html> # 响应给客户端的数据

原始响应报文说明:

HTTP/1.1 200 OK\r\n
Server: Tengine\r\n
Content-Type: text/html; charset=UTF-8\r\n
Transfer-Encoding: chunked\r\n
Connection: keep-alive\r\n
Date: Fri, 23 Nov 2018 02:01:05 GMT\r\n
\r\n(响应头信息后面还有一个单独的’\r\n’不能省略)
<!DOCTYPE html><html lang=“en”> …</html>

说明:

每项数据之间使用:\r\n

2. HTTP 状态码介绍

HTTP 状态码是用于表示web服务器响应状态的3位数字代码

状态码 说明
200 请求成功
307 重定向
400 错误的请求,请求地址或者参数有误
404 请求资源在服务器不存在
500 服务器内部源代码出现错误

 系列文章目录

python网络编程(一),tcp协议的引入

python网络编程(二),编写tcp协议程序

python网络编程(三),HTTP协议

python网络编程(四),HTTP协议的python应用

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐