HTTP和HTTPS

目录

前言

HTTP

HTTP协议格式

 URL

方法

GET

POST

面试题:GET和POST的区别 

HTTP请求

认识请求“报头”(header)

Host

Content-Length

Content-Type

User-Agent

Referer

Cookie

认识请求“正文”(body)

HTTP响应

状态码

200

404

403

500

504

302

认识响应“报头”header

构造HTTP请求

通过form表单构造HTTP请求

form发送GET请求

form发送POST请求

通过ajax构造HTTP请求

发送GET请求

发送POST请求

HTTPS

加密

对称加密

非对称加密

HTTPS的工作过程

引入对称加密

引入非对称加密

引入证书


前言

上篇博客我们结束了前端的学习,接下来就要进行后端的学习,后端是最复杂也最难理解的一块部分!

HTTP

HTTP是一种应用非常广泛的应用层协议

HTTP协议格式

使用抓包工具来捕获请求交互的详细情况

抓包工具是个特殊的软件,相当于一个“代理程序”,浏览器给服务器发的请求就会经过这个代理程序,进一步的就能分析请求和响应的结果如何 

0ebe2cefc77c42b2a8bc40d4cc3d2599.jpeg3406f4d06a19422cbe56e240cc59447a.jpeg

请求的完整格式: 

首行

60e8fa7aff8e493e9165dacafd3255bb.jpeg

请求头header

7d53540612894f2fa109e9080ddb6494.jpeg

空行

        一个HTTP请求的header可以有若干个,就使用空行,作为header的结束标记,类似于链表的null

正文body 

         有的请求有,有的请求没有

 URL

1、IP地址+端口号

2、带层次的路径

3、查询字符串

URL encode:把原始的字符,转成转义后的字符

URL decode:把转义后的字符还原成原始的字符

方法

HTTP中非常重要的部分,可以把方法理解为这个请求想要做的工作

GET

最常用的HTTP请求方法

1、浏览器地址栏直接输入URL,此时就会触发GET

2、html里面的link,a,img,script也会触发GET请求

3、from表单,html里的from标签,可以构造出GET请求

4、ajax

POST

1、from

2、ajax

POST请求的特点:1、方法叫做POST;2、url通常是没有query string的;3、也是由若干个header,键值对的形式;4、通常有body,post在传递信息给服务器的时候,通常就会把信息放在body中

面试题:GET和POST的区别 

1、GET和POST没有本质区别

使用GET实现的场景,基本都可以用POST代替

使用POST实现的场景,也可以用GET来代替

2、细节上的区别

2.1、GET的语义是“从服务器获取个数据”,POST的语义是“往服务器上提交个数据”

2.2、给服务器传递的数据,GET通常是放在url的query string中,POST通常是放在body中

2.3、GET请求建议实现成“幂等”,POST则一般不要求实现成“幂等”

2.4、在幂等的基础上,GET的请求结果是可以被缓存的,POST则一般不会被缓存

HTTP请求

认识请求“报头”(header)

Host

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

Content-Length

表示body中的数据长度

Content-Type

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

User-Agent

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

Referer

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

在浏览器地址栏里直接输入一个地址,没有referer,直接点收藏夹,也没有referer 

Cookie

是浏览器在本地存储数据(硬盘)的一种机制

29f527792dc54e658dd9b2f48b82b634.jpeg

 浏览器为了安全起见,禁止网页的js访问电脑的硬盘(文件系统),所以提供了特殊的api给网页来用,就可以让网页存储一些简单的数据。

Cookie中存储了一个字符串,这个数据可能是客户端(网页)自行通过JS写入的,也可能来自于服务器(服务器在HTTP相应的header中通过Set-Cookie字段给浏览器返回数据)

使用cookie作为保存数据的手段,只能存一些简单的键值对信息,简单的字符串,比如,可以用cookie存:

        1、上次访问页面的时间

        2、当前页面的访问次数

        3、当前访问页面的身份信息(身份标识,id)

cookie是存在在浏览器的,来源是服务器。cookie都是浏览器访问了bing服务器之后由服务器返回的,在服务器返回的响应报文中,可以在响应header中包含一个/多个Set-Cookie这样的资源,浏览器看到Set-Cookie就会把这样的数据给保存在浏览器本地。当浏览器保存了cookie之后,下次浏览器访问同一个网站,就会把之前本地存储的cookie在通过http请求header中的cookie给带过去。

认识请求“正文”(body)

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

HTTP响应

状态码

状态码表示访问一个页面的结果(是访问成功,还是失败,还是其他的一些情况)

200

表示访问成功

404

表示想要访问服务器的资源在服务器上没有

403

表示访问被拒绝,有的页面通常需要用户具有一定的权限才能访问(登录后才能访问),如果用户没有登陆直接访问,就容易见到403

500

服务器内部错误(服务器代码执行过程中,出异常了)

504

访问超时(服务器请求量很大的时候)

302

重定向(访问一个旧的URL自动转移到新的URL)

1、服务器的地址迁移;2、搜索引擎中的点击跳转

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

认识响应“报头”header

响应报头的基本格式和请求报头的格式基本一致

响应中Content-Type常见取值:

        text/html:body的数据格式html

        text/css:body数据格式是css

        application/JavaScript:body数据格式是JavaScript

        application/json:body数据格式是json

构造HTTP请求

通过form表单构造HTTP请求

form发送GET请求

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>form</title>
</head>
<body>
    <form action="http://www.sogou.com" method="get">
        <input type="text" name="11">
        <input type="text" name="22">
        <input type="submit" value="提交">
    </form>
</body>
</html>

02c413e2231e442b8d44b956f24f6d9d.jpeg

form发送POST请求

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>form</title>
</head>
<body>
    <form action="http://www.sogou.com" method="post">
        <input type="text" name="11">
        <input type="text" name="22">
        <input type="submit" value="提交">
    </form>
</body>
</html>

c0c97896468e4503a66a38f6f0be9c64.jpeg

此处的方法只支持get和post,借助这些标签来给请求构造数据,每个input就对应一个键值对,input的name属性就是键,input里用户的输入内容就是值。如果方法是get,键值对就会出现在url的query string中,如果方法是post,键值对就会放在body中。 

通过ajax构造HTTP请求

使用第三方库,jquery代替原生的api(ajax) 

发送GET请求

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <script>
        $.ajax({
            type:'get',
            url:'http://www.sogou.com',
            body:'http请求的body',
            contentType:'x-www-form-urlencode',
            success:function(body){
                //服务器返回一个正确的响应
                //就会由浏览器调用这个sucess对应的函数,来处理响应
                //参数body就是响应的正文
                console.log("ok");
            },
            error:function(){
                //服务器返回一个错误的响应
                //就会由浏览器调用这个error对应的函数
                console.log("error");
            }
        });
    </script>
</body>
</html>

发送POST请求

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src="http://libs.baidu.com/jquery/2.0.0/jquery.min.js"></script>
    <script>
        $.ajax({
            type:'post',
            url:'http://www.sogou.com',
            body:'http请求的body',
            contentType:'x-www-form-urlencode',
            success:function(body){
                //服务器返回一个正确的响应
                //就会由浏览器调用这个sucess对应的函数,来处理响应
                //参数body就是响应的正文
                console.log("ok");
            },
            error:function(){
                //服务器返回一个错误的响应
                //就会由浏览器调用这个error对应的函数
                console.log("error");
            }
        });
    </script>
</body>
</html>

HTTPS

HTTPS也是一个应用层协议,是在HTTP协议的基础上引入了一个加密层

加密

加密就是把明文(要传输的信息)进行一系列的变换,生成密文

解密就是把密文再进行一系列变换,还原成明文

对称加密

加密和解密使用同一个密钥

非对称加密

加密和解密使用不同的密钥

HTTPS的工作过程

引入对称加密

对称加密其实就是通过同一个“密钥”,把明文加密成密文,并且能把密文解密成明文

引入非对称加密

非对称加密就是为了能安全的传输对称密钥,防止明文传输时,会导致密钥会被黑客拿到

引入证书

为了防止中间人攻击

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值