目录
前言
因为在之前的学习中有点搞不明白服务器和客户端之间是怎么样进行沟通的,
所以就到网上去找了些资料,然后就打算接http和https来作为今天的一个主题。
http是一种协议(超文本传输协议)是一个客户端和服务端请求和应答的标准(TCP)
https则是http的一个安全协议(安全超文本传输协议),即HTTP+SSL层
HTTPS为什么会出现?
HTTP协议以明文方式发生内容,不提供任何方式的数据加密,当web浏览器和网站服务之间的传输报文被攻击者截取,就可以读懂其中的信息,因此HTTP协议不适合传输一些敏感信息。如:银行卡号、密码等支付信息。
就像下面的这个一样,非常非常的不安全
下面一个就是qq的一个登陆页面,就是通过https协议来进行的,大概就是这样
为了解决HTTP协议的这一缺陷,就诞生了HTTPS协议:安全套接字层超文本传输协议HTTPS,通过在HTTP的基础上加入SSL协议,保证数据传输的安全。SSL协议依靠证书来验证服务器的身份,并为Web浏览器和服务器之间的通信加密。
嘛,就是做一个安全保障,毕竟谁都不想自己的重要信息泄露嘛
HTTP和HTTPS的区别
- HTTP是超文本传输协议,信息是明文传输,HTTPS是具有安全性的SSL加密传输协议
- HTTPS协议需要ca申请证书,一般免费证书少,因而需要一定费用。
- HTTP和HTTPS使用的是完全不同的连接方式,用的端口也不一样。前者是80,后者是443。
HTTP的格式
嘛,因为是为了之前的知识而去整理的,所以我会参照之前所学的内容来举例,
先简单了解一下HTTP的运行原理
做过项目的也都清楚:
客户端发送一个请求(request)给服务器,
服务器在接收到这个请求后将生成一个响应(response)返回给客户端
可是说到上面,我肯定也是知道的,可我不知道的是结构。
所以:
Request格式
HTTP请求行
(请求)头
空行
可选的消息体
实列:
GET / HTTP/1.1
Host: gpcuster.cnblogs.com
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.10) Gecko/2009042316 Firefox/3.0.10
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: en-us,en;q=0.5
Accept-Encoding: gzip,deflate
Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7
Keep-Alive: 300
Connection: keep-alive
If-Modified-Since: Mon, 25 May 2009 03:19:18 GMT
所以我也就找了一下对应的,下面的就是一般的信息。比如请求的方式为:post,状态码为200,端口号为8080;
这个下面也就是Request的头部部分。
Response格式
HTTP状态行
(应答)头
空行
可选的消息体
实例:
HTTP/1.1 200 OK
Cache-Control: private, max-age=30
Content-Type: text/html; charset=utf-8
Content-Encoding: gzip
Expires: Mon, 25 May 2009 03:20:33 GMT
Last-Modified: Mon, 25 May 2009 03:20:03 GMT
Vary: Accept-Encoding
Server: Microsoft-IIS/7.0
X-AspNet-Version: 2.0.50727
X-Powered-By: ASP.NET
Date: Mon, 25 May 2009 03:20:02 GMT
Content-Length: 12173
也就是服务器给我们的反馈,以及一些其他的请求内容。
就是我们在进行一个跨域处理的时候也就是进行一个请求头的一个处理
有了处理过后 我们才能实现跨域调用。
下面就是我们之前用axios后,服务器给我返的一个数组,相当于之前的json
格式的参考资料
参考资料是全英文的哈。
HTTP和HTTPS的运行原理
HTTP
- User与Server建立连接,单击某个超链接,HTTP的工作开始。
- 连接建立后,User发送一个请求给Server,请求方式的格式为:统一资源标识符(URL)、协议版本号,后边是MIME信息包括请求修饰符,User信息和可能的内容。
- Server接到请求后,给予相应的响应信息,其格式为一个状态行,包括信息的协议版本号、一个成功或错误的代码,后边是MIME信息包括Server信息、实体信息和可能的内容。
- User接收Server返回的信息通过浏览器显示在用户的显示屏上,然后User和Server断开连接。
HTTPS
- Client使用HTTPS的URL访问Web服务器,要求与Web服务器建立SSL连接。
- Web服务器收到客户端请求后,会将网站的证书信息(证书中包含公钥)传送一份给客户端。
- 客户端的浏览器与Web服务器开始协商SSL连接的安全等级,也就是信息加密的等级。
- 客户端的浏览器根据双方同意的安全等级,建立会话密钥,然后利用网站的公钥将会话密钥加密,并传送给网站。
- Web服务器利用自己的私钥解密出会话密钥。
- Web服务器利用会话密钥加密与客户端之间的通信。
用java代码来理解
在eclipse中我们可以通过代码去简单的去测试一下
如何去访问服务器,
package com.liwangwang.demo;
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSocketFactory;
import javax.net.ssl.TrustManager;
public class demo {
//http
public static String httpRequest(String requestUrl,String requestMethod,String outputStr){
StringBuffer buffer=null;
try{
URL url=new URL(requestUrl);
HttpURLConnection conn=(HttpURLConnection)url.openConnection();
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setRequestMethod(requestMethod);
conn.connect();
//往服务器端写内容 也就是发起http请求需要带的参数
if(null!=outputStr){
OutputStream os=conn.getOutputStream();
os.write(outputStr.getBytes("utf-8"));
os.close();
}
//读取服务器端返回的内容
InputStream is=conn.getInputStream();
InputStreamReader isr=new InputStreamReader(is,"utf-8");
BufferedReader br=new BufferedReader(isr);
buffer=new StringBuffer();
String line=null;
while((line=br.readLine())!=null){
buffer.append(line);
}
}catch(Exception e){
e.printStackTrace();
}
return buffer.toString();
}
}
上面是用http 有一个可以去访问服务器的
public static void main(String[] args){
String s=httpRequest("https://www.baidu.com","GET",null);
System.out.println(s);
}
结果
具体体现可以在:如何在java中发起http和https请求参考。
SSL协议
SSL的简介: SSL是Netscape公司所提出的安全保密协议,在浏览器(如Internet Explorer、Netscape Navigator)和Web服务器(如Netscape的Netscape Enterprise Server、ColdFusion Server等等)之间构造安全通道来进行数据传输,SSL运行在TCP/IP层之上、应用层之下,为应用程序提供加密数据通道,它采用了RC4、MD5 以及RSA等加密算法,使用40 位的密钥,适用于商业信息的加密。同时,Netscape公司相应开发了HTTPS协议并内置于其浏览器中,HTTPS实际上就是SSL over HTTP,它使用默认端口443,而不是像HTTP那样使用端口80来和TCP/IP进行通信。HTTPS协议使用SSL在发送方把原始数据进行加密,然 后在接受方进行解密,加密和解密需要发送方和接受方通过交换共知的密钥来实现,因此,所传送的数据不容易被网络黑客截获和解密。 然而,加密和解密过程需要耗费系统大量的开销,严重降低机器的性能,相关测试数据表明使用HTTPS协议传输数据的工作效率只有使用HTTP协议传输的十 分之一。
假如为了安全保密,将一个网站所有的Web应用都启用SSL技术来加密,并使用HTTPS协议进行传输,那么该网站的性能和效率将会大大降低,而 且没有这个必要,因为一般来说并不是所有数据都要求那么高的安全保密级别,所以,我们只需对那些涉及机密数据的交互处理使用HTTPS协议,这样就做到鱼 与熊掌兼得。总之不需要用https 的地方,就尽量不要用。
总结
这是我在网上所学到的一些小知识,然后进行了一个整合,虽然还是有点迷,但是如今我的一些迷惑也随之而解开了一些,所以说是太好了。
嗯,
Thanks♪(・ω・)ノ希望对大家有所帮助