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协议 ...
随机推荐
- Cocos2d-x V2.x -- 开发进阶和高级实例教程(一) 转
第一章 如何在多平台新建Cocos2d-x项目 yangyong2014-06-25 15:04:44848 次阅读 原文链接: http://cn.cocos2d-x.org/tutorial/ ...
- dom操作js
1.getElementById()//ie8下不区分大小写 getElementsByName()//name属性相比于Id可以不唯一,且其只在表单.表单元素.img .iframe中有用,返回一个 ...
- selenium firefox
https://github.com/SeleniumHQ/selenium/blob/master/java/CHANGELOG https://github.com/mozilla/geckodr ...
- springMVC源码下载地址
https://github.com/spring-projects/spring-framework/tags可以选择需要的版本进行下载.
- Quick Cocos2dx 与 EnterFrame事件
利用EnterFrame做出行走的效果,效果图如下: 具体操作: 1 给self多加一个bg1用作与bg无限循环换位 2 在AnotherScene:onEnter方法里面新增onEnterFrame ...
- openstack controller ha测试环境搭建记录(十一)——配置neutron(网络节点)
在网络节点配置内核参数:vi /etc/sysctl.confnet.ipv4.ip_forward=1net.ipv4.conf.all.rp_filter=0net.ipv4.conf.defau ...
- [iOS] 响应式编程开发-ReactiveCocoa(二)
RAC实现图片下载功能 在实现异步RAC下载图片的过程中,需要注意以下几点: • 通过 NSURLConnection 对象的 +(RACSignal *)rac_sendAsynchronousRe ...
- NMEA协议 上位机 C# (转)
源:NMEA协议 上位机 c# 前些时间写做了两款用NMEA协议的上位机,在这里做一个总结和记录.和大家分享,也为了以后不会忘记. NMEA协议总体来说,相对简单,是气象上比较成熟的协议. 主要有以下 ...
- 51nod1119(除法取模)
题目链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1119 题意:中文题诶- 思路:这题数据比较大直接暴力肯定是不 ...
- Section 1.1
Your Ride Is Here /* PROG:ride LANG:C++ */ #include <iostream> #include <cstdio> #includ ...