目录
1.HTTP概念
2.HTTP请求协议
3.HTTP响应协议
4.HTTP协议解析
1.HTTP概念
HTTP(HyperText Transfer Protocol,超文本传输协议)是一种用于分布式、协作式和超媒体信息系统的应用层协议。它是万维网数据通信的基础,允许将超文本文档(网页)从网络传输到用户的浏览器。简单来说,就是浏览器想要访问服务器,那么浏览器就得发送访问的信息数据给服务器,服务器解析这个信息数据后,再发送对应的响应数据给浏览器。其中信息数据的格式、怎么解析和怎么响应就规定在HTTP协议中。
HTTP协议的基本工作流程如下:
- 客户端发起请求:客户端(如浏览器)通过发送HTTP请求到服务器来请求资源。
- 服务器响应:服务器接收到请求后,根据请求的资源和方法,返回相应的HTTP响应。
- 客户端接收响应:客户端接收到服务器的响应后,根据响应内容进行相应的处理。
打开浏览器的开发工具可以看到类似以下的网络请求,其中response headers就是响应的数据,request headers就是请求的数据。它们都是文本字符串。服务器解析request文本字符串,返回response文本字符串,然后浏览器解析服务器返回的response文本字符串。
这个数据格式比较固定,它们由以下部分组成:
- 起始行:请求行或状态行,包含方法、URL、HTTP版本等信息。
- 头字段:包含请求或响应的附加信息,如内容类型、编码方式等。
- 主体:请求或响应的数据部分,如HTML文档、图片等。
此外,HTTP的主要特点包括:
- 简单快速:客户端发送一个请求到服务器,服务器响应该请求并返回数据。
- 无状态:服务器在两个请求之间没有事务记忆,每个请求都是独立的。
- 灵活:支持多种类型的数据传输,包括文本、图片、视频等。
- 可靠:通过状态码和超时机制确保数据的可靠传输。
- 扩展性:支持自定义方法和头字段。
无状态的特点导致了http虽然快速,但无法实现很多功能,比如登录一个管理系统,管理员输入密码登陆后,想访问客户数据,但此时浏览器并不知道管理员是否已经登陆,因此要结合其他的技术
2.HTTP请求协议
HTTP协议定义了多种请求方法,最常见的包括:
GET
:请求指定资源的表示形式,应只用于获取数据。POST
:向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体内。PUT
:将请求体中的数据取代指定的资源的所有当前表示。DELETE
:请求删除指定的资源。HEAD
:与GET方法相同,但服务器在响应中只返回头部信息,不返回实体的主体部分。OPTIONS
:请求获取服务器支持的通信选项。
其中GET请求的参数通过URL传递(请求行),适用于少量数据。而POST请求的参数放在请求体中,适合大量数据的传输。
GET请求由于数据暴露在URL中,因此不太安全,不适合传输敏感信息。POST请求的数据不会显示在URL中,相对来说更安全。
常见的请求头含义:
3.HTTP响应协议
响应协议和请求协议差不多,也是由响应行、响应头、响应体组成。浏览器解析这些数据后,配合前端代码就能显示我们看到的页面了。
部分其中状态码如下:
重定向:浏览器访问A服务器,但对应资源已经挪到A服务器的其他位置或另一个服务器B上,A就发送300多的状态码和资源位置给浏览器,浏览器再去访问这个资源位置。过程由浏览器自动完成
所有状态码可以在腾讯云的开发手册里面看状态 | Status - HTTP 中文开发手册 - 开发者手册 - 腾讯云开发者社区-腾讯云 (tencent.com)
常见的响应头如下:
4.HTTP协议解析
HTTP协议的解析分为两个部分,一个是客户端,一个是服务端。在客户端(如浏览器)由HTTP库或框架自动处理,这一方面各大厂商已经提供了,浏览器都内置了解析http协议的程序。
如果我们是服务端开发者就需要通过java程序来解析浏览器发来的HTTP请求,并获取请求数据。然后给浏览器响应符合http协议的响应数据。
如果手动编写服务端程序去解析http协议,这个工作量是非常大的,而且很繁琐。但是http协议是标准的、固定的。因此有许多公司已经把这些代码都写好了,封装到软件程序中,也就是web服务器,比如Tomcat服务器。