JavaWeb——HTTP 协议的基本格式和 fiddler 的用法

目录

一、HTTP定义

二、HTTP协议的工作流程

三、抓包工具Fiddler的用法

1、介绍

2、原理

3、抓包结果

(1)、HTTP请求

(2)、HTTP响应

四、HTTP协议的格式

1、HTTP请求

(1)、请求行

(2)、请求报头

(3)、请求正文

2、HTTP响应

(1)、状态码

(2)、响应报头

(3)、响应正文


一、HTTP定义

HTTP被称为超文本传输协议,是一种应用非常广泛的应用层协议,往往是基于传输层的TCP 协议实现的。

二、HTTP协议的工作流程

当我们在浏览器中输入一个网址时,浏览器会给对应的服务器发送一个HTTP请求,服务器收到请求后会返回一个HTTP响应。响应结果被服务器解析后就会被展示成我们所看到的页面内容。在此过程中浏览器可能会向服务器发送多个HTTP请求,而服务器则会返回多个包含页面HTML、CSS、JS等的响应。

JavaWeb——HTTP 协议的基本格式和 fiddler 的用法_第1张图片

三、抓包工具Fiddler的用法

1、介绍

JavaWeb——HTTP 协议的基本格式和 fiddler 的用法_第2张图片

  • 左侧窗口显示所有的 HTTP请求/响应,可以选中某个请求查看详情
  • 右侧上方显示HTTP 请求的报文内容,切换到 Raw 标签页可以看到详细的数据格式
  • 右侧下方显示HTTP 响应的报文内容,切换到 Raw 标签页可以看到详细的数据格式

2、原理

Fiddler相当于一个代理,浏览器访问baidu.com时会把HTTP请求先发给Fiddler,Fiddler再把请求转发给百度服务器。当百度服务器返回数据时,Fiddler拿到返回数据后再把数据交给浏览器。因此Fiddler对于浏览器和百度服务器之间交互的数据细节都是非常清楚的。

JavaWeb——HTTP 协议的基本格式和 fiddler 的用法_第3张图片

3、抓包结果

(1)、HTTP请求

JavaWeb——HTTP 协议的基本格式和 fiddler 的用法_第4张图片

  • 首行:方法 + url + 版本
  • Header:请求的属性。冒号分割的键值对,每组属性之间使用\n分隔,遇到空行表示Header部分结束
  • Body:空行后面的内容都是Body。Body允许为空字符串,如果Body存在,则在Header中会有一个Content-Length属性来标识Body的长度

(2)、HTTP响应

JavaWeb——HTTP 协议的基本格式和 fiddler 的用法_第5张图片 

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

四、HTTP协议的格式

JavaWeb——HTTP 协议的基本格式和 fiddler 的用法_第6张图片

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

1、HTTP请求

(1)、请求行

【1】、请求地址URL

我们俗称的 "网址" 其实说的就是URL(Uniform Resource Locator 统⼀资源定位符)。

互联网上的每个⽂件都有⼀个唯⼀的URL,它包含的信息指出⽂件的位置以及浏览器应该怎么处理它。

JavaWeb——HTTP 协议的基本格式和 fiddler 的用法_第7张图片

  • https:协议方案名。常见的有http和https,也有其他的类型
  • user:pass:登陆信息。现在的网站进行身份认证一般不再通过 URL 进行了,一般都会省略
  • v.bitedu.vip:服务器地址。此处是一个域名,域名会通过DNS系统解析成一个具体的IP 地址
  • 端口号:上面的URL中端口号被省略了,当端口号省略时,浏览器会根据协议类型自动决定使用哪个端口。例如http协议默认使用80端口,https协议默认使用443端口。
  • /personInf/student:带层次的文件路径
  • userId=10000&classId=100:查询字符串。本质是一个键值对结构,键值对之间使用& 分隔,键和值之间使用“=”分隔
  • 片段标识:此 URL 中省略了片段标识。片段标识主要用于页面内跳转

注:URL中有部分可省略

  • 协议名:可以省略,省略后默认为http://
  • ip 地址 / 域名:在 HTML 中可以省略(比如 img、link、script、a 标签的 src 或者 href 属性)省略后表示服务器的 ip / 域名与当前 HTML 所属的 ip / 域名一致
  • 端口号:可以省略,省略后如果是 http 协议,端口号自动设为 80。如果是 https 协议,端口号自动设为 443
  • 带层次的文件路径:可以省略,省略后相当于 / ,有些服务器会在发现 / 路径的时候自动访问/index.html
  • 查询字符串:可以省略
  • 片段标识:可以省略
     

【2】、方法

GET方法

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

在浏览器中直接输入URL,此时浏览器就会发送出一个GET请求。另外HTML 中的 link、img、script 等标签,也会触发 GET 请求

GET特点

首行的第一部分为 GET。

URL 的 query string 可以为空也可以不为空;

header 部分有若干个键值对结构;

body 部分为空;

POST方法

POST 方法是一种常见的方法,多用于提交用户输入的数据给服务器。

通过 HTML 中的 form 标签可以构造 POST 请求,或者使用 JavaScript 的 ajax 也可以构造 POST 请求

POST特点 

首行的第一部分为 POST。

URL 的 query string 一般为空也可以不为空;

header 部分有若干个键值对结构;

body 部分一般不为空,body 内的数据格式通过 header 中的 Content-Type 指定,body 的长度由header 中的 Content-Length 指定;

GET 和 POST 的区别

  • 语义不同,GET 一般用于获取数据,POST 一般用于提交数据;
  • GET 的 body 一般为空,需要传递的数据通过 query string 传递,POST 的 query string 一般为空,需要传递的数据通过 body 传递;
  • GET 请求一般是幂等的,POST 请求一般是不幂等的,如果多次请求得到的结果一样就视为请求是幂等的;
  • GET 可以被缓存,POST 不能被缓存;

其他方法

  • PUT 与 POST 相似,只是具有幂等特性,一般用于更新
  • DELETE 删除服务器指定资源
  • OPTIONS 返回服务器所支持的请求方法
  • HEAD 类似于GET,只不过响应体不返回,只返回响应头
  • TRACE 回显服务器端收到的请求,测试的时候会用到这个
  • CONNECT 预留,暂无使用

(2)、请求报头

  • header 整体的格式也是 "键值对" 结构。每个键值对占一行,键和值之间使用分号分割。
  • Host表示服务器主机的地址和端口。
  • Content-Length 表示 body 中的数据长度。
  • Content-Type 表示请求的 body 中的数据格式。
  • User-Agent 表示浏览器/操作系统的属性。
  • Referer 表示这个页面是从哪个页面跳转过来的。如果直接在浏览器中输入URL或直接通过收藏夹访问页面时是没有 Referer 的。
  • Cookie中存储了一个字符串,这个数据可能是客户端自行通过 JS 写入的,也可能来自于服务器,服务器在 HTTP 响应的 header 中通过 Set-Cookie 字段给浏览器返回数据,往往可以通过这个字段实现 "身份标识" 的功能。

注:每个不同的域名下都可以有不同的 Cookie, 不同网站之间的 Cookie 并不冲突

JavaWeb——HTTP 协议的基本格式和 fiddler 的用法_第8张图片

(3)、请求正文

正文中的内容格式和 header 中的 Content-Type 密切相关

2、HTTP响应

(1)、状态码

状态码表示访问一个页面的结果

  • 200 OK,表示访问成功;

  • 404 Not Found,没有找到资源;

    浏览器输入一个 URL,目的就是为了访问对方服务器上的一个资源。如果这个 URL 标识的资源不存在,那么就会出现 404

  • 403 Forbidden,表示访问被拒绝;

    有的页面通常需要用户具有一定的权限才能访问,如果用户没有登陆直接访问,就容易见到 403

  • 405 Method Not Allowed;

    HTTP 中所支持的方法有GET、POST、PUT、DELETE等,但是对方的服务器不一定都支持所有的方法或不允许用户使用一些其他的方法

  • 500 Internal Server Error,表示服务器出现内部错误;

    一般是服务器的代码执行过程中遇到了一些特殊情况会产生这个状态码

  • 504 Gateway Timeout;

    当服务器负载比较大的时候,服务器处理单条请求的时候消耗的时间就会很长,就可能会导致出现超时的情况

  • 302 Move temporarily,表示临时重定向;

    在登陆页面中经常会见到 302,用于实现登陆成功后自动跳转到主页,响应报文header 部分会包含一个 Location 字段,表示要跳转到哪个页面

  • 301 Moved Permanently,表示永久重定向;

    当浏览器收到这种响应时,后续的请求都会被自动改成新的地址

类别 原因短语
1XX Informational(信息性状态码) 接收的请求正在处理
2XX Success(成功状态码) 请求正常处理完毕
3XX Redirection(重定向状态码) 需要进行附加操作已完成请求
4XX Client Error(客户端错误状态码) 服务器无法处理请求
5XX Server Error(服务器错误状态码) 服务器处理请求出错

(2)、响应报头

响应报头的基本格式和请求报头的格式基本一致,类似于Content-Type、Content-Length 等属性的含义也和请求中的含义一致。

响应中的 Content-Type 常见取值有以下几种:

  • text/html : body 数据格式是 HTML
  • text/css : body 数据格式是 CSS
  • application/javascript : body 数据格式是 JavaScript
  • application/json : body 数据格式是 JSON

(3)、响应正文

正文的具体格式取决于 Content-Type

 

你可能感兴趣的:(JavaWeb,http,fiddler,网络协议,Javaweb)