HTTP协议(1)

文章详细介绍了HTTP协议的作用,通过Fiddler抓包工具展示了浏览器与服务器之间的交互过程。重点讨论了HTTP请求的GET和POST方法,包括它们的区别、应用场景以及报文格式。同时,提到了URL结构、HTTP状态码和Cookie的使用。
摘要由CSDN通过智能技术生成

目录:1.HTTP协议的作用

2.Fiddler 抓包工具

3.协议报文格式

  1. HTTP协议的应用:HTTP属于应用层最广泛使用的协议之一,HTTP是浏览器和服务器之间的交互纽带

当我们在浏览器中输入一个百度搜索的“网址”时,浏览器就给百度的服务器发送了一一个HTTP请求,百度的服务器就返回了一个HTTP响应,这个响应结果被浏览器解析之后,就展示成我们看到的页面内容,(这个过程浏览器会给服务器发送多个请求,服务器会对应返回多个响应,这些响应里面包含了页面的html,css,javascipt,图片,文字等等).

对于浏览器和服务器之间的交互过程,我们借用Fiddler这个抓包工具可以更好的去观察

  1. Fiddler抓包工具

Fidder为啥能够了解浏览器和服务器之间的交互过程呢?我们不妨来看一张图。

Fidder相当于一个“代理”

当我们再浏览器里输入baidu.com时,就会把HTTP请求发送给Fidder,然后Fidder接着会把这个请求在转发给百度的服务器,然后百度服务器响应,返回数据给Fiddler,然后Fiddler再把数据给浏览器。

给大家举个例子:我想要吃饭,但我不想下去,于是我把我的钱给我的舍友让他帮我带饭,然后我的舍友把钱给了食堂窗口的老板,然后老板把饭给了我的社友,然后我的舍友把饭给了我,所以我这个舍友对“我”和“食堂老板”之间的交互细节非常清楚。

抓包结果:

HTTP请求:

HTTP响应:

  1. 协议报文格式:

首行:包含三个部分,之间使用空格来区分,GET:HTTP的方法

URL(俗称网址)https://www.baidu.com/?tn=44004473_52_oem_dg

HTTP/1.1版本号

认识URL:

URL最关键的四个部分:

  1. 域名:ip

  1. 端口号

  1. 带层次的路径

  1. 查询字符串

举个简单的例子:

比如我要卖肉夹馍:在齐工大餐厅:16号窗口/纯瘦肉的肉加膜,辣度:微辣带香菜

IP地址 端口号 带层次的路径 查询字符串(以键值对方式组织)

一个url里的几个部分,有些是可以省略的

例如:https://www/sogou.com/ 省略了端口,浏览器会提供默认端口,对于http来说,默认端口80;对于https来说,默认端口是443,/也是路径,代表“根目录”,这里的根目录是http服务器的根目录,HTTP服务器是系统上的一个进程,委托于服务器管理系统上的一个特定的目录,这个目录里面的资源可以让外面进行访问,一个HTTP服务器提供的资源是很多的,不同的路径,拿到的是不同的资源。

下面我们来看一下方法:

在这里面我们最常用的两个方法一个是GET,另一个是POST,

GET请求

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

  1. html里的link,script,img.....

  1. 通过js来构造GET

POST 典型的是登录,登录跳转的时候会涉及到POST,另一个就是上传文件

GET和POST之间的典型区别:

  1. GET可以给服务器传递一些信息,GET传递的信息一般都是放在query string,POST传递信息则是通过body

  1. 语义上的区别:GET请求一般是用于从服务器获取数据

POST请求:一般是用于给服务器提供数据

  1. GET通常会被设计成幂等, POST不要求幂等,幂等的意思是指相同的输入,得到的结果是相同的。

  1. GET是可以被缓存的,因为GET通常会被设计成幂等,POST则一般不能被缓存,缓存的好处是把请求的结果保存下来,下次请求就不必真请求,直接取缓存结果)

Host

Host:www.baidu.com

大概描述了服务器所在的地址和端口 Host这里的地址和端口,用来描述最终要访问目标,这个内容大概率和URL是一样的,也有一定的情况下是不同的。

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

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

GET请求,没body,请求中就没有这两个字段

POST请求:有body,则必须有这两字段

User-Agent

User-Agent以前主要用于描述浏览器和操作系统的版本

User-Agent主要用来区分PC和移动

通过user agent进行大的区分,细节上还可以进行区分,“响应式页面”

Referer 描述当前页面的“来源“.

cookie

本质上是浏览器给网页提供的本地存储数据的机制,网页默认是不允许访问你的计算机硬盘的(保证安全)浏览器对于访问硬盘做出了明确的限制,规定只可以访问cookie,cooike通过键值对的方式来组织数据。

Cookie 中的数据来自于服务器,服务器会通过HTTP响应报头部分,服务器来决定,浏览器的Cookie要存什么

Cookie存在于浏览器中,存在于硬盘的,Cookie在存的时候,是按照浏览器+域名维度来进行细分的,不同的浏览器各自存各自的cookie,同一个浏览器不同的域名,对应不同的cookie,Cookie最终要回到服务器里,客户端同一时刻会有很多,客户端会同过cookie来保存当前用户使用的中间状态,当客户端访问浏览器的时候,就会自动的把Cooike的内容带入到请求中,服务期就能知道现在的客户端的状态。

Cookie并不是会永久保存的,会有一个过期时间,比如我们在公共电脑上登录自己账号,此时登录状态就保存到cooike中,下个人使用的时候,很可能cookie就过期了,就要求重新登录,越敏感的网站,过期时间就越短。

Cookie中的数据具体存啥,又程序员决定,这里面的内容是程序员自定义的。

HTTP状态码:描述了这次响应的结果.

200 表示成功

404 NOT Found 访问的资源不存在,在服务器上没找到

403 Forbidden 访问被拒绝

302 重定向(类似于呼叫转移)

这里给大家举个例子来理解一下它的用途,比如我们学校的教务系统原来域名v.qiluvip,后来又换了个域名,那那些已经毕了业的同学怎么办?我们就可以重新配置个定向,如果老学员访问旧域名,就自动跳转到新域名,302 这样的响应报文中,会在header里带有个Location属性,通过这个属性来描述要跳转到那个新的地址。

我们再来看一下重定向和请求转发之间的区别

重定向:

请求转发:

这里给大家举个例子:比如有同学来问我个数学题,但我是个语文老师,重定向就是:我说同学这个题我不问,你去问数学老师吧,请求转发是:我接着去问这个数学老师,然后我在告诉这位同学。

重定向,可以重定向到外部资源(跳转到别的网站)

请求转发只能在服务器内部的资源之间转发,少了一次交互更加高效

500 服务器内部错误(服务器代码抛异常了)

504 gateway,timeout(响应时间久了,浏览器等不及)

状态码的分类:1** 接收的请求正在处理中

2**成功

3** 重定向

4**客户端错误

5**服务器错误

HTTP协议里,能够被程序员自定义的地方,1.URL中的路径 2.URL中的querry string 3.header中的键值对 4.header中的cookie的键值对 5.body

HTTP协议的报文格式:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值