目录
1.认识 "状态码" (status code)
1.1 200 OK
![](https://i-blog.csdnimg.cn/blog_migrate/f306d9b58710744de0fc3404589f021d.png)
1.2 404 Not Found
404表示要访问的资源不在
![](https://i-blog.csdnimg.cn/blog_migrate/67e164b0a956f292cba37db69381ca2e.png)
还可以通过前端页面的设计,对404的页面进行设计,如哔哩哔哩的404画面会出现一个漫画提示。
1.3 403 Forbidden
403 表示访问被拒绝. 有的页面通常需要用户具有一定的权限才能访问(登陆后才能访问). 如果用户没有登陆直接访问, 就容易见到 403.
1.4 405 Method Not Allowed
1.5 500 Internal Server Error
1.6 504 Gateway Timeout
1.7 302 Move temporarily
![](https://i-blog.csdnimg.cn/blog_migrate/fdb33149ce66b460a4b2a722025cb483.png)
1.8 418
418虽然在搜狗百科.上没有,但是确实存在于HTTP标准文档中,属于一个彩蛋
2. 状态码总结
2开头,都属于成功 200
3开头,都属于重定向 301 302
4开头,都属于客户端出现错误了.404 403
5开头,都属于服务器出现错误了.500 504
2 HTTP请求的构造
2.1 form 发送 GET 请求
form 的重要参数:
action: 构造的 HTTP 请求的 URL 是什么 .method: 构造的 HTTP 请求的方法是 GET 还是 POST (form 只支持 GET 和 POST).
input 的重要参数:
type: 表示输入框的类型 . text 表示文本 , password 表示密码 , submit 表示提交按钮 .name: 表示构造出的 HTTP 请求的 query string 的 key. query string 的 value 就是输入框的用户输入的内容.value: input 标签的值 . 对于 type 为 submit 类型来说 , value 就对应了按钮上显示的文本 .
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=, initial-scale=1.0">
<title>HTT请求的构造</title>
</head>
<body>
<form action="https://www.baidu.com/" method="GET">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" value="提交">
</form>
</body>
</html>
页面响应效果如下所示
1654167941312
form 代码和 HTTP 请求之间的对应关系:
2.2 form 发送 POST 请求
修改上面的代码, 把 form 的 method 修改为 POST
<form action="https://www.baidu.com/" method="POST">
<input type="text" name="username">
<input type="password" name="password">
<input type="submit" value="提交">
</form>
![](https://i-blog.csdnimg.cn/blog_migrate/52fc6f3d333df2a97c46e92b89b0284b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/84863a1c97889a6e61daf70003307a73.png)
2.3 浏览器记忆
2.4 通过ajax构请求
在 JavaScript 中可以通过 ajax 的方式构造 HTTP 请求。
首先构造出一个HTTP请求,发给服务器.
但是浏览器不确定服务器啥时候才有响应,于是就先不管了,浏览器里面就继续执行其他代码.
等到服务器的响应回来了之后,再由浏览器通知咱们对应的JS代码,以回调函数的方式来处理响应。
在代码中需要引入jquery 方法
1.先在搜索引擎中搜索jquery cdn查询词.
2.在结果中,找-一个合适的cdn的url,例如 http://libs.baidu.com/jqueryui/1.8.22/jquery-ui.min.js
3.打开对应的url,加载出jquery本体,
4.复制占贴内容到本地文件~
ajax构请求代码
<!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="jquery.js"></script>
<script>
$.ajax({
type: 'get',
url: 'https://www.sogou.com/index.html',
success: function(body) {
// success对应一个回调函数
// 这个函数就会在正确获取到HTTP 响应之后,来调用
// "异步”
// 回调函数的参数,就是HTTP响应的body 部分
console.log("获取到的响应数据:" + body);
},
error: function() {
//error也对应-个回调眼熟.
//这个函数会在请求失败之后触发
//"异步"
console.log("获取响应失败");
},
});
</script>
</body>
</html>
看页面响应结果如下,页面响应失败
![](https://i-blog.csdnimg.cn/blog_migrate/2c3532d58db8193488af814074b2b3d4.png)
看抓包结果
从上面两个结果来看,服务器响应的成功的,但是为什么会出错呢。
原因是 浏览器禁止ajax 进行跨域访问,即跨越多个域名、多个服务器。
当前构造的请求是在本地文件,页面中的ajax 请求的URL,域名是www.sogou.com中,所以跨域了。因此当下的ajax请求是无法被处理的。只能配置一个服务器让页面的ajax的地址都是这个服务器的,就可以了。
2.5 通过 Java socket 构造 HTTP 请求
3.HTTPS
3.1 运营商劫持事件
下载一个音乐播放器,未被劫持时,点击下载按钮,就会弹出音乐播放器的下载链接。
![](https://i-blog.csdnimg.cn/blog_migrate/940d82d727124556266c145ddf23cf55.png)
不止运营商可以劫持, 其他的黑客也可以用类似的手段进行劫持, 来窃取用户隐私信息, 或者篡改内容。
之前的HTTP是明文传输,传输的数据,是容易被获取,也容易被篡改。引入HTTPS,对数据加密,也就能更好的保护数据安全。
3.2 加密
4. HTTPS 的工作过程
4.1 对称加密
![](https://i-blog.csdnimg.cn/blog_migrate/718cdd882c8ba88335084979e48b0cf6.png)
客户端和服务器持有同一个密钥。客户端传输的数据(HTTP请求的header和body )都通过这个密钥进行对称加密实际在网络.上传输的是密文。服务器收到密文之后,接下来就可以根据刚才的密钥,来进行解密,拿到明文。
![](https://i-blog.csdnimg.cn/blog_migrate/cc0ce81047a54aa3100f32dbd26b763f.png)
如上所示,显然必须是不同客户端用不同密钥才行,如果各个客户端都是同一个密钥,这个密钥就太容易被黑客拿到了. (黑客只要自己启动-个客户端.)
既然需要是不同的密钥,就需要让服务器能够记录,不同的客户端的密钥都是什么。而且得让客户端和服务器之间能够传递这个密钥。
因为需要不同的客户端有不同的密钥,要么是客户端主动生成一个密钥, 告诉服务器,要么是服务器生成一个密钥告诉客户端,需要把这个密钥,通过网络进行传递的。
![](https://i-blog.csdnimg.cn/blog_migrate/6f288d3938077d33e2ba43fca0b713e2.png)
上图所示是假设客户端生成的密钥,客户端就需要把密钥通过网络告诉服务器,客户端生成了密钥88888,客户端就得告诉服务器,咱们的密钥是888888。
但是设备可能早就被黑客入侵了,密钥是啥,如果明文传输,也就很容易被黑客拿到了。如果黑客知道了你的密钥,后面咋加密,都是形同虚设了。
经过.上述讨论,就明确了,使用对称加密,最大的问题,在于说密钥得能够传递过去。如果明文传递,是不行的,必须针对这个密钥再进行加密,这里解决问题的关键,就是需要引入非对称加密了。
4.2 非对称加密
私钥,就是只有自己才知道。
这样就可以使用公钥来加密使用私钥来解密,或者使用私钥加密,使用公钥解密。
直观上理解公钥私钥:
很多小区,单元门口,有一个“"信箱",你有一把钥匙, 和很多把锁头。你把这些锁头发给送信员。
每个送信员都可以凭这个锁头,把信锁到你的信箱里,只有你自己持有着这把钥匙,能够开箱,拿出信
此处锁头,就相当于公钥,你自己手里的钥匙,就是私钥。
![](https://i-blog.csdnimg.cn/blog_migrate/37db6e248ea3a4e25a6a4c33a564475b.png)
在上图中,服务器自己持有私钥.客户端持有公钥.黑客可以拿到公钥,但是拿不到私钥。
客户端生成了对称密钥,就可以基于刚才的公钥,对对称密钥进行加密。
如果黑客拿到了这个密文,那么此时由于黑客没有私钥,是不能进行解密的,也就不知道对称密钥是什么。
4.3 引入证书
在没有引入证书时,可能存在公钥、密钥被替换的风险,如下所示:
如上所示,虽然客户端和服务器都拿到了密钥密文,但是也被黑客劫持了,以后的信息交互也会被泄露出去。
因此需要工信机构给一个证书来辨别,如下所示:
引入一个第三方公信机构,来证明这个公钥是一个合法的公钥
因为咱们是信任这个公信机构的(就像咱们信任jc蜀黍-样), 公信机构说这个公钥ok,我们就可以认为这个公钥可信!!
5.总结
第一组 ( 非对称加密 ) : 用于校验证书是否被篡改。 服务器持有私钥 ( 私钥在注册证书时获得 ), 客户端持有公钥( 操作系统包含了可信任的 CA 认证机构有哪些 , 同时持有对应的公钥 ). 服务器使用这个私钥对证书的签名进行加密.。 客户端通过这个公钥解密获取到证书的签名 , 从而校验证书内容是否是篡改过。第二组 ( 非对称加密 ): 用于协商生成对称加密的密钥 . 服务器生成这组私钥 - 公钥对 , 然后通过证书把公钥传递给客户端.。 然后客户端用这个公钥给生成的对称加密的密钥加密 , 传输给服务器 , 服务器通过私钥解密获取到对称加密密钥。第三组 ( 对称加密 ): 客户端和服务器后续传输的数据都通过这个对称密钥加密解密 .。其实一切的关键都是围绕这个对称加密的密钥。其他的机制都是辅助这个密钥工作的。
注意: