http报文

http报文

http报文分为请求报文与响应报文

请求报文

请求报文由:

请求行

请求头

请求体

三部分组成

在这里插入图片描述

  • 请求行组成
    1.请求方式:上图中,请求方式为GET。GET和POST是最常见的请求方式,除此以外还包括DELETE、HEAD、OPTIONS、PUT、TRACE
    2.请求对应的URL地址,它和报文头的Host属性组成完整的请求URL
    3.协议名称及版本号,如上图的‘HTTP/1.1’

  • 请求头中的常用属性
    1.Accept:请求报文可通过一个“Accept”报文头属性告诉服务端 客户端希望接受什么类型的数据
    【Content-Type:表示发送端(可能是客户端/服务器)发送的实体数据的数据类型,注意区别】
    2.Cookie:客户端的Cookie就是通过这个报文头属性传给服务端的
    3.Referer:表示这个请求是从哪个URL过来的,假如你通过google搜索出一个商家的广告页面,你对这个广告页面感兴趣,鼠标一点发送一个请求报文到商家的网站,这个请求报文的Referer报文头属性值就是http://www.google.com(通常用来做流量统计)
    如果从浏览器地址栏里直接输入地址,则请求头没有referer
    4.Cache-Control:对缓存进行控制,如一个请求希望响应返回的内容在客户端要被缓存一年,或不希望被缓存就可以通过这个报文头达到目的

  • 请求体
    请求体以‘键:值’的表示向服务器发送的数据

响应报文

响应报文由:

响应行

响应头

响应体

三部分组成

在这里插入图片描述

  • 响应行组成
    由协议及版本,状态码及状态描述

以下为常见的状态码:

  1. 301
    表示永久重定向。如果浏览器收藏了这个URL,那么浏览器会修改收藏的url为新的url

  2. 302
    表示临时重定向,不会替换以前的url。重定向的url只有在Cache-Control的允许下才进行缓存

  3. 303
    临时重定向,且必须用get方式请求

https://www.cnblogs.com/wuguanglin/p/redirect.html

  1. 404
    你请求的资源不存在

  2. 401
    未授权。一般来说该错误消息表明你首先需要登录(输入有效的用户名和密码)。如果你不输入这些信息,就会有401错误,这意味着验证信息出错,服务器无法识别你的身份。

  3. 403
    服务器拒绝了你的请求。有句话叫“拉不出屎千万别怪地球没引力”,因为出现403是因为服务器拒绝了你的地址请求,或者你根本没权限访问网站,提供身份验证也没用,也就是说,用户被禁止访问了。然而除非与Web服务器管理员联系,否则一旦遇到403状态码都无法自行解决。

  4. 503
    服务器目前无法使用(由于超载或停机维护)。 通常,这只是暂时状态

  5. 500
    服务器程序出错

  6. 200
    服务器成功返回内容

  7. 304
    如果浏览器中有该资源的缓存(意味着你之前已经访问过该资源),且还没有过期。那么当你再次访问该资源时,会先检查该资源在服务器端是否有过更新,如果没有更新,那么服务器就会返回304,告诉浏览器使用缓存中的内容,这样就减少了网络开销。
    我们可以将该状态码理解为:将请求重定向到浏览器本身

为方便记忆,可看下表

状态码定义说明
1XX信息接到请求继续处理
2XX成功成功的收到,理解,接受
3XX重定向为了完成请求需要进行另一部措施(如直接重浏览器缓存获取资源,或跳转到其他页面)
4XX客户端错误请求语法有错误,不能完全符合要求
5XX服务器错误服务器无法完成明显有效的请求
  • 响应头

我们一起来讨论响应头中的一些重要属性

1.cache-control——用于控制浏览器中的缓存
其取值如下:

max-age

后面跟数字,表示缓存的秒数,一旦超出,则下次访问该资源就必须到服务器中取,而不是取缓存了

max-stale

后面跟数字,表示过期多久以内的,依旧可以使用,一般同max-age一起使用

no-cache

2.Etag

ETag是一个可以与Web资源关联的记号,并在HTTP响应头中将其传送到客户端。语气配合使用的是请求头中的if-None-Match属性。下面来解说两者是怎么作用的:

服务器端的资源都对应了一个Etag标记,用于表示该资源的更新状况。当你向服务器请求资源时,该资源的Etag标记就会随着响应头一起发给客户端,客户端会存储该值;下一次再访问时,客户端去除保存的etag值,将其添加到请求头中的if-None-Match中,发给服务器;服务器读取该值并与对应资源的Etag值进行对比,如果值不同,则意味着服务器端已经对该资源进行了更新,然后服务器就会返回新资源给客户端,如果值相同,则意味着资源未更新,于是服务器端向客户端发送状态码——304,即告诉客户端,资源未更新,请取缓存中的内容

可参见改文章:
https://www.cnblogs.com/kabi/p/6288700.html

  • 响应体

这个不用多说,应该都明白的!

Get与Post请求的区别

get与post是http中发送请求的两种方式,他们底层都是基于tcp/ip的,而且他们也都能获取与发送数据,因此实际上他们并没有区别。

但是在RFC规范中,为他们各自定义了语义——即get用来获取数据,post用来发送数据。

然而在RFC规范的具体实现中,便产生了如下的(也是我们经常听见的)区别:

  • 我们约定——GET使用URL传参。而POST将数据放在请求BODY中
  • GET的URL会有长度上的限制,则POST的数据则可以非常大
    这有两方面的原因
    一是:早期浏览器会对URL长度进行限制
    二是:URL长了,对服务器处理也是一种负担。原本一个会话就没有多少数据,现在如果有人恶意地构造几个几M大小的URL,并不停地访问你的服务器。服务器的最大并发数显然会下降,所以为了服务器的安全考虑,有限制
  • POST比GET安全,因为数据在地址栏上不可见
  • GET请求会被浏览器主动cache,而POST不会,除非手动设置
  • GET可收藏为书签,而POST不能
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值