【后端】HTTP3

先总结一下之前的内容

我们学习HTTP,主要是学习HTTP的报文格式

HTTP的报文格式分为两部分,分别是 请求和响应两部分

请求:

(1)首行:  方法  URL  版本号

(2)请求头header:多个键值对,每个键值对独占一行,键和值之间使用:空格来分割

(3)空行:header的结束标记

(4)正文body: 格式多种,常见的是json

响应:

(1)首行:  版本号  状态码  状态码描述

(2)响应头header:多个键值对,每个键值对独占一行,键和值之间使用:空格来分割

(3)空行:header的结束标记

(4)正文body:  格式多种,常见的是json html  css  js  图片等


我们在前面已经学习了请求的首行中的 URL和方法

URL

(1)ip + 端口

(2)带层次的路径

(3)查询字符串 query string

(4)url encode/decode

方法

(1)GET

(2)POST

GET和POST没有本质区别:

1)语义不同:一个表示获取,一个表示提交

2)GET一般把数据放到 query string中,POST通常放在body中

3)GET建议实现成幂等的,POST无要求

4)GET如果是幂等的,那就可以缓存,POST无要求


接下来开始接着往下讲,也就是本文章的主要内容,咱们一个一个来~

认识请求报头(header)

我们知道header部分里的内容都是键值对,这里的键值对,几乎都是由标准规定的,当然也可以我们自己做一些自定义的键值对

咱们下面来认识几个header里面键值对的含义

(1)Host

 咱们先用抓包工具抓包,我们浏览了搜狗官网,捕获到相关内容,找到Host键值对

 红色框部分就是Host

Host:表示服务区主机的地址和端口(意思就是要去哪里找到服务器)

但目前的Host里面,你只看到了地址,并没有看到端口,那是因为端口被省略了,Host放进去的就是IP+端口,这里的端口被省略后,省略就是默认值,http端口默认值为80,https默认值为443~

这里就产生了一个问题:URL里面不是已经有这个服务器的IP和端口了嘛,为什么还要在Host里面出现?

事实上,URL的IP和端口跟Host的IP和端口是有可能是完全不一样的,为什么这么说呢?

假如你要是通过代理的话,就可能会产生差异(但这个差异在fiddler没体现出来而已)

 

我们的浏览器真正要访问的是目标服务器:11.22.33.44  但要经过代理

所以请求中的URL可能就会是1.2.3.4  然后Host里面是11.22.33.44

把请求给代理,代理根据你的Host去帮你找到对应的服务器


(2)Content-Length & Content-Type

Content-Length表示body中的数据长度

Content-Type表示请求的body中的数据格式

这两个字段,不一定会出现,但是如果出现其中一个。那么另外一个也必然会出现

如果请求中没有body(GET),就没有这两个字段

如果请求中有body(POST),一定会有这两个字段

1)Content-Length存在的意义是什么呢?HTTP协议在传输层是基于TCP

TCP是面向字节流的,就有可能会出现粘包问题(粘包:一个一个字节放在TCP接收缓冲区中,应用程序从哪里到哪里读出一个完整的数据报是一个问题)

解决粘包问题有两个个解决方法:一个是约定一个分隔符,也就是空行;另外一个就是约定报文的长度

约定好报文长度后,就能分辨多个请求了,通常多个请求,比如说多个GET连在一起,后一个GET会连着上一个请求的body结尾,空格分割header部分后,在根据报文长度拿到对应GET的body部分,避免取到下一个GET内容~

 2)Content-Type:body中的数据可以有很多种格式,存在不同的格式,对于接收方来说,解析的方式也是不同的~

 


(3)User-Agent(简称UA)

第一个框表示一个组织,MDN就是这个组织搞的

第二个框是你主机信息,window10,64位主机

第二个框表示的是当前浏览器的内核

第四个框表示使用的浏览器

小结:UA主要包含的信息,就是操作系统信息和浏览器信息,描述了用户在使用啥样的设备上网~


(4)Referer 这个不一定会在请求中出现

它表示,当前这个页面,是从哪个页面跳转过来的(也就是上级页面是啥)

比如说现在我们从百度去搜索搜狗的官网

上图,此时的页面是百度,我点击进入搜狗官网后,就跳转到了下图页面 

 然后我们抓包看看搜狗里面的referer

我们根据上图很明显看到,我们跳转到的搜狗官网的上级页面是百度,所以referer就显示了上一级的网址~

你要是在浏览器中直接输入一个地址是没有referer的,点击收藏夹也没有,必须要经过一个网页的跳转才行~


本文先讲解这些~结束

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值