http 协议简介-------------千万里,江南北,浙西东

一、HTTP协议简介

1.什么是 http 协议?具体是干什么用的?
http又称之为超文本传输协议,主要用来从服务器传输超文本到本地浏览器的传送协议
2.什么是超文本?
超文本最大的特征就是可以超链接文本文档pr图片等内容(超链接即通过点击进行跳转网页)

'http 协议是基于TCP协议来传递数据的,另外我们现在常用的 http 协议版号为 1.1 '

二、HTTP/1.1说明

http 的无连接和无状态

2.1 http无连接

http 无连接是什么意思?

1)无连接指的是tcp三次握手后建立的双向链接只能支持一次数据的传输,即使用一次就断开
2)如果一直处于无连接状态,那么用户每次请求就会重新建立tcp的双向链路,此时的访问速度就有优化的空间
#解决办法:在服务端开启长链接!

什么是长链接?
1.长链接是为http数据传输后将链接保持在打开的状态,以便未来的http请求继续使用
2.长链接需设置服务器的keepalive选项
# vim /proc/sys/net/ipv4/tcp_keepalive_time更改数值即可

'有益就有弊,简单看下长链接的优点以及缺点'
# 优点:
keepalive长链接模式更加高效,避免了链接建立和释放的资源开销
# 缺点:
长时间的tcp链接容易导致系统资源无效占用,浪费系统资源,所以上面的配置根据自身情况来就好

2.2、http 无状态

http无状态又是什么意思?

1)官方定义:http无状态是指协议对于交互性场景没有记忆能力
其实就是默认情况下http下没有缓存功能,假设此时我们输入账户密码,刷新一次又需要重新入

http 无状态的解决方法是什么?

'最主要的目的就是让服务器有记忆能力----现在我们较为常用的方法为cookie+session'
1.cookie 工作方式
1)cookie其实是一小段的文本信息,客户端请求服务器,如果服务器需要记录该用户状态,就会在响应请求时使用set-cookie将用户状态信息写入到客户端浏览器文件中去
2)当浏览器下次请求访问该网站时会将cookie信息添加request请求的数据当中来代替用户验证
'cookie的弊端'
1)由于cookie保存的数据信息时存在于客户端的浏览器目录下,所以此文件会有被篡改的风险,基于此种原因,出现了一种基于cookie的机制session。

2.session
1)Session是另外一种记录客户端状态的机制,不同的是cookie保存在客户端浏览器中,而Session保存在服务器上
2)客户端浏览器访问服务器时,服务器把客户端信息以某种形式记录在服务器上,这就是Session

为什么说Session基于cookie呢?

Session不仅会将客户端信息存储在服务器上,还会有一小部分信息存储在浏览器的cookie中,此时存储在cookie的内容相当于一把用来打开服务器对应信息的钥匙。

Session的优缺点

优点:
解决了纯cookie可能被篡改文件的风险(就算你要改,改的也就是开锁的内容,并不触及到真正的用户的信息)
缺点:
在集群环境下读取服务器存储的信息会有速度问题(存放到数据库--硬盘速度不够,存放到缓存服务器--内存空间不够)

3.jwt
# 简单粗暴,对cookie所产生的客户端本地文件进行加密即可,使用服务器的私钥进行解密即可

4.番外
# Session和cookie的关系
1)cookie是一个实际存在的、具体的东西,http协议中定义在 header 中的字段。
2)Session 是一个抽象概念,开发者为了实现中断和继续等操作,将client 和 server 之间一对一的交互,抽象为'会话',进而衍生出'会话状态',也就是 Session 的概念
3)即Session 描述的是一种通讯会话机制,二 cookie 知识目前实现这种机制的主流方案里面的一个参与者,它一般是用于保存 Session ID

三、http 的请求信息(request)

3.1、定义

1.什么是URL,什么又是URI
URI:统一资源标志符(在某一规则下能把一个资源独一无二的标识出来)
URL:同一资源定位符(一种具体的URI,URL不仅用来标识一个资源,而且还知名了如何定位这个资源)
# 举个栗子
URI:假设所有的html文档都有唯一的编号,记作html:xxx,xxx是一串数字,即html文档的身份证号,这个能唯一标识一个html文档,那么这个号码就是一个URI
URL:而URL则是通过描述是哪个主机上哪个路径上的文件来唯一确定一个资源,也就是定位的方式来实现的URI

so....
不论是用定位的方式还是用编号的方式,我们都可以确定唯一的一个资源,都是URI的一种实现方式,而URL就是用定位的方式实现的URL
# 看大佬的 https://www.zhihu.com/question/21950864

3.2、request 请求格式

2.Request请求的格式
客户端发送一个 http 请求到服务器的请求消息格式由四部分组成:
1)请求行(request line)
2)请求头部 header
3)空行
4)请求数据

GET /linhaifeng/p/7278389.html HTTP/1.1 # 请求行--请求类型;需要访问的资源;http版本号
# 以下皆为请求头部信息----get请求没有请求数据的主体
Host: www.cnblogs.com
Connection: keep-alive
Cache-Control: max-age=0
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_12_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/65.0.3325.181 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,/;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: zh-CN,zh;q=0.9

3.3、http协议请求的办法

1. GET 2. post

get
请求指定的页面信息,并返回实体主题
post
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。post请求可能会导致新资源的建立或已有资源的修改
# 两者的区别
1)参数的组织方式不同
get提交的数据会放在url之后,以 ? 分割 url和传输数据,参数之间以&相连
post 是把提交的数据放在 http 包的body中,不会再地址栏里显示出来。
2)传输数据大小限制
get 特定浏览器和服务器会对 url 进行长度限制,所以 get 请求会有瓶颈
post 不是通过url传值,理论上数据不受限制,但理论毕竟是理论,尽量不要过大
3)安全性
现实而见的post要比 get 方法安全性要高一些

四、http 协议的响应(response)

http 响应也是有四个部分组成分别是:

1)状态行
2)消息报头
3)空行
4)响应正文

状态行

由 http 版本号,状态码,状态消息组成
# 消息报头
用来说明客户端要使用的一些附加信息
# 空行
\r\n
# 响应正文
服务器返回给客户端的文本信息

响应状态码详解

一般是用来判断网页是否访问成功,状态码由三位数字组成,第一个数字定义了响应的类别,共五种
1xx:指示信息,表示请求已接受,继续处理
2xx:成功,表示请求已被成功接收成功
3xx:重定向,要完成请求必须进行更进一步操作
4xx:客户端错误,请求有语法错误或请求无法实现
5xx:服务端错误,服务器未能实现合法的请求
200 ok ---客户端请求成功
400 Bad Request 客户端请求有语法错误,不能被服务器所理解
401 Unauthorized 请求未经授权,这个状态代码必须和www-authentucate报头域一起使用
403 Forbidden 服务器收到请求,但是拒绝提供服务
404 Not Found 请求资源不存在
500 Internal Server Error 服务器发生不可预期的错误
503 Server Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常

五、http 协议完整工作流程

http 协议定义为web客户端如何从web服务器请求web页面,以及服务器如何把web页面传送给客户端。http协议采用了请求/响应模型。客户端向服务器发送一个请求报文,请求报文包含请求的方法、URL、协议版本、请求头部和请求数据。服务器以一个状态行作为响应,响应的内容包括协议的版本、成功或者错误代码、服务器信息、响应头部和响应数据

http 请求/响应的步骤

1.客户端连接到web服务器
一个http客户端,通常是浏览器,与web服务器的http端口(默认是80)建立一个 tcp 套接字连接。例如:http://www.oakcms.cn

2.发送 http 请求
通过 tcp 套接字,客户端向web 服务器发送一个文本的请求报文,一个请求报文由请求行、请求头部、空行和请求数据4部分组成。

3.服务器接收请求并返回 http 响应
web服务器解析请求,定位请求资源,服务器将资源副本写到 tcp 套接字,由客户端读取。一个响应由状态行、响应头部、空行和响应数据4部分组成

4.释放连接 tcp 连接
若 connection 模式为 close,则服务器主动关闭 tcp 连接,客户端被动关闭连接,释放tcp连接;若connection 模式为 keepalive ,则该连接会保持一段时间,在该时间内可以继续接收请求

5、客户端浏览器解析HTML内容
客户端浏览器首先解析状态行,查看表明请求是否成功的状态代码。然后解析每一个响应头,响应头告知以下为若干字节的HTML文档和文档的字符集。客户端浏览器读取响应数据HTML,根据HTML的语法对其进行格式化,并在浏览器窗口中显示。

例如:在浏览器地址栏键入URL,按下回车之后会经历以下流程:

1、浏览器向 DNS 服务器请求解析该 URL 中的域名所对应的 IP 地址;

2、解析出 IP 地址后,根据该 IP 地址和默认端口 80,和服务器建立TCP连接;

3、浏览器发出读取文件(URL 中域名后面部分对应的文件)的HTTP 请求,该请求报文作为 TCP 三次握手的第三个报文的数据发送给服务器;

4、服务器对浏览器请求作出响应,并把对应的 html 文本发送给浏览器;

5、释放 TCP连接;

6、浏览器将该 html 文本并显示内容;

参考文章~

egon博客---http协议

https://www.cnblogs.com/linhaifeng/articles/8243379.html#_label6
# 知乎高能---U
https://www.zhihu.com/question/21950864

posted @ 2021-07-29 20:06  郝怕怕  阅读(130)  评论(0)    收藏  举报