2020/02/22 02-HTTP报文

本文深入解析HTTP协议的特点,包括其无状态性、连接性和短连接特性。详细介绍了请求和响应消息的构成,GET、POST等常见方法的应用场景,以及状态码如200、301、404的意义。同时探讨了cookie技术如何解决HTTP的无状态问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述
http协议是无状态的的,为了解决这种情况是,使用了cookie技术
url每一部分都需要知道,最关注的其实就是path和查询字符串

在这里插入图片描述在这里插入图片描述
HTTP消息分两种,请求消息request和响应消息response,响应是吧数据组织好交给对方

在这里插入图片描述
在这里插入图片描述
请求一般要告诉请求的方法是什么,很重要,尤其对restful,
在这里插入图片描述
请求路径是什么,,协议一般协商下都用1。1
在这里插入图片描述
useragent做用户分析,很重要
accept就是做一些协商的技术
cookie很重要
connection 是否维持这个链接
upgrade-insecure 请求能否安全升级

在这里插入图片描述
常见方法有get,post,head,get是一定要拿数据的,拿不回来就是404。
post发起请求,依然是通过url,向服务器提交数据,传统表单提交方式就是post方法,通过post方法把数据传到服务器端。
head方法是get方法简化版,只要把http响应头部拿到即可

在这里插入图片描述
前面是定位到一个资源。为这个资源传一些数据,通过get方法把这些数据传递给服务器端
在这里插入图片描述
这一段就是查询字符串
在这里插入图片描述
用post方法提交,在请求报文第一行有地址
在这里插入图片描述
向服务器发送请求会把url的 /xxx/yyy?id=5&name=magedu 留下来在这里插入图片描述
敲一个这样的
在这里插入图片描述
![在这里插入图片描述![](https://img-blog.csdnimg.cn/20200222191949118.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQyMjI3ODE4,size_16,color_FFFFFF,t_70)
这是请求头部分,id=5,name=tom,数据是不管服务器接受不接受,就传过来了,这种方法用的是get方法在这里插入图片描述
在这里插入图片描述
请求头部
在这里插入图片描述
第一行是请求的首行,方法是谁,url是谁
在这里插入图片描述
在这里插入图片描述
用get方法来传的时候,会将地址和查询字符串放在请求头部,head第一行,后面的协议,现在都是1.1
在这里插入图片描述
这一块特地解析放在下面,不管接收不接收,请求是从浏览器发出的,所以浏览器这里就拦截了请求信息

在这里插入图片描述
下一步看一下post信息

在这里插入图片描述
发送post信息
在这里插入图片描述
这是通信的报文,请求头是浏览器向服务器发送的,html是服务器找到资源response的事情,现在用post方法向服务器要提交数据
在这里插入图片描述
提交的地址里,其实可以添加查询字符串,这个查询字符串是放在请求报文中的head部分,头和身体分开是用空行,也就是两次回车换行
在这里插入图片描述
这一块是请求部分的body
在这里插入图片描述
post提交的数据,会将表单的数据会放在请求的body当中,然后形式依然是谁等于谁and谁等于谁,这一块对应的就是表单
在这里插入图片描述

在这里插入图片描述
trtd是放的input组件
在这里插入图片描述
表单必须有name,没有name不提交

在这里插入图片描述
一点提交之后就发送请求,这里叫查询字符串
在这里插入图片描述
这个table删除
在这里插入图片描述
这是表单提交的目标地址

在这里插入图片描述
重新刷这个页面
在这里插入图片描述
提交就成功了

在这里插入图片描述
访问网站的跟/后面加查询字符串
在这里插入图片描述
提交的信息其实没放在head,是放在body中,这个查询字符串其实是在head第一行
在这里插入图片描述
head部分两次回车换行,回车换行下一步分body就是form data,是分开的在这里插入图片描述
在这里插入图片描述
查询字符串是放在head中的,确切讲是放在head中的第一行

在这里插入图片描述
表单提交的数据都是放在body中的,请求报文的body部分
在这里插入图片描述
只不过现在还可以用json,无非就是你按照谁等于谁的方式还是json来解析的区别

在这里插入图片描述
只要建立tcp链接,把你构造的http报文发送过去,服务器就认,可以用telent把这一行行东西发过去,它就response把html返回过来
在这里插入图片描述
url本身其实就是含有很多数据
在这里插入图片描述
以前会有/?id=001 这就是通过get方式传参
在这里插入图片描述
或者通过post方式,写个表单,有个hidden的东西,写id=001,在body里写id=001传过去

在这里插入图片描述
现在认为url足够表达信息,没必要传参,这里的东西已经足够表达意思了,这个url就是想要访问python下的student下的001资源。
url本身足够表达信息了就没必要写get什么的了

在这里插入图片描述
这种风格差不多就叫restful,这种url方式已经很接近了,不是这个url不用传参,而是这个ur了配合上方法就可以称为restful,是一种设计的方式

在这里插入图片描述

现在有人问你客户端如何跟服务器端交互传一些信息,get,post,url本身就具有的信息,还有很多方法,最常用的就是get和post

响应也分两部分在这里插入图片描述
响应指的是服务器端到客户端,第一行告诉你用什么协议进行通信。状态码,还有reason描述,理由,200 理由ok,200系列的都是好的,用restful还有一个201

返回的信息要告诉别人用什么编码,不然浏览器猜测错了就是乱码
在这里插入图片描述
x开头是服务器端的用的,content-encoding,数据传过来是用gzip压缩的,压缩了传输快,但是服务器资源可能比较累
在这里插入图片描述
也需要协商是否支持压缩,在请求的时候会告诉支持的压缩方式,做一些小一点的压缩,不让cpu工作很重
在这里插入图片描述
告诉对应返回的类型,这就是MIME类型,告诉别人用的是什么,这里发生了一些变化,浏览器也会做相应的变动,比如发一个图片你告诉你文本text打开,有些浏览器就会按照文本打开,有些好一点的浏览器可能会纠错

在这里插入图片描述
最常见的就是200,响应成功,3开头的就是重定向,301永久重定向,302临时重定向,跳转是两次请求,是浏览器做的动作,

在这里插入图片描述
浏览器访问服务器,服务器告诉不要访问它,服务已经迁移,返回301,永久迁移到别的地方去,会告诉你状态301,给你一个location,新的定位,浏览器再次发送请求,对301返回回来的地址,发起新的请求
在这里插入图片描述
301就是永久重定向,访问www.bing.com,重定向到cn.bing.com
在这里插入图片描述
状态码是写在response的head部分,服务器告诉你301,浏览器就会去找location,有响应头就够了

在这里插入图片描述
所谓的重新跳转,浏览器就会i重新发请求
在这里插入图片描述
为什么没有response,是因为response,没有任何body信息,因为跳转不需要任何内容,所以没有response body部分。

在这里插入图片描述
这一些就是返回的内容,学过js知道,这一部分可以没有像样的html,因为所有东西都可以通过js绘制出来
在这里插入图片描述
301和302本质上都是重定向,没什么差别,一个永久一个临时。
304很重要,大量出现,表示用的是缓存,在本地浏览器文件夹里,减少服务器负担,但是如果服务器更新了,浏览器还没过期,就可能看不到最新的内容,尤其对静态的html,需要想办法解决,配置缓存有效时间,html,css,js,图片,。都称为静态资源,缓存多少时间要考虑

在这里插入图片描述
4系列是请求错误,404找不到资源,不管静态资源还是动态,比如动态生成的验证码,验证码的图片其实是个假图,是临时生成的,先把里面内容生成了,然后用图片的创建类来生成图片,这个图片就跟刚才的url对应起来。所以不管动态还是静态只要找不到就是404.
400语法错误
401是输入用户名密码才能访问
403是没权限

在这里插入图片描述
502是上游服务器出现问题,一般是在nginx上出现的问题,因为在做反向代理,一般网站大一点都需要反向代理
在这里插入图片描述
http协议需要记住3点,1.无状态,2。有链接,3。短链接,这是特点,
1.无状态指的是两次请求无法在服务器端辨别是否有关系(利用cookie技术想办法解决了,这就是cookie+session,cookie是客户端技术,session是服务端技术,这两个配合起来就可以解决动态网页的无状态问题,cookie是必须在浏览器端用的)
2.有链接,是因为基于tcp协议,就需要有链接。
3.短链接,链接了就断(最早服务器扛不住,服务器把html返回给客户端,就结束,关闭链接,只要把请求的资源返回,就立即断掉链接,每个请求就是一个链接,用完即断,这是http最早做的方式。链接的创建要三次握手,4次断开,这对服务器来讲,资源消耗是很大的。就可以要求浏览器端复用这个链接,然后就在http协议里面做了升级,有一句keep-alive。如果链接请求完不立即关闭,会问还有没有人发起链接,到服务器端请求资源,客户端说有,就继续用这个链接,

在这里插入图片描述
一个页面其实有很多请求,现在链接可以复用,链接完了还有其他请求,就可以复用这个链接,服务器端就建立新的链接。客户端跟服务器端产生的链接是有限制的,就几个,也就是其中一个用完,还有tcp请求,就继续用这个链接,如果所有都下载完了,链接都好了,链接空闲的时间达到你设定的值,则链接断开,这次是真的断开,
keep-alive 1.1的时候就支持,可以短暂维持这个链接,一旦长的话,服务器扛不住

在这里插入图片描述
无状态指的是两次请求没有关系,客户端使用cookie技术,服务端使用session
有链接是面向tcp链接,有三次握手,4次断开,成本很高。
1.1之前的,都是一个请求一个链接,但是这样tcp链接成本太高。1.1的时候提出。keep-alive,链接复用,空闲一段时间自动销毁

**http就这三个特点。
**
在这里插入图片描述

请求报文要知道,发的什么方法,url是什么,传的参数是什么(参数两个地方可以看,查询字符串,form表单传参方式,是在请求报文的body中。
响应报文是从服务器发送到浏览器端的,第一行告诉你状态是什么,下面告诉你是否保持这个链接之类的,要不要压缩。
状态码200ok
301永久重定向,302临时重定向,304缓存
404资源找不到,400语法错误,401验证身份,403权限拒绝。
502 上有服务器错误
500服务器内部错误

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值