文章目录

  • 前言
  • 一、HTTP
    • 1.HTTP是什么?
    • 2.HTTP工作过程
    • 3.HTTP协议格式
      • (1)HTTP请求(request)
        • URL
        • 方法(method):最主要的有get/post
        • 报头(header)
    • 面试题:get和post的区别
      • (2)HTTP响应(response)
        • 状态码
        • 报头(header)
        • 正文(body)
    • 4.构造HTTP请求
      • (1)通过form表单构造HTTP请求
      • (2)通过ajax构造HTTP请求
  • 二、HTTPS
    • 1.HTTPS是什么?
    • 2.HTTPS的工作过程
      • (1)引入对称加密
      • (2)引入非对称加密
      • (3)引入证书

前言

HTTP协议是HTTP客户端与HTTP服务器之间交互传输的数据格式,为了更好的构造HTTP协议,这篇文章总结了HTTP请求/响应协议的格式,比较了get和post方法的区别;同时,通过ajax/Java socket构造HTTP客户端,Tomcat是HTTP的一个服务器,后面会讲述;最后引入HTTPS,由于HTTP协议是按照文本内容名文传输的,会导致一些问题,通过在HTTP上引入一个加密层,即HTTPS。


一、HTTP

1.HTTP是什么?

HTTP(超文本传输协议),是应用层的协议之一,是应用非常广泛、目前最主流的应用层协议,它通常是基于传输层的TCP协议实现的,目前主要使用的有1.1和1.2版本;“超文本”的含义就是传输的内容不仅仅是文本(html、css等)还可以是一些其他资源,例如音频、图片等二进制数据。

2.HTTP工作过程

平时我们在浏览器中输入一个搜索网址(URL),其浏览器会给对应的服务器发送一个HTTP请求,对应的服务器会返回一个HTTP响应。

3.HTTP协议格式

HTTP协议是一个文本格式的协议,可以通过Fiddler进行抓包获取HTTP请求/响应的细节。抓包工具就是浏览器在发送请求HTTP时,就会先发给Fiddler,然后Fiddler再把请求发给服务器,服务器返回数据时,Fiddler先拿到数据再交给浏览器。
Fiddler下载地址:https://www.telerik.com/fiddler
如上图所示,右边是通过Fiddler抓到的HTTP,左边是通过点击右边抓到的HTTP显示的详细信息,通过raw可以查看HTTP请求/响应。

(1)HTTP请求(request)

URL

URL(统一资源定位符):互联网上的每个文件都有唯一的URL,它包含的信息指出了文件的位置以及浏览器应该怎么处理它。如下图所示,就是URL的基本格式。
URI(统一资源标识符):URL是URI的子集,是URI概念的一种实现方式。

(1)协议方案名:常见的有http、https等。
(2)登录信息:user为用户名,pass为用户密码,现在一般都会省略。
(3)服务器地址:此处是一个域名的话,会通过DNS解析为IP地址。
(4)服务器端口号:可以省略不写,http默认端口号为80,https默认端口号为443。
(5)带层次的文件路径:指定访问路径。
(6)查询字符串(query string):是一个键值对的形式,键与值使用=分隔,键值对之间用&分隔。
(7)片段标识符:主要用于页面内跳转,可以没有。

方法(method):最主要的有get/post

方法 说明 支持的HTTP协议版本
GET 获取资源 1.0,1.1
POST 传输实体主体 1.0,1.1

(1)GET方法
常用语获取服务器上的某个资源,在浏览器上输入某个url浏览器会发送一个get请求,html中的link、img、script等标签也会触发get请求。
如下图,是一个get请求。

GET请求的特点:
首行有get url(其中URL的queryString可以为空) ;
header部分有若干键值对;
body部分为空。

(2)POST方法

首行为POST url(queryString一般为空,也可以不为空);
header部分有若干键值对;
body部分一般不为空。(其中header中的Content-Length、Content-type用来指定body的长度和数据格式)
header与body空一行是为了防止在传输层产生黏包问题。

报头(header)

Host:表示服务器主机的地址和端口。
Content-Length:body中的数据长度。
Cotent-Type:body中的数据格式(常见格式有form表单、json)。
User-Agent:表示浏览器/操作系统的属性。
Referer:表示这个页面是从哪个页面跳转过来的。
Cookie:Cookie里保留的数据可以让用户在有效期间免验证直接拿到请求的数据。(例如你访问一个网站,第一次访问你需要先登录,登录后服务器会给你一个‘令牌’,你在访问这个网站其他页面的时候就不需要再登陆了,但是对于一些特定的页面还是会受限制)

面试题:get和post的区别

get和post本质上是相同的,但是:
(1)在语义方面,一般要求GET用于获取数据,POST用于提交数据。
(2)GET的body部分一般为空,需要传输的数据通过query string传输;POST的query string一般为空,需要传递的数据通过body传递。
(3)GET请求一般是幂等的,POST请求一般不是幂等的。(幂等是多次请求得到的结果都一样)
(4)在幂等的基础下,GET请求是可以被缓存的,POST不能被缓存。

(2)HTTP响应(response)

如图是抓包抓到的HTTP响应。

状态码

(1)200 ok:表示访问成功。
(2)404 Not Found:没有找到资源。
(3)403 Forbidden:表示访问被拒绝。
(4)405 Method Not Found:服务器不支持的方法。
(5)500 Internal Server Error:服务器内部出错。
(6)504 Gateway TimeOut:当服务器负载较大的时候,请求时间过长就会出现这种情况。
(7)302 Move temporarily:临时重定向。(例如:换新手机号之后希望别人打你旧电话号的时候转移到你新手机号上)
(8)301 Moved Permantly:永久重定向,当浏览器收到这种响应的时候,后续的请求都会自动被改为新地址。

报头(header)

其中由Content-Type、Content-Length等属性。
Content-Type的常见取值为:text/html、text/css、application/javascript、application/json。

正文(body)

Content-Type所对应的取值就是body的格式。

如上图所示,总结了HTTP请求/响应的格式。空行是作为报头的结束标志,防止TCP传输时产生黏包问题。

4.构造HTTP请求

(1)通过form表单构造HTTP请求

get方法:

a.输入内容,点击提交

b.提交后跳转,红色框里面是queryString部分,一般get有,post没有。

代码如下(示例):

    <form action="https://www.bilibili.com/" method="get"><input type="text" name="text"><input type="text" name="text"><input type="submit" value="提交"></form>

post方法

代码如下(示例):

    <form action="https://www.bilibili.com" method="post"><input type="text" name="user"><input type="password" name="password"><input type="submit" value="提交"></form>

(2)通过ajax构造HTTP请求

ajax构造的请求会出现跨域访问错误,可以用在自己写的服务器上。
ajax(Asynchronous Javascript And XML)异步JavaScript和XML,需要注意的是这里的异步和多线程里的不是同一个意思。
多线程中的synchronized为同步,其实是‘异步’的意思。
网络通信里的同步相当于我去餐厅点餐我自己把饭端走,而异步是不负责接收结果,等别人主动推送过来(我去点餐之后就不管了,等服务员给我端过来)。
get方法(示例):

    <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script><script>$.ajax({type: 'get',url: 'https://www.sogou.com',success: function(body) {// 服务器返回一个正确的响应(200)console.log('ok');},error: function(body) {console.log('error');}})</script>

post方法(示例):

    <script src="https://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script><script>// $是jquery中特殊的变量名,是jquery里的全局对象$.ajax({type: 'get',url: 'https://www.sogou.com',data: 'http 请求的 body',contentType: 'x-www-form-urlencode',success: function(body) {// 服务器返回一个正确的响应(200)console.log('ok');},error: function(body) {console.log('error');}})</script>

注意:form构造的HTTP请求的页面会立即跳转到另一个页面,而ajax构造的页面是静态的,这样就可以让页面局部跳转。

二、HTTPS

1.HTTPS是什么?

名文传输是一件很危险的事情,HTTPS就是在HTTP的基础上进行了加密,进一步保证用户信息的安全。而加密就是经过一些列操作将明文转为密文,解密则是将密文转为明文。

2.HTTPS的工作过程

加密的方式有很多种,主要分为对称加密和非对称加密。

(1)引入对称加密

对称加密:客户端使用密钥将名文加密为密文请求发给服务器,服务器通过密钥解密得到名文。
虽然黑客不知道密钥是什么,无法进行解密,但是如果为保证密钥不容易扩散,每个客户端需要不同的密钥,服务器对客户端需要维护每个客户端和密钥之间的联系,比较麻烦。

(2)引入非对称加密

为了保证密钥的安全,如果进行对称加密,就需要先确定一个密钥的密钥,而密钥的密钥就产生了应该先有哪个密钥这样的问题,所以此时就引入了非对称加密。
非对称加密有两个密钥,一个公钥一个私钥。但是公钥和私钥的配对过程非常慢,比对称加密要慢的多,其中配对可以通过公钥对名文加密,变为密文;也可以通过私钥对密文加密,变成明文;同时也可以反着用。

(3)引入证书

由于客户端无法确定获得的公钥是不是黑客伪造的,更安全便捷的方法则是在客户端和服务器刚建立连接的时候,服务器给客户端返回一个证书。
这个证书包含网站的身份信息和公钥。这个证书就像我们的身份证,每个人都需要去公安局办一个身份证,在我们使用身份证的时候,例如去酒店、网吧,刷身份证的时候就会检测你的身份证的真伪,我们的浏览器中就缓存有一个类似于公安局一样的地方检测证书的信息。

下一篇文章将引入Tomcat的安装教程以及部署静态页面流程。

HTTP、HTTPS协议以及抓包工具相关推荐

  1. Http协议和抓包工具

    爬虫系列目录 1.HTTP协议和抓包工具 文章目录 爬虫系列目录 理解Http协议 常见请求头参数 常见响应状态码 Chrome抓包工具的使用 理解Http协议 http: 80 https: 443 ...

  2. HTTP协议和抓包工具Fiddler

    HTTP,Fiddler 1.HTTP是什么 2.HTTP协议与客户端和服务器 3.HTTP协议的报文格式 1.抓包工具 2.HTTP报文格式 1.HTTP请求的报文格式 2.HTTP响应的报文格式 ...

  3. “软件测试工程师”面试复习之《HTTP协议及抓包工具Fiddler》

    供面试复习使用,内容主要来自<HTTP抓包实战 作者:肖佳>和<图解HTTP 作者:日本上野宣> 关于HTTP协议 一.web网页是如何显示出来的? 1.打开浏览器,输入url ...

  4. Fiddler抓包工具保姆级使用教程(超详细)

    超文本传输协议(HTTP)是一个简单的请求-响应协议,其主要是基于TCP来实现的,可以通过Chrome开发者工具或者Wireshark或者Fiddler抓包,以便分析 HTTP 请求/响应的细节,本篇 ...

  5. 为什么用抓包工具看HTTPS包是明文的

    目录 HTTPS 到底是什么 TLS 抓包工具抓包的原理 总结 测试或者开发调试的过程中,经常会进行抓包分析,并且装上抓包工具的证书就能抓取 HTTPS 的数据包并显示.由此就产生了一个疑问,为什么抓 ...

  6. MySQL抓包工具:MySQL Sniffer

    简介 MySQL Sniffer 是一个基于 MySQL 协议的抓包工具,实时抓取 MySQLServer 端的请求,并格式化输出.输出内容包访问括时间.访问用户.来源 IP.访问 Database. ...

  7. MySQL抓包工具:MySQL Sniffer【转】

    本文来自:https://github.com/Qihoo360/mysql-sniffer 简介 MySQL Sniffer 是一个基于 MySQL 协议的抓包工具,实时抓取 MySQLServer ...

  8. mysql抓包_mysql抓包工具

    简介 MySQL Sniffer 是一个基于 MySQL 协议的抓包工具,实时抓取 MySQLServer 端或 Client 端请求,并格式化输出.输出内容包括访问时间.访问用户.来源 IP.访问 ...

  9. vc mysql sniffer_MySQL抓包工具:MySQL Sniffer

    简介 MySQL Sniffer 是一个基于 MySQL 协议的抓包工具,实时抓取 MySQLServer 端的请求,并格式化输出.输出内容包访问括时间.访问用户.来源 IP.访问 Database. ...

最新文章

  1. c语言变量在头文件定义变量吗,在头文件C中声明变量
  2. Django中的常用命令
  3. 【linux系统】maven安装
  4. linux 内核日志等级,Linux系统中日志级别详情
  5. 中国程序员 VS 美国程序员,差距就在这五点
  6. 数据结构(复习)--------关于平衡二叉树(转载)
  7. javascript函数参数的传递问题
  8. 使用pip将Python软件包从本地文件系统文件夹安装到virtualenv
  9. 【安卓9】数据库升级
  10. jQuery获取屏幕宽度和高度
  11. JS调用google DEMO朗读
  12. java猜拳_java实现猜拳小游戏
  13. 一个人九月份开始考北邮的经验
  14. Pseudo Inverse 伪逆
  15. LCD1602液晶显示屏的入门级应用(一)
  16. NTC热敏电阻基础以及应用和选择(转)
  17. SVN Cleanup的意思
  18. 解密小米生态链:从构建到定义产品
  19. pycharm此应用程序无法启动,因为无法初始化qt平台插件
  20. 计算几何 | 一条迟到的基本定理

热门文章

  1. 温湿度模块 DHT11/12 芯片 协议解析 - 简单易懂协议详解
  2. 基于Labview的信号发生器的设计 [转】
  3. Chrome 85增加隐藏详细网址功能
  4. 手写字体识别用python实现_利用贝叶斯算法实现手写体识别(Python)
  5. Echaer图表 组件传值,页面刷新数据丢失
  6. 安卓开发 phoenix下拉刷新+taurus下拉刷新
  7. 2021年化工自动化控制仪表考试题库及化工自动化控制仪表
  8. 4-20mA电流环设计
  9. wpf 语音通话_WPF+WCF一步一步打造音频聊天室(二):文字聊天和白板共享
  10. python 读入文件列表_Python将文件读入列表