HTTP协议系列(3)---包括WebSocket简单介绍
一、HTTPS
HTTP是超文本传输协议,那HTTPS是什么尼?要明白HTTPS是什么先要明白HTTP的缺点,想一下我们在使用HTTP的时候会有那些缺点尼?
1.通信使用的明文(不加密),内容可能会被窃听;
2.不验证客户端或者服务器的身份,有可能被伪装;
3.无法确定报文的完整性,可能已经被串改;
假如当我们遇到这些情况的时候怎么处理尼?这时候我们就应该这样处理HTTP+加密明文+认证身份+报文完整性;这样就确保了我们访问的安全性和完整性,就是我们所要说的HTTPS,HTTPS就是超文本传输安全协议,通常情况下我们是HTTP+TCP进行客户端和服务器的通信,这是普通的HTTP协议,HTTPS则是先和SSL通信,然后SSL在和TCP通信,所以说不难想象HTTPS就是HTTP+SSL。那接下来我们介绍一下HTTPS是怎么进行安全通信的;

使用对称加密确保了客户端与服务器数据的安全性,这样又来一个问题什么是对称加密,对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。对称加密的一大缺点是密钥的管理与分配,换句话说,如何把密钥发送到需要解密你的消息的人的手里是一个问题。在发送密钥的过程中,密钥有很大的风险会被黑客们拦截。现实中通常的做法是将对称加密的密钥进行非对称加密,然后传送给需要它的人。那问题又来了非对称加密是什么?非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人--银行才能对你的消息解密。与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。这样我们好像将问题全部解决了,数据就可以安全的传递了,其实不然这里还有一个问题如何服务器的公钥准确无误的传递给客户端?这样是不是诞生了无穷尽的循环,好在给我们提供了一个决解方案,那就是CA证书,通过它建立我们的信任基点,就可以保证服务器公钥被正确的传递给客户端,然后浏览器可以使用它安全的把对称加密的密钥传递给服务器,之后以此密钥加密需要传递的信息,保证了数据的安全性。可能这里你还有问题,为什么不直接都是非对称加密?原因是非对称加密的计算效率远远不如对称加密,会造成服务器压力过大;这样我们基本就了解清楚HTTPS怎么嘛保证数据安全性的;
二、HTTP认证方式
1.BASIC认证(基本认证)

- public class FirstWebSocketController : ApiController
- {
- public HttpResponseMessage Get()
- {
- if (HttpContext.Current.IsWebSocketRequest)
- {
- HttpContext.Current.AcceptWebSocketRequest(ProcessWSChat);
- }
- return new HttpResponseMessage(HttpStatusCode.SwitchingProtocols);
- }
- private async Task ProcessWSChat(AspNetWebSocketContext arg)
- {
- WebSocket socket = arg.WebSocket;
- while (true)
- {
- ArraySegment<byte> buffer = new ArraySegment<byte>(new byte[]);
- WebSocketReceiveResult result = await socket.ReceiveAsync(buffer, CancellationToken.None);
- if (socket.State == WebSocketState.Open)
- {
- string message = Encoding.UTF8.GetString(buffer.Array, , result.Count);
- string returnMessage = "You send: " + message + ".at" + DateTime.Now.ToLongTimeString();
- buffer = new ArraySegment<byte>(Encoding.UTF8.GetBytes(returnMessage));
- await socket.SendAsync(buffer, WebSocketMessageType.Text, true, CancellationToken.None);
- }
- else
- {
- break;
- }
- }
- }
- }
- <!DOCTYPE html>
- <html>
- <head>
- <meta name="viewport" content="width=device-width" />
- <title>Index</title>
- <script src="~/js/jquery-1.8.3.min.js"></script>
- <script type="text/javascript">
- $(function () {
- var ws;
- $("#btnConnect").click(function () {
- $("#messageSpan").text("Connection...");
- ws = new WebSocket("ws://" + window.location.hostname + ":" + window.location.port + "/api/FirstWebSocket");
- ws.onopen = function () {
- $("#messageSpan").text("Connected!");
- };
- ws.onmessage = function (result) {
- $("#messageSpan").text(result.data);
- };
- ws.onerror = function (error) {
- $("#messageSpan").text(error.data);
- };
- ws.onclose = function () {
- $("#messageSpan").text("Disconnected!");
- };
- });
- $("#btnSend").click(function () {
- if (ws.readyState == WebSocket.OPEN) {
- ws.send($("#txtInput").val());
- }
- else {
- $("messageSpan").text("Connection is Closed!");
- }
- });
- $("#btnDisconnect").click(function () {
- ws.close();
- });
- }
- )
- </script>
- </head>
- <body>
- <div>
- <input type="button" value="Connect" id="btnConnect" />
- <input type="button" value="DisConnect" id="btnDisConnect" />
- <hr />
- <input type="text" id="txtInput" />
- <input type="button" value="Send" id="btnSend" />
- <br />
- <span id="messageSpan" style="color:red;"></span>
- </div>
- </body>
- </html>
HTTP协议系列(3)---包括WebSocket简单介绍的更多相关文章
- WebSocket简单介绍
Java后端WebSocket的Tomcat实现 一.WebSocket简单介绍 随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了.近年来,随着HTML5的诞生,WebSoc ...
- WebSocket简单介绍(1)
HTML5作为下一代WEB标准,拥有许多引人注目的新特性,如Canvas.本地存储.多媒体编程接口.WebSocket等等.今天我们就来看看具有“Web TCP”之称的WebSocket. WebSo ...
- WebSocket简单介绍(WebSocket 实战)(3)
这一节里我们用一个案例来演示怎么使用 WebSocket 构建一个实时的 Web 应用.这是一个简单的实时多人聊天系统,包括客户端和服务端的实现.客户端通过浏览器向聊天服务器发起请求,服务器端解析客户 ...
- WebSocket简单介绍(WebSocket JavaScript 接口)(2)
上一节介绍了 WebSocket 规范,其中主要介绍了 WebSocket 的握手协议.握手协议通常是我们在构建 WebSocket 服务器端的实现和提供浏览器的WebSocket 支持时需要考虑的问 ...
- webSocket 简单介绍
WebSocket :WebSocket协议支持(在受控环境中运行不受信任的代码的)客户端与(选择加入该代码的通信的)远程主机之间进行全双工通信. 简单的说 ...
- Robotium 系列(2) - 简单介绍Monkey和MonkeyRunner
除了Robotium,Android还有其他的自动化测试方法,比如Monkey和MonkeyRunner. 这里就做一个简单的介绍和使用方法. 本文提纲: 1. Android SDK以及SDK中的工 ...
- Docker系列(一):Docker简单介绍
Docker简介: 多语言和框架:支持多语言和框架以及语言框架的扩展机制 多服务:开放的核心服务以及服务的扩展机制 多云和多IaaS技术:支持多种IaaS技术和多云的部署,包括公有云和私有云 Dock ...
- 【多线程系列】AQS CAS简单介绍
一.什么是CAS CAS(Compare And Swap),即比较并交换.是解决多线程并行情况下使用锁造成性能损耗的一种机制,CAS操作包含三个操作数——内存位置(V).预期原值(A)和新值(B). ...
- tcp ip协议笔记(1)——简单介绍
前言 本人记性不佳,看书健忘,以此笔记来记录看书后自己所知所想,已达到加深对tcp ip的理解.本笔记不过我看完书后自己所写的总结,权当是书后复习. 一.为什么会有tcp ip协议 ...
随机推荐
- thinkphp 5.0 模块设计
模块设计 5.0版本对模块的功能做了灵活设计,默认采用多模块的架构,并且支持单一模块设计,所有模块的命名空间均以app作为根命名空间(可配置更改). 目录结构 标准的应用和模块目录结构如下: ├─ap ...
- ural2062 Ambitious Experiment
Ambitious Experiment Time limit: 3.0 secondMemory limit: 128 MB During several decades, scientists f ...
- String类的两种赋值
java.lang包是java的默认引入包,所以我们不需显式地导包. String s1 = new String("字符串");//创建2个字符串对象,堆中一个,字符串常量池中一 ...
- Android Studio:Gradle DSL method not found: 'runProguard()'
Android Studio发布了新的1.0版,更新之后却发现原来在0.8下面正常的项目编译失败了,从报错上来看是卡在gradle上面. Gradle DSL method not found: 'r ...
- [转] SpringJdbc的几种不同的用法
转自:http://vsp.iteye.com/blog/1182887 Spring对jdbc做了良好的封装,本人在学习时做了以下几种方式的尝试 首页先来创建一个dao接口 package com. ...
- Javascript Jquery 中的数组定义与操作_子木玲_新浪博客
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
- android 6.0获取权限
Android版本升到6.0后最坑的就是权限问题,以下是我参考大神一个权限管理工具类,希望对大家有用 PermissionUtils.java import android.Manifest; imp ...
- (简单) POJ 2502 Subway,Dijkstra。
Description You have just moved from a quiet Waterloo neighbourhood to a big, noisy city. Instead of ...
- iOS_init相关信息
第一.initWithNibName这个方法是在controller的类在IB中创建,但是通过Xcode实例化controller的时候用的. 第二.initWithCoder 是一个类在IB中创建但 ...
- c++读取REG_MULTI_SZ类型注册表
First: run RegQueryValueEx to get type and necessary memory size: Single byte code: DWORD type, size ...