(文章目录)


前言

最近在学习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的差异?

共同点: 都是客户端去服务器获取数据 差异点:

  1. GET方法是在URL里传递参数,参数是明文的,而且携带的参数是有限的,http的请求报文里的url的字段的值是有限制的,不能携带过多的参数

  2. POST方法是在body里传递参数给服务器,非常经典的应用就是表单信息提交,可以携带非常多的数据

工作原理

在用户输入一个url执行之后,浏览器和web服务器执行以下动作:

  1. 浏览器分析超链接中的url
  2. 浏览器向DNS请求解析用域名的ip地址
  3. DNS将解析处的ip地址返回浏览器
  4. 浏览器与服务器建立TCP连接(80端口)(三次握手,可以详细展开)
  5. 浏览器请求数据
  6. 服务器给出响应,将数据发送给浏览器
  7. 浏览器显示数据内容
  8. 释放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相比

http2.0的核心优势 http2.0有什么优势

常见问题

一个网站打不开了,你如果去判断故障?

1.检查域名解析是否有问题,能否解析出一个ip地址 2.ping 服务器ip地址,看服务是否正常启动 3.检查服务器的web服务是否开启或者检查服务器的web服务的端口号是否打开 4.检查服务器的防火墙是否开启 5.检查web服务器的日志,看看web服务是否有限制


总结

以上就是今天要讲的内容,本文详细介绍了http协议的头部和一些工作原理,并比较了http协议部分版本之间的差异,而关于https的内容在后续的文章会有讲解,欢迎大家观看留言。