HTTP协议
作者:小教学发布时间:2023-09-28分类:程序开发学习浏览:61
1. 什么是HTTP协议
HTTP
协议是Hyper Text Transfer Protocol
(超文本传输协议)的缩写,是用于服务器与客户端浏览器之间传输超文本数据(文字、图片、视频、音频)的应用层协议。
同时也是一个双向协议,通过请求与响应的方式,基于浏览器-服务器架构模型进行工作。
2. HTTP协议通信过程
常见总结为以下七个步骤。
1. 建立TCP连接
Web浏览器首先要通过网络与Web服务器之间通过TCP建立连接,TCP与IP协议共同构建Internet
HTTP协议是比TCP处于更高层的应用层协议,只有当低层协议建立练接之后才能进行更高层次的连接。TCP连接的端口号一般是80
2. Web浏览器向Web服务器发送请求行
建立TCP连接之后,Web浏览器会向Web服务器发送请求命令
3. Web浏览器向服务器发送请求头
浏览器发送请求信息之后,还要以头信息的形式发送相关信息,并以空行代表发送结束
4. Web服务器应答
Web服务器接收请求后返回应答,第一部分是协议的版本号和应答状态码 例:“HTTP/1.1 200OK”
5. Web服务器发送应答头
服务器也会随着应答发送一些相关信息,并以空行代表发送结束
6. Web服务器向浏览器发送数据
Web服务器向浏览器发送头信息之后,就以Content-Type格式发送用户所请求的信息
7. Web服务器关闭TCP连接
一般情况下,一旦Web服务器向浏览器发送请求数据后,就要关闭TCP连接了
若在报文中加入:connection:Keep-alive 则保持长连接状态,可以继续通过相同的连接发送请求
3. 关于URL
HTTP
协议使用 URL
( Uniform
Resource
Locator
,统一资源定位符)来定位资源。
格式:http://host[":"port][abs_path]
示例:http://192.168.0.116:8080/index.html
http
表示要通过HTTP
协议来定位网络资源;host
表示合法的Internet
Web
服务器或者IP
地址;port
指定一个端口号,为空则使用缺省端口80
;abs_path
指定请求资源的URI
;
什么是URI
?
URL
是 URI
(Uniform
Resource
Identifier
,统一资源标识符)的子集,URL
在 URI
的基础上增加了定位能力。URN(Uniform Resource Name
,统一资源名称)只是用来定义一个资源的名称不能够定位。
4. HTTP报文
请求报文结构
第一行是请求行,包含:请求方式、URL
、协议版本;
响应报文结构
第一行是状态行,包含:协议版本、状态码以及描述。
最常见的状态码及描述是: 200
OK
,表示请求成功。
- 接下来的多行都是
http
消息头,其中包含若干个http
首部字段。 - 一个空行用来分隔
- 最后是请求的消息体
5. HTTP 请求方式
HTTP
请求报文 第一行为请求行,其中包含了请求方式字段,常见的请求方式:GET
、POST
、HEAD
、PUT
、DELETE
、OPTIONS
。
- GET : 获取资源
- POST :提交数据增加资源
- HEAD :获取响应报头
- PUT :修改资源
- DELETE :删除资源
- OPTIONS :查询支持的方法
常见问题:GET 和 POST 的区别:
GET
用于获取数据,POST
用于提交数据;GET
和POST
的请求报文格式不同
-
POST
方法请求报文第一行是这样的POST /URL HTTP/1.1 \r\n
GET
方法请求报文第一行是这样的GET /URL HTTP/1.1 \r\n
GET
使用请求报文中的首部字段URL
传递请求参数,POST
使用Request Boby
提交数据;GET
是幂等且可缓存,POST
非幂等且不可缓存;
6. 常见HTTP首部字段
Host
字段:浏览器发送http
请求时,用来指定服务器的域名。
Content-Length
字段:服务器在响应数据时,表明本次响应数据的长度。
Content-Type
字段:服务器响应时,告诉浏览器,本次响应数据的内容类型。
Accept
字段:用于浏览器发起请求的时候,声明可以接受哪些响应数据格式。
7. HTTP 状态码
1XX 信息
1xx 类状态码属于提示信息,是协议处理中的一种中间状态,实际工作中使用场景比较少。
2XX 成功
- 「
200 OK
」最常见的成功状态码,表示一切正常。 - 「
204 No Content
」常见的成功状态码,与 200 OK 基本相同,但响应报文没有body
数据。
3XX 重定向
- 「
301 Moved Permanently
」表示永久重定向,说明请求的资源已经不存在了,需改用新的URL
再次访问。
4XX 客户端错误
- 「
400 Bad Request
」表示客户端请求的报文有错误。 - 「
404 Not Found
」表示请求的资源在服务器上不存在或未找到,所以无法提供给客户端。 - 「
405 Not Allowed
」表示服务器不支持客户端采用的请求方式。
5XX 服务器错误
- 「
500 Internal Server Error
」服务器发生了内部错误。 - 「
502 Bad Gateway
」通常是服务器作为网关或代理时返回的错误码,表示服务器自身工作正常,访问后端服务器发生了错误。 - 「
503 Service Unavailable
」表示服务器当前很忙,暂时无法响应服务器。
8. 连接方式
HTTP 1.0
默认使用短连接,每次使用HTTP
协议进行通信,都需要重新按照三次握手的方式,建立一个独立的TCP
连接,响应完毕后,通过四次挥手断开连接。这种重复的连接创建和断开,增加了通信的开销。
为了解决这个问题,HTTP/1.1
改用长连接的通信方式,也叫持久性连接。只需要建立一次 TCP
连接就能进行多次 HTTP
通信,这种方减少了 TCP
连接的重复建立和断开所造成的额外开销,减轻了服务器端的负载。
9.HTTP协议存在的问题
HTTP
由于使用明文传输,所以存在以下安全问题:
- 使用明文进行通信,内容可能会被窃听,比如被抓包;
- 不验证通信方的身份,通信方的身份有可能遭遇伪装,比如钓鱼网站;
- 无法证明报文的完整性,报文有可能遭篡改,比如强制在线广告植入。
为了解决这些问题出现了HTTPS协议:
HTTPS
的全称是超文本传输安全协议Hypertext Transfer Protocol Secure
,是以安全为目标的 HTTP
通信协议。HTTPS
并不是一个新的协议,通过使用 SSL使用
非对称加密算法(RSA)完成一个随机秘钥的交换,在随后的数据传输当中,使用该随机秘钥进行数据内容的对称式加密(AES)。具有了加密(防窃听)、认证(防伪装)和完整性保护(防篡改)等功能特点。
- 程序开发学习排行
-
- 1鸿蒙HarmonyOS:Web组件网页白屏检测
- 2HTTPS协议是安全传输,为啥还要再加密?
- 3HarmonyOS鸿蒙应用开发——数据持久化Preferences
- 4记解决MaterialButton背景颜色与设置值不同
- 5鸿蒙HarmonyOS实战-ArkUI组件(RelativeContainer)
- 6鸿蒙HarmonyOS实战-ArkUI组件(Stack)
- 7鸿蒙HarmonyOS实战-ArkUI组件(GridRow/GridCol)
- 8[Android][NDK][Cmake]一文搞懂Android项目中的Cmake
- 9鸿蒙HarmonyOS实战-ArkUI组件(mediaquery)
- 最近发表
-
- WooCommerce最好的WordPress常用插件下载博客插件模块的相关产品
- 羊驼机器人最好的WordPress常用插件下载博客插件模块
- IP信息记录器最好的WordPress常用插件下载博客插件模块
- Linkly for WooCommerce最好的WordPress常用插件下载博客插件模块
- 元素聚合器Forms最好的WordPress常用插件下载博客插件模块
- Promaker Chat 最好的WordPress通用插件下载 博客插件模块
- 自动更新发布日期最好的WordPress常用插件下载博客插件模块
- WordPress官方最好的获取回复WordPress常用插件下载博客插件模块
- Img to rss最好的wordpress常用插件下载博客插件模块
- WPMozo为Elementor最好的WordPress常用插件下载博客插件模块添加精简版