【计算机网络】HTTP协议

  • 🎥 个人主页:Dikz12
  • 🔥个人专栏:网络原理
  • 📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香
  • 欢迎大家👍点赞✍评论⭐收藏

目录

Http协议介绍 

HTTP协议工作流程

Fiddler抓包工具介绍 

Fiddler 使用

HTTP请求(request) 

首行 

请求方法

GET方法  

POST方法 

其它方法 

 GET 和 POST的区别

URL 

版本号 

 请求头(header)

Host 

Content-Length

Content-Type

User-Agent (简称 UA)

 Referer

 Cookie

 HTTP响应

 认识“状态码”

 响应报头(header)

客户端如何构造一个请求? 

 HTTP协议格式总结


Http协议介绍 

 HTTP(全称为“超文本传输协议”)是一种应用很广泛的 应用层协议.

http往往是基于传输层的TCP协议实现的.

 HTTP 是一个文本格式的协议. 学习HTTP协议,重点学习HTTP的报文格式,分为两部分看待,请求 和 响应. 可以通过 Chrome 开发者工具或者 Fiddler 抓包, 分析 HTTP 请求/响应的细节.

 

http使用场景:1.浏览器访问网站  2.手机App访问对应的服务器 (通过http协议传输数据)

HTTP协议工作流程

  • 请求: 客户端给服务器发送的数据.
  • 回应: 服务器给客户端返回的数据.

当我们在Bing浏览器中输入一个 "搜狗网址", 此时浏览器就会给对应的服务器发送一个 HTTP 请求. 对方服务器收到这个请求之后, 经过计算处理, 就会返回一个 HTTP 响应.

.

 

 

事实上, 当我们访问一个网站的时候, 可能涉及不止一次的 HTTP 请求/响应 的交互过程.

http协议,是一种“一问一答” 结构模型的协议。请求和响应的协议和格式。

一问一答:访问网站

多问多答:上传文件

一问多答:下载文件

多问多答:串流/ 远程桌面

Fiddler抓包工具介绍 

 Fidder官方下载地址:https://www.telerik.com/fiddler/

安装可以自定义路径一路next,就可以非常简答 !

Fiddler 使用

 新安装的fidder 还需要我们手动开启 HTTPS 功能,并且安装证书的. (否则只能抓htttp)

1.打开fidder, 找到Tools,点击Options.

2. 选HTTPS,把对号都选上,会弹出一个框,意思就是是否要安装证书,选Yes就完了.

上诉操作完成之后就可以使用了. 

 3.fidder打开之后,是一个左右结构的程序,左边有一个列表,列出抓到的包有哪些

4.fiddler 右边就是包的详情.(点击左边某个包) 

  • 左侧窗口显示了所有的 HTTP请求/响应, 可以选中某个请求查看详情.
  • 右侧上方显示了 HTTP 请求的报文内容. (切换到 Raw 标签页可以看到详细的数据格式)
  • 右侧下方显示了 HTTP 响应的报文内容. (切换到 Raw 标签页可以看到详细的数据格式)
  • 请求和响应的详细数据, 可以通过右下角的 View in Notepad 通过记事本打开.

可以使用 ctrl + a 全选左侧的抓包结果, delete 键清除所有被选中的结果.

HTTP请求(request) 

首行 

 首行由http请求的“方法”(methon)、url 、版本号三部分组成.

请求方法

 

这两个方法是较为重要的方法!! 

GET方法  

GET 是最常用的 HTTP 方法. 常用于获取服务器上的某个资源.

 打开 Fiddler, 访问 百度主页, 观察抓包结果.

 

 图中标记的就是通过浏览器地址栏发送的 GET 请求.

GET 请求的特点

  • 首行的第一部分为 GET
  • URL 的 query string 可以为空, 也可以不为空.
  • header 部分有若干个键值对结构.
  • body 部分为空.
     
POST方法 

 POST 方法也是一种常见的方法. 多用于提交用户输入的数据给服务器(例如登陆页面).

 

POST 请求的特点

  • 首行的第一部分为 POST
  • URL 的 query string 一般为空 (也可以不为空)
  • header 部分有若干个键值对结构.
  • body 部分一般不为空. body 内的数据格式通过 header 中的 Content-Type 指定. body 的长度由
  • header 中的 Content-Length 指定.
其它方法 
  •  PUT 与 POST 相似,只是具有幂等特性,一般用于更新
  • DELETE 删除服务器指定资源
  • OPTIONS 返回服务器所支持的请求方法
  • HEAD 类似于GET,只不过响应体不返回,只返回响应头
  • TRACE 回显服务器端收到的请求,测试的时候会用到这个
  • CONNECT 预留,暂无使用

这些方法不需要记,也就是说不需要去遵守场景要求,没有所谓的约束, 它们能做的get 和 post 也能做到.

 GET 和 POST的区别

 首先,GET  和 POST 没有本质区别!!!(双方可以替换对方的场景)

虽没有本质区别,但是在使用习惯上,还是存在差异的.

1.GET 习惯把传递的数据放到query string 中,POST则是习惯把传递的数据放到body中.

(情况并非绝对!!!,当然还是建议大家这样操作.)

2.语义上的差异.

    GET 大多数还是用来获取数据.

    POST 大多数还是用来提交数据.(登录+上传)

网上一些错误说法: 

 1.GET请求传递数据数据不安全. POST请求传递数据更安全.

依据就是:如果使用GET请求来实现登录,点击登录的时候,会把用户名和密码放到 url 中,进一步显示到浏览器地址栏里.(就被别人看见了). 相对于POST,则是放在body中,不会在界面上显示,所以更安全.

这种说法,也就能忽悠下小白了,对于黑客来说成本并不高,就如下图:用fiddler抓包得到的,用户名和密码,安不安全的关键是加密!!!

2. GET 请求能传递的数据量有上限,POST传递的数据量没有上限.

这个说法是上古时期的一个遗留问题,早起版本的浏览器硬件资源非常匮乏,针对GET请求的url 做出了限制.实际上,RFC标准文档中并没有明确规定url 能有多长. 目前,浏览器和服务器的实现过程中,url可以非常长.

URL 

URL,描述了某个资源在网络上所属的位置. 就可以理解成jdbc 里的url. 数据库也算是一种“资源”.

版本号 

这就很简单,首行的最后就是http 的版本.

 请求头(header)

header 的整体的格式也是 "键值对" 结构.
每个键值对占一行. 键和值之间使用分号分割

Host 

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

Content-Length

表示 body 中的数据长度.

Content-Type

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

User-Agent (简称 UA)

表示浏览器/操作系统的属性. 形如

 Referer

 表示这个页面是从哪个页面跳转过来的. 形如:

 Cookie

可以认为是浏览器在本地存储的一种机制.

 

 浏览器的数据来自于服务器. 而且浏览器的后续操作也是要提交给服务器的. 

服务器就相当于一个网站的各种核心数据.

程序在运行过程中,也会有一些数据,需要在浏览器这边存储,并且在后续请求的时候数据可能需要再发给服务器. (上次登录时间、上次访问时间、用户的身份信息、累计访问次数.....)

 

 空行 和 正文 boby 就不在演示了!!! 用fiddler抓包工具观察一下就可以!!非常简单

 HTTP响应

 认识“状态码”

 

  •  2xx:都表示成功.
  • 3xx: 表示重定向. 重定向:请求中访问的是A 这样的地址,响应返回了一个重定向报文,告诉你应该要访问B的地址.
  • 5xx: 表示服务器出错了. 也就是服务器挂了.

 响应报头(header)

响应报头的格式跟请求报文格式基本一致,也就是 Content-Type 中的body数据格式不一样.

客户端如何构造一个请求? 

 1.直接在浏览器地址栏输入URL 

2.通过form表单来触发GET / POST 请求

<!DOCTYPE html>
<html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>hello</title>
    </head>
    <body>
        <form action="http://www.sogou.com/abc.html" method="get">
            <input type="text" name="key1">
            <input type="text" name="key2">
            <input type="text" name="key3">
            <input type="submit" value="提交">
        </form>
    </body>
</html>

 

3.这种也是最简单的借助第三方工具 --> postman 

 

 

 HTTP协议格式总结

 

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

  • 104
    点赞
  • 110
    收藏
    觉得还不错? 一键收藏
  • 74
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值