http协议

概念

HTTP (全称为 "超文本传输协议") 是一种应用非常广泛的应用层协议;HTTP 往往是基于传  输层的 TCP 协议实现的. (HTTP1.0, HTTP1.1, HTTP2.0 均为TCP, HTTP3 基于 UDP 实现) 目前我们主要使用的还是 HTTP1.1 和 HTTP2.0 .

 

          http请求:本质上就是给tcp socket里写了一个符合http格式的字符串,类似于tcp的报文格式;此时相对应网址的服务器就会返回一个http响应,然后浏览器进行解析后展示成页面内容。

fiddler:

http协议的交互的详细过程可通过fiddler这种第三方工具看到;

          所谓抓包的第三方工具就是一个代理程序;故而各种代理之间可能会形成冲突,在使用fiddler时需要关闭其他代理,想要正确抓包还需要开启Https功能;

          代理分正向代理和反向代理,前者代表客户端,后者代表服务器;而加速器是指在数据传输时会有很多路径,其只是将数据引导到快捷的高速通道上;

抓包请求:

 首行: [方法] + [url] + [版本]

Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分结束

Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有 一个Content-Length属性来标识Body的长度;

 

 抓包响应:

 

首行: [版本号] + [状态码] + [状态码解释]

Header: 请求的属性, 冒号分割的键值对;每组属性之间使用\n分隔;遇到空行表示Header部分 结束 Body: 空行后面的内容都是Body. Body允许为空字符串. 如果Body存在, 则在Header中会有 一个Content-Length属性来标识Body的长度; 如果服务器返回了一个html页面, 那么html页 面内容就是在body中.

协议格式:

思考问题: 为什么 HTTP 报文中要存在 "空行"?

     因为 HTTP 协议并没有规定报头部分的键值对有多少个. 空行就相当于是 "报头的结束标记", 或者 是 "报头和正文之间的分隔符". HTTP 在传输层依赖 TCP 协议, TCP 是面向字节流的. 如果没有这个空行, 就会出现 "粘包问题".

在请求中会出现相关的方法:实际开发中常见的方法为:post和get;

GET 请求的特点 :首行的第一部分为 GET URL 的 query string 可以为空, 也可以不为空. header 部分有若干个键值对结构. body 部分为空.

POST 请求的特点 :首行的第一部分为 POST URL 的 query string 一般为空 (也可以不为空) header 部分有若干个键值对结构. body 部分一般不为空. body 内的数据格式通过 header 中的 Content-Type 指定. body 的长度由 header 中的 Content-Length 指定.

Host 表示服务器主机的地址和端口.

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

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

User-Agent (简称 UA) 表示浏览器/操作系统的属性

Referer 表示这个页面是从哪个页面跳转过来的.

Cookie Cookie 中存储了一个字符串, 这个数据可能是客户端(网页)自行通过 JS 写入的, 也可能来自于服务器(服 务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据). 往往可以通过这个字段实现 "身份标识" 的功能.

首次登陆网页:

 响应中包含了 3 个 Set-Cookie 属性. 其中我们重点关注第三个. 里面包含了一个 gitee-session-n 这样的属性, 属性值是一串很长的加 密之后的信息. 这个信息就是用户当前登陆的身份标识. 也称为 "令牌(token)"

 再次访问网页:

 请求你中的 Cookie 字段也包含了一个 gitee-session-n 属性, 里面的值和刚才服务器返回的值相 同. 后续只要访问 gitee 这个网站, 就会一直带着这个令牌, 直到令牌过期/下次重新登陆

问题:Post和Get有什么区别?

[1]:get可以给服务器传递信息,传递的信息一般都会放在query string,post传递信息则是通过Body

[2]:语义区别,get用于获取数据,post用于提交数据;post更加安全

[3]:get是会被设计成幂等的(相同的输入得到的结果也是相同的),Post并不要求;

[4]:get可以被缓存,(把请求保存成下来,下次不必真请求,直接取缓存结果),post一般不能缓存;

url:

状态码

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值