计算机网络 6.HTTP协议
2021/12/14 6:19:47
本文主要是介绍计算机网络 6.HTTP协议,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
HTTP协议
HTTP协议的概念和作用
HTTP(HyperText Transfer Protocol)超文本协议传输协议,是互联网上应用最为广泛的一种网络协议,所有WWW文件都必须遵守这个标准,设计HTTP是为了提供一种发布和接收HTML页面的方法
HTTP是一个客户端与服务器端请求和应答的标准(TCP),就是客户端按一定规则向服务器发送数据,而服务器也按一定规则回应数据,客户端是终端用户,服务器端是网站,通过使用Web浏览器、网络爬虫或其他工具,客户端发起一个到服务器上指定端口(默认端口为80)的HTTP请求
HTTP协议是一种无状态的,以请求/响应方式运行的协议,它使用可扩展的语义和自描述消息格式,与基于网络的超文本信息系统灵活的互动
HTTP协议是一种应用层协议
特点:
- 无状态:不会存储用户的信息
- 可扩展的语义:可以在协议的基础上添加内容,比如头部的字段
- 自描述:消息类型可以是文本、图片、音视频
- 超文本信息系统:HTML
在Web应用中,服务器把网页传给浏览器,实际就是把网页的HTML代码发送给浏览器,浏览器解析后显示出来,浏览器和服务器之间的传输应用层协议就是HTTP
- HTML是一种用来定义网页的文本
- HTTP是用来在网络上传输HTML文本的协议,用于浏览器和服务器的通信
Elements:查看或修改HTML元素的属性、CSS属性、监听事件、断点等
Console:控制台一般用于执行一次性代码,查看JavaScript对象,查看调试日志或异常信息
Sources:查看和调试页面HTML文件源码、JavsScript源码、CSS源码,给JS代码添加断点等
Network:查看header等与网络连接相关的信息
Network中的每一项就是一次请求/响应过程,点击项可以查看本次请求/响应的报文信息
request - response 模式
浏览器 | ← TCP连接 → | 服务器 |
---|---|---|
发送请求 → | ||
← 做出响应 | ||
← 断开TCP连接 → |
HTTP协议分为两部分:请求协议、响应协议,接收请求的一端一定要响应对方
不管是请求还是响应,HTTP协议都是由一个一个简单的协议项组成,报文中每个协议项都单独占用一行
协议名:协议内容(值)
HTTP报文格式
HTTP协议的请求报文和响应报文的结构基本相同,由三大部分组成:
- 起始行(start line):描述请求或响应的基本信息
- 头部字段集合(header):使用 key:value 形式更详细的说明报文
- 空行
- 消息正文(entity):实际传输的数据,可以是本文、图片、音视频等二进制数据,GET请求方式没有此部分
请求协议报文格式(request)
请求报文中传递参数的方式:URL(GET),request Body(POST)
请求行:分为三个部分
METHOD | 空格 | URL | 空格 | VERSION | 换行 |
---|
- 请求方式:如 GET/POST/HEAD/PUT ,表示对资源的操作
- 请求路径:通常是一个 URL ,标记了请求方式要操作的资源的路径
- 协议版本:表示报文使用的 HTTP 协议版本
请求行单独占一行;请求路径不包含域名
请求头:请求头是所有当前需要用到的协议项的集合
协议项就是浏览器在请求服务器的时候事先告诉服务器的一些信息,即事先约定
常见的请求头有:
host:当前URL中要请求的服务器主机名(域名)
accept-encoding:声明浏览器支持的压缩编码类型,如gzip
accept_charset:浏览器支持的字符集
referer:表示此次请求来自哪个网址
accept-language:可接收的语言类型,有权重之分
cookie:如果当前请求的服务器在浏览器中设置了cookie,当浏览器再次请求该服务器时会传递此数据
user-agent:用户代理,当前发起请求的浏览器内核信息
accept:浏览器可接收的数据类型,如txt/html,image/img
content-length(POST):当前要提交数据的长度(字节)
if-modified-since(GET):请求某个资源文件时,询问此资源文件是否被修改过
空行:分隔请求头和请求主体
请求主体:浏览器发送给服务端的数据
参数格式:?参数1=值1&参数2=值2&参数3=值3&......
二进制数据,如图片
GET和POST的区别
-
GET是从服务器上获取数据,POST是向服务器传送数据
-
GET把参数加到URL中,POST把数据加到表单中
-
GET传送的数据量较小,不能大于2KB,POST传送的数据量大
-
GET安全性较低,POST更安全,但GET执行效率更好
做数据查询时使用GET方式,做数据添加、修改、删除或数据包含机密信息时使用POST方式
响应协议报文格式(response)
响应行:分为三个部分
VERSION | 空格 | STATUS CODE | 空格 | REASON | 换行 |
---|
-
协议版本:表示报文使用的 HTTP 协议版本
-
状态码:三位数,用代码表示处理的结果
- 2xx:请求被成功接收;200:请求已成功
- 3xx:重定向,要完成请求需要进一步操作;301:永久重定向,302:临时重定向
- 4xx:客户端错误;403:收到请求但拒绝提供此服务,404:请求资源不存在,408:请求超时
- 5xx:服务器错误;500:服务器发生不可知的错误,503:服务器当前不能处理请求,一段时间后可能恢复
-
状态描述:作为数字状态码的补充,是更详细的解释文字
响应头:需要用到的协议项的集合
常见的响应头有:
server:服务器主机信息
date:响应时间
last-modified:文件最后修改时间
content-length:响应主体的长度(字节)
content-type:响应内容的数据类型,如text/html,image/png
location:重定向,解析到此项时立即跳转,不会再解析后面的内容
refresh:重定向(刷新),解析到此项时准备跳转,刷新一般有时间限制,到时间才跳转
content-encoding:文件编码格式
cache-control:缓存控制,no-cached:不要缓存
空行:分隔响应头和响应主体
响应主体:服务器返回给浏览器的数据
HTTP头字段
头字段 key:value 的形式,最后用CRLF换行表示字段结束。如前后端分离时经常遇到要协商传输数据的类型,"Content-type:application/json",HTTP头字段非常灵活,不仅可以使用标准里的 Host、Content 等已有头,也可以添加自定义头
头字段注意事项:
- 字段名不区分大小写,字段名里不允许出现空格,可以使用连字符 ‘ - ’ ,不能使用下划线 ‘ _ ’ ,(有的服务器不能解析带 ‘ _ ’ 的字段),字段名后面必须紧接 ‘ : ’ , ‘ : ’ 后的字段前可以有多个空格
- 字段的顺序没有意义,可以任意排序不会影响语义
- 字段原则上不能重复,除非字段本身语义允许
HTTP请求的完整过程
-
用户在浏览器输入地址后回车
-
先到本地DNS查找域名对应的IP地址,如果本地DNS中没有找到,再到DNS服务器查
-
首先从浏览器缓存中查看,如下可以查看浏览器中域名对应IP的解析
chrome://net-internals/
-
解析域名对应的IP地址后,浏览器就可以发起与服务器的三次握手
-
连接建立之后就开始组装HTTP请求报文,并发送报文
-
服务器收到请求报文之后开始解析报文,生成响应数据,发送响应数据
-
浏览器收到响应后,开始渲染页面
这篇关于计算机网络 6.HTTP协议的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-15JavaMailSender是什么,怎么使用?-icode9专业技术文章分享
- 2024-11-15JWT 用户校验学习:从入门到实践
- 2024-11-15Nest学习:新手入门全面指南
- 2024-11-15RestfulAPI学习:新手入门指南
- 2024-11-15Server Component学习:入门教程与实践指南
- 2024-11-15动态路由入门:新手必读指南
- 2024-11-15JWT 用户校验入门:轻松掌握JWT认证基础
- 2024-11-15Nest后端开发入门指南
- 2024-11-15Nest后端开发入门教程
- 2024-11-15RestfulAPI入门:新手快速上手指南