(文章目录)
前言
最近在学习Web相关的知识,不可避免要使用到http协议,于是又掏出了之前学计算机网络时的老本回顾了一下,一起看看吧。
HTTP超文本传输协议
——Hyper Text Transfer Protocol
什么是超文本?
包含有超链接(link)和各种多媒体元素标记(Markup)的文本。这些超文本文件彼此链接,形成网状(Web),因此又称网页。这些链接用URL表示,最常见的超文本格式是超文本标记语言HTML。
什么是HTTP?
是一种按照URL指示,将超文本文档从一台主机传输到另一台主机的应用层协议,以实现超链接的功能
一些概念
URL:统一资源定位符,由协议、主机和端口以及文件名三部分构成,用来唯一标识万维网中某一个文档 --Uniform Resource Locator
http使用场景:
1. 用户通过浏览器访问web服务器
请求报文
响应报文
2.webhook --》web领域 --》服务器里数据发生变化,可以主动推送给客户机
Webhook:是一个API概念,也是一个接收数据的URL,使用Webhook你可以实时接受到事件的变化
json轻量级数据交换格式:{“name”:“zh”},优势:使用键值对,并且是纯文本——大部分应用程序可以直接读取
报文头部——header
报文 = header + body
每行后面有个换行(CRLF)
最后接一个空行代表头部结束
请求报文
method:# 获取网页信息的方法: GET POST
http version: # 协议版本
host: # 访问的url
user-agent: # 我们使用的浏览器
connection: # close 表示连接已经断开,超时 keep-alive 没有超时,连接没有断开 --》长连接是否建立
Accept: # 表示我们的浏览器接收数据的类型,支持哪些类型或者格式的数据
例:
text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.9
Accept-Encoding: gzip, deflate # 客户端可以接受的编码格式,deflate常用于http,无损且比gzip更小,但更慢且安全性略低
cookie: # 客户机访问服务器的时候,携带数据,这些数据是用来验证用户是否连接过,是老用户还是新用户
Referer: `http://www.feng.com/` # 从哪个网址跳转过来的 --reference——参考引用
If-Modified-Since: Tue, 15 Nov 2022 08:31:25 GMT
If-None-Match: "63734e5d-10"
响应报文
http协议: 1.1
status code: 200 # 状态码
date: 日期
server: nginx # web服务器使用的是哪个软件
Accept-Ranges: bytes
Connection: keep-alive
Content-Length: 16 # 内容的长度--》body的内容大小
Content-Type: text/html # 发送的body的内容是一个文本/html类型的文件
Date: Mon, 28 Nov 2022 08:22:13 GMT # 响应报文发送的日期
ETag: "63734e5d-10" # 网页文件的一个摘要值,通过这个摘要值,可以判断我们的文件是否发生变化
Last-Modified: Tue, 15 Nov 2022 08:31:25 GMT # 网页的文件上次修改的时间
set-cookie : # 服务器让客户机保存信息
状态码
更多详情可以参考官方链接:https://www.w3.org/Protocols/rfc2616/rfc2616.html
有哪些http的方法:
GET 请求web服务器给我们客户机某个内容(数据)
POST 请求web服务器给我们客户机某个内容(数据)
DELETE 要求web服务器删除某个内容(数据)
PUT 要求web服务器存储某个内容(数据)
GET和POST的差异?
共同点: 都是客户端去服务器获取数据 差异点:
-
GET方法是在URL里传递参数,参数是明文的,而且携带的参数是有限的,http的请求报文里的url的字段的值是有限制的,不能携带过多的参数
-
POST方法是在body里传递参数给服务器,非常经典的应用就是表单信息提交,可以携带非常多的数据
工作原理
在用户输入一个url执行之后,浏览器和web服务器执行以下动作:
- 浏览器分析超链接中的url
- 浏览器向DNS请求解析用域名的ip地址
- DNS将解析处的ip地址返回浏览器
- 浏览器与服务器建立TCP连接(80端口)(三次握手,可以详细展开)
- 浏览器请求数据
- 服务器给出响应,将数据发送给浏览器
- 浏览器显示数据内容
- 释放TCP连接(四次断开)
有状态&无状态
无状态指服务器无法区分访问用户是否是新用户,即不保存用户数据
有状态的解决办法: 1.cookie :是数据存放在客户机浏览器缓存里,访问的时候携带信息告诉服务器,服务器检查信息来判断你是老用户还是新用户 2.session(会话): 数据存放在服务器里,web服务器会在内存里开辟一块空间(例如数据保存到一个字典里),服务器知道所有的用户的连接信息。
3.token(令牌、通证)
http1.0&http1.1&http2.0的版本差异
1.1与1.0相比
1.0
非持久性连接: 短连接
无状态 : 不知道你是否曾经访问过,是老用户还是新用户
1.1 ---》使用比较多
持久性连接: 长连接
keepalive_timeout 65; # 长连接标志
cookie和session来让http协议成为了有状态的
2.0与1.1相比
常见问题
一个网站打不开了,你如果去判断故障?
1.检查域名解析是否有问题,能否解析出一个ip地址 2.ping 服务器ip地址,看服务是否正常启动 3.检查服务器的web服务是否开启或者检查服务器的web服务的端口号是否打开 4.检查服务器的防火墙是否开启 5.检查web服务器的日志,看看web服务是否有限制
总结
以上就是今天要讲的内容,本文详细介绍了http协议的头部和一些工作原理,并比较了http协议部分版本之间的差异,而关于https的内容在后续的文章会有讲解,欢迎大家观看留言。