概况

HTTP是hypertext transfer protocol(超文本传输协议)的简写。它是TCP/IP协议的一个应用层协议,用于定义WEB浏览器与WEBserver之间交换数据的过程。

HTTP是一个属于应用层的面向对象的协议,因为其简捷、高速的方式,适用于分布式超媒体信息系统。它于1990年提出。经过几年的使用与发展。得到不断地完好和扩展。眼下在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,并且HTTP-NG(Next Generation of HTTP)的建议已经提出。

主要特点

HTTP协议的主要特点可概括例如以下:

  • 1.支持客户/server模式。

  • 2.简单高速:客户向server请求服务时,仅仅需传送请求方法和路径

    请求方法经常使用的有GET、HEAD、POST。每种方法规定了客户与server联系的类型不同。因为HTTP协议简单。使得HTTPserver的程序规模小,因而通信速度非常快。

  • 3.灵活:HTTP同意传输随意类型的数据对象

    正在传输的类型由Content-Type加以标记

  • 4.无连接:无连接的含义是限制每次连接仅仅处理一个请求。server处理完客户的请求,并收到客户的应答后,即断开连接。採用这样的方式能够节省传输时间。

  • 5.无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着假设兴许处理须要前面的信息。则它必须重传,这样可能导致每次连接传送的数据量增大。

    还有一方面,在server不须要先前信息时它的应答就较快


HTTP协议

HTTP协议具体解释之URL

http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议。常基于TCP的连接方式,HTTP1.1版本号中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。

HTTP URL (URL是一种特殊类型的URI,包括了用于查找某个资源的足够的信息)的格式例如以下:


http://host[":"port][abs_path]

http表示要通过HTTP协议来定位网络资源;

host表示合法的Internet主机域名或者IP地址;

port指定一个端口号。为空则使用缺省端口80;

abs_path指定请求资源的URI。

假设URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自己主动帮我们完毕。

举例:

eg: http:192.168.0.1:8080/index.jsp

HTTP协议具体解释之请求

http请求由三部分组成,各自是:请求行、消息报头、请求正文

请求行

请求行以一个方法符号开头,以空格分开。后面跟着请求的URI和协议的版本号,格式例如以下:

Method Request-URI HTTP-Version CRLF

当中 :

Method表示请求方法。

Request-URI是一个统一资源标识符;

HTTP-Version表示请求的HTTP协议版本号。

CRLF表示回车和换行(除了作为结尾的CRLF外,不同意出现单独的CR或LF字符)。

请求方法(全部方法全为大写):

  • GET    请求获取Request-URI所标识的资源
  • POST   在Request-URI所标识的资源后附加新的数据
  • HEAD   请求获取由Request-URI所标识的资源的响应消息报头
  • PUT    请求server存储一个资源。并用Request-URI作为其标识
  • DELETE  请求server删除Request-URI所标识的资源
  • TRACE   请求server回送收到的请求信息,主要用于測试或诊断
  • CONNECT  保留将来使用
  • OPTIONS  请求查询server的性能,或者查询与资源相关的选项和需求

应用举例:

GET方法:在浏览器的地址栏中输入网址的方式訪问网页时,浏览器採用GET方法向server获取资源。eg:GET /form.html HTTP/1.1 (CRLF)

POST方法:要求被请求server接受附在请求后面的数据,经常使用于提交表单。

eg:POST /reg.jsp HTTP/ (CRLF)

Accept:image/gif,image/x-xbit,… (CRLF)



HOST:XXX.XX.XX (CRLF)

Content-Length:22 (CRLF)

Connection:Keep-Alive (CRLF)

Cache-Control:no-cache (CRLF)

(CRLF) //该CRLF表示消息报头已经结束。在此之前为消息报头

user=username&pwd=password//此行下面为提交的数据

HEAD方法与GET方法差点儿是一样的。对于HEAD请求的回应部分来说。它的HTTP头部中包括的信息与通过GET请求所得到的信息是同样的。利用这种方法,不必传输整个资源内容。就能够得到Request-URI所标识的资源的信息。

该方法经常使用于測试超链接的有效性,能否够訪问。以及近期是否更新


请求报头后述

请求正文


HTTP协议具体解释之响应

在接收和解释请求消息后。server返回一个HTTP响应消息。

HTTP响应也是由三个部分组成,各自是:状态行、消息报头、响应正文

状态行格式例如以下


HTTP-Version Status-Code Reason-Phrase CRLF

当中:

HTTP-Version表示serverHTTP协议的版本号;

Status-Code表示server发回的响应状态代码;

Reason-Phrase表示状态代码的文本描写叙述。

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

  • 1xx:信息响应类,表示接收到请求并且继续处理
  • 2xx:处理成功响应类,表示动作被成功接收、理解和接受
  • 3xx:重定向响应类,为了完毕指定的动作。必须接受进一步处理
  • 4xx:client错误。客户请求包括语法错误或者是不能正确运行
  • 5xx:服务端错误,server不能正确运行一个正确的请求

常见状态代码、状态描写叙述、说明:

  • 200 OK //client请求成功
  • 400 Bad Request //client请求有语法错误,不能被server所理解
  • 401 Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
  • 403 Forbidden //server收到请求,可是拒绝提供服务
  • 404 Not Found //请求资源不存在,eg:输入了错误的URL
  • 500 Internal Server Error //server发生不可预期的错误
  • 503 Server Unavailable //server当前不能处理client的请求,一段时间后可能恢复正常

    eg:HTTP/1.1 200 OK (CRLF)

响应报头后述

响应正文就是server返回的资源的内容

HTTP协议具体解释之消息报头

HTTP消息由client到server的请求和server到client的响应组成。请求消息和响应消息都是由開始行(对于请求消息,開始行就是请求行,对于响应消息。開始行就是状态行),消息报头(可选),空行(仅仅有CRLF的行),消息正文(可选)组成。

HTTP消息报头包括普通报头、请求报头、响应报头、实体报头。

每个报头域都是由名字+“:”+空格+值 组成,消息报头域的名字是大写和小写无关的。

普通报头

在普通报头中,有少数报头域用于全部的请求和响应消息,但并不用于被传输的实体。仅仅用于传输的消息。

eg:Cache-Control 用于指定缓存指令,缓存指令是单向的(响应中出现的缓存指令在请求中未必会出现),且是独立的(一个消息的缓存指令不会影响还有一个消息处理的缓存机制)。HTTP1.0使用的相似的报头域为Pragma。

  • 请求时的缓存指令包括:no-cache(用于指示请求或响应消息不能缓存)、no-store、max-age、max-stale、min-fresh、only-if-cached;
  • 响应时的缓存指令包括:public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage.

eg:为了指示IE浏览器(client)不要缓存页面,server端的JSP程序能够编写例如以下:

response.setHeader("Cache-Control","no-cache");
//response.setHeader("Pragma","no-cache");作用相当于上述代码,通常两者//合用

这句代码将在发送的响应消息中设置普通报头域:Cache-Control:no-cache

Date普通报头域表示消息产生的日期和时间

Connection普通报头域同意发送指定连接的选项。

比如指定连接是连续,或者指定“close”选项,通知server,在响应完毕后。关闭连接.

请求报头

请求报头同意client向server端传递请求的附加信息以及client自身的信息。

经常使用的请求报头:

  • Accept请求报头域用于指定client接受哪些类型的信息。

    举例:

    Accept:image/gif,表明client希望接受GIF图象格式的资源。

    Accept:text/html。表明client希望接受html文本。

  • Accept-Charset请求报头域用于指定client接受的字符集

    举例:Accept-Charset:iso-8859-1,gb2312.

    假设在请求消息中没有设置这个域,缺省是不论什么字符集都能够接受。

  • Accept-Encoding请求报头域相似于Accept。可是它是用于指定可接受的内容编码

    举例:Accept-Encoding:gzip.deflate.

    假设请求消息中没有设置这个域server假定client对各种内容编码都能够接受。

  • Accept-Language请求报头域相似于Accept,可是它是用于指定一种自然语言。

    举例:Accept-Language:zh-cn.

    假设请求消息中没有设置这个报头域,server假定client对各种语言都能够接受。
  • Authorization 请求报头域主要用于证明client有权查看某个资源。当浏览器訪问一个页面时。假设收到server的响应代码为401(未授权),能够发送一个包括Authorization请求报头域的请求,要求server对其进行验证。

  • Host请求报头域主要用于指定被请求资源的Internet主机和端口号。它通常从HTTP URL中提取出来的。发送请求时。该报头域是必需的。

    比方 我们在浏览器中输入:http://www.imooc.com/index.jsp

    浏览器发送的请求消息中,就会包括Host请求报头域。例如以下:Host:www.imooc.com

    此处使用缺省端口号80。若指定了端口号,则变成:Host:www.imooc.com:指定端口号。

  • User-Agent我们上网登陆论坛的时候,往往会看到一些欢迎信息。当中列出了你的操作系统的名称和版本号。你所使用的浏览器的名称和版本号,这往往让非常多人感到非常奇妙,实际上,server应用程序就是从User-Agent这个请求报头域中获取到这些信息。

    User-Agent请求报头域同意client将它的操作系统、浏览器和其它属性告诉server。

    只是。这个报头域没必要的。假设我们自己编写一个浏览器,不使用User-Agent请求报头域。那么server端就无法得知我们的信息了。

请求报头举例:


响应报头

响应报头同意server传递不能放在状态行中的附加响应信息,以及关于server的信息和对Request-URI所标识的资源进行下一步訪问的信息。

经常使用的响应报头

Location响应报头域用于重定向接受者到一个新的位置。Location响应报头域经常使用在更换域名的时候。

Server响应报头域包括了server用来处理请求的软件信息。与User-Agent请求报头域是相相应的。下面是Server响应报头域的一个样例:Server:nginx

WWW-Authenticate响应报头域必须被包括在401(未授权的)响应消息中,client收到401响应消息时候,并发送Authorization报头域请求server对其进行验证时,服务端响应报头就包括该报头域。

eg:WWW-Authenticate:Basic realm=”Basic Auth Test!” //能够看出server对请求资源採用的是基本验证机制。

实体报头

请求和响应消息都能够传送一个实体。一个实体由实体报头域和实体正文组成。但并非说实体报头域和实体正文要在一起发送。能够仅仅发送实体报头域。实体报头定义了关于实体正文(eg:有无实体正文)和请求所标识的资源的元信息。

经常使用的实体报头:

  • Content-Encoding实体报头域被用作媒体类型的修饰符,它的值指示了已经被应用到实体正文的附加内容的编码,因而要获得Content-Type报头域中所引用的媒体类型,必须採用相应的解码机制。

    ContentEncoding这样用于记录文档的压缩方法,eg:Content-Encoding:gzip

  • Content-Language实体报头域描写叙述了资源所用的自然语言。没有设置该域则觉得实体内容将提供给全部的语言阅读

    者。eg:Content-Language:da
  • Content-Length实体报头域用于指明实体正文的长度,以字节方式存储的十进制数字来表示。
  • Content-Type实体报头域用语指明发送给接收者的实体正文的媒体类型。eg:Content-Type:text/html;charset=ISO-8859-1 Content-Type:text/html;charset=GB2312
  • Last-Modified实体报头域用于指示资源的最后改动日期和时间。

  • Expires实体报头域给出响应过期的日期和时间。为了让代理server或浏览器在一段时间以后更新缓存中(再次訪问曾訪问过的页面时。直接从缓存中载入,缩短响应时间和减少server负载)的页面。我们能够使用Expires实体报头域指定页面过期的时间。eg:Expires:Thu,15 Sep 2006 16:23:12 GMT

    HTTP1.1的client和缓存必须将其它非法的日期格式(包括0)看作已经过期。eg:为了让浏览器不要缓存页面,我们也能够利用Expires实体报头域,设置为0,jsp中程序例如以下:response.setDateHeader(“Expires”,”0”);

工具类HttpUtil.java

import java.io.IOException;
import java.io.UnsupportedEncodingException; import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.ClientProtocolException;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.util.EntityUtils; public class HttpUtil {
public static String httpGet(String httpUrl) {
String result = "";
DefaultHttpClient httpclient = new DefaultHttpClient();// 创建httpclient
HttpGet httpget = new HttpGet(httpUrl);
HttpResponse response = null;
HttpParams params = httpclient.getParams(); // 计算网络超时用
HttpConnectionParams.setConnectionTimeout(params, 15 * 1000);
HttpConnectionParams.setSoTimeout(params, 20 * 1000);
try {
response = httpclient.execute(httpget);
HttpEntity entity = response.getEntity();// 得到http的内容
response.getStatusLine().getStatusCode();// 得到http的状态返回值
result = EntityUtils.toString(response.getEntity());// 得到具体的返回值。通常是xml文件
entity.consumeContent();// 假设entity不为空,则释放内存空间
httpclient.getCookieStore();// 得到cookis
httpclient.getConnectionManager().shutdown();// 关闭httpclient
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return result;
} public static String httpPost(String httpUrl, String data) {
String result = "";
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(httpUrl);
// httpclient.setCookieStore(DataDefine.mCookieStore);
HttpParams params = httpclient.getParams(); // 计算网络超时用
HttpConnectionParams.setConnectionTimeout(params, 15 * 1000);
HttpConnectionParams.setSoTimeout(params, 20 * 1000);
httpPost.setHeader("Content-Type", "text/xml");
StringEntity httpPostEntity;
try {
httpPostEntity = new StringEntity(data, "UTF-8");
httpPost.setEntity(httpPostEntity);
HttpResponse response = httpclient.execute(httpPost);
HttpEntity entity = response.getEntity();// 得到http的内容
response.getStatusLine().getStatusCode();// 得到http的状态返回值
result = EntityUtils.toString(response.getEntity());// 得到具体的返回值。通常是xml文件
entity.consumeContent();// 假设entity不为空,则释放内存空间
httpclient.getCookieStore();// 得到cookis
httpclient.getConnectionManager().shutdown();// 关闭httpclient
} catch (Exception e) {
e.printStackTrace();
} // base64是经过编码的字符串,能够理解为字符串 // StringEntity
try {
httpPostEntity = new StringEntity("UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}

HTTPS协议

HTTPS协议概述

HTTPS(Hypertext Transfer Protocol over Secure Socket Layer。基于SSL的HTTP协议)使用了HTTP协议。但HTTPS使用不同于HTTP协议的默认端口及一个加密、身份验证层(HTTP与TCP之间)。这个协议的最初研发由网景公司进行,提供了身份验证与加密通信方法,如今它被广泛用于互联网上安全敏感的通信。HTTPS是一个安全通信通道,用于在客户计算机和server之间交换信息。它使用安全套接字层(SSL)进行信息交换,简单来说它是HTTP的安全版。

它是由Netscape开发并内置于其浏览器中,用于对数据进行压缩和解压操作。并返回网络上传送回的结果。

HTTPS实际上应用了Netscape的安全全套接字层(SSL)作为HTTP应用层的子层。(HTTPS使用端口443。而不是象HTTP那样使用端口80来和TCP/IP进行通信。)SSL使用40 位关键字作为RC4流加密算法,这对于商业信息的加密是合适的。HTTPS和SSL支持使用X。509数字认证。假设须要的话用户能够确认发送者是谁。

使用HTTPS步骤

client在使用HTTPS方式与Webserver通信时有下面几个步骤。

(1)客户使用https的URL訪问Webserver,要求与Webserver建立SSL连接。

(2)Webserver收到client请求后。会将站点的证书信息(证书中包括公钥)传送一份给client。

(3)client的浏览器与Webserver開始协商SSL连接的安全等级,也就是信息加密的等级。

(4)client的浏览器依据两方同意的安全等级,建立会话密钥,然后利用站点的公钥将会话密钥加密,并传送给站点。

(5)Webserver利用自己的私钥解密出会话密钥。

(6)Webserver利用会话密钥加密与client之间的通信。

工具类HttpsUtils.java

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.HttpURLConnection;
import java.net.URL; import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.SSLContext;
import javax.net.ssl.TrustManager; public class HttpsUtil {
static TrustManager[] xtmArray = new MytmArray[] { new MytmArray() };// 创建信任规则列表
private final static int CONNENT_TIMEOUT = 15000;
private final static int READ_TIMEOUT = 15000;
static HostnameVerifier DO_NOT_VERIFY = new HostnameVerifier() {
public boolean verify(String hostname, SSLSession session) {
return true;
}
}; /**
* * 信任全部主机-对于不论什么证书都不做检查 Create a trust manager that does not validate *
* certificate chains, Android 採用X509的证书信息机制,Install the all-trusting trust
* * manager
*/
private static void trustAllHosts() {
try {
SSLContext sc = SSLContext.getInstance("TLS");
sc.init(null, xtmArray, new java.security.SecureRandom());
HttpsURLConnection.setDefaultSSLSocketFactory(sc.getSocketFactory()); // 不进行主机名确认,对全部主机
HttpsURLConnection.setDefaultHostnameVerifier(DO_NOT_VERIFY);
} catch (Exception e) {
e.printStackTrace();
}
} // https get方法,返回值是https请求。服务端返回的数据string类型,数据进行xml解析
public static String HttpsGet(String httpsurl) {
return HttpsPost(httpsurl, null);
} /**
* https post方法。返回值是https请求,服务端返回的数据string类型,数据进行xml解析
*/
public static String HttpsPost(String httpsurl, String data) {
String result = null;
HttpURLConnection http = null;
URL url;
try {
url = new URL(httpsurl); // 推断是http请求还是https请求
if (url.getProtocol().toLowerCase().equals("https")) {
trustAllHosts();
http = (HttpsURLConnection) url.openConnection();
((HttpsURLConnection) http).setHostnameVerifier(DO_NOT_VERIFY);// 不进行主机名确认
} else {
http = (HttpURLConnection) url.openConnection();
}
http.setConnectTimeout(CONNENT_TIMEOUT);// 设置超时时间
http.setReadTimeout(READ_TIMEOUT);
if (data == null) {
http.setRequestMethod("GET");// 设置请求类型
http.setDoInput(true);
// http.setRequestProperty("Content-Type", "text/xml");
if (AppSession.mCookieStore != null)
http.setRequestProperty("Cookie", AppSession.mCookieStore);
} else {
http.setRequestMethod("POST");// 设置请求类型为post
http.setDoInput(true);
http.setDoOutput(true);
// http.setRequestProperty("Content-Type", "text/xml");
if (AppSession.mCookieStore != null && AppSession.mCookieStore.trim().length() > 0)
http.setRequestProperty("Cookie", AppSession.mCookieStore);
DataOutputStream out = new DataOutputStream(http.getOutputStream());
out.writeBytes(data);
out.flush();
out.close();
} // 设置http返回状态200(ok)还是403
AppSession.httpsResponseCode = http.getResponseCode();
BufferedReader in = null;
if (AppSession.httpsResponseCode == 200) {
getCookie(http);
in = new BufferedReader(new InputStreamReader(http.getInputStream()));
} else
in = new BufferedReader(new InputStreamReader(http.getErrorStream()));
String temp = in.readLine();
while (temp != null) {
if (result != null)
result += temp;
else
result = temp;
temp = in.readLine();
}
in.close();
http.disconnect();
} catch (Exception e) {
e.printStackTrace();
}
return result;
} /** * 得到cookie * */
private static void getCookie(HttpURLConnection http) {
String cookieVal = null;
String key = null;
AppSession.mCookieStore = "";
for (int i = 1; (key = http.getHeaderFieldKey(i)) != null; i++) {
if (key.equalsIgnoreCase("set-cookie")) {
cookieVal = http.getHeaderField(i);
cookieVal = cookieVal.substring(0, cookieVal.indexOf(";"));
AppSession.mCookieStore = AppSession.mCookieStore + cookieVal + ";";
}
}
}
}

总的来说。http效率更高,https安全性更高。

两者的差别

  • https协议须要到ca申请证书。一般免费证书非常少,须要交费。
  • http是超文本传输协议,信息是明文传输。https 则是具有安全性的ssl加密传输协议
  • http和https使用的是全然不同的连接方式用的端口也不一样:前者是80,后者是443。
  • http的连接非常easy,是无状态的 ,HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议 ,要比http协议安全。

HTTPS解决的问题:

1、信任主机的问题

採用https 的server 必须从CA 申请一个用于证明server用途类型的证书。

该证书仅仅实用于相应的server 的时候,客户度才信任此主机。所以眼下全部的银行系统站点。关键部分应用都是https 的。 客户通过信任该证书。从而信任了该主机。事实上这样做效率非常低,可是银行更側重安全。 这一点对我们没有不论什么意义,我们的server,採用的证书无论自己issue 还是从公众的地方issue。 client都是自己人,所以我们也就肯定信任该server。

2、通讯过程中的数据的泄密和被窜改

1)一般意义上的https。 就是 server 有一个证书

主要目的是保证server 就是他声称的server。

这个跟第一点一样。

服务端和client之间的全部通讯。都是加密的。

具体讲。是client产生一个对称的密钥。通过server 的证书来交换密钥。 一般意义上的握手过程。

加下来全部的信息往来就都是加密的。

第三方即使截获,也没有不论什么意义。因为他没有密钥。当然窜改也就没有什么意义了。

2)少许对client有要求的情况下。会要求client也必须有一个证书。



这里client证书,事实上就相似表示个人信息的时候,除了用户名/密码, 还有一个CA 认证过的身份。

应为个人证书一般来说上别人无法模拟的,全部这样能够更深的确认自己的身份。

眼下少数个人银行的专业版是这样的做法。具体证书可能是拿U盘作为一个备份的载体。 HTTPS 一定是繁琐的。

本来简单的http协议。一个get一个response。因为https 要还密钥和确认加密算法的须要。单握手就须要6/7 个往返。不论什么应用中,过多的round trip 肯定影响性能。

接下来才是具体的http协议,每一次响应或者请求。 都要求client和服务端对会话的内容做加密/解密。

虽然对称加密/解密效率比較高,可是仍然要消耗过多的CPU,为此有专门的SSL 芯片。 假设CPU 信能比較低的话。肯定会减少性能。从而不能serve 很多其它的请求。

SSL的简单介绍

SSL是Netscape公司所提出的安全保密协议。在浏览器(如Internet Explorer、Netscape Navigator)和Webserver(如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在发送方把原始数据进行加密,然 后在接受方进行解密,加密和解密须要发送方和接受方通过交换共知的密钥来实现,因此,所传送的数据不easy被网络黑客截获和解密。

然而。加密和解密过程须要耗费系统大量的开销,严重减少机器的性能,相关測试数据表明使用HTTPS协议数据传输的工作效率仅仅有使用HTTP协议传输的十 分之中的一个。

假如为了安全保密,将一个站点全部的Web应用都启用SSL技术来加密,并使用HTTPS协议进行传输,那么该站点的性能和效率将会大大减少。并且没有这个必要。因为一般来说并非全部数据都要求那么高的安全保密级别。所以,我们仅仅需对那些涉及机密数据的交互处理使用HTTPS协议,这样就做到鱼与熊掌兼得。总之不须要用https 的地方,就尽量不要用。

參考:http://aresxiong.com/2015/11/30/protocol_http_and_https

HTTP协议和HTTPS协议初探的更多相关文章

  1. http协议和https协议

    内容: 1.http协议介绍 2.https协议介绍 3.http协议和https协议对比 1.http协议介绍 (1)http协议是什么 1 一个传输协议,协议就是双方都遵守的规范. 2 为什么叫超 ...

  2. 1.http 协议和 https 协议的原理

    首先,我们得知道应用层是 OSI 七层网络模型的第七层,不同类型的网络应用有不同的通信规则,因此应用层协议是多种多样的,比如 DNS.FTP.Telnet.SMTP.HTTP. 等协议都是用于解决其各 ...

  3. http协议和https协议的区别

    超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文方式发送内容,不提供任何方式的数据加密,如果攻击者截取了Web浏览器和网站服务器之间的传输报文,就可以直接读懂 ...

  4. HTTP协议和HTTPS协议的那些事

    文章目录 HTTPS VS HTTP HTTPS=HTTP+加密+证书+完整性保护 加密 对称加密 非对称加密 混合加密 证书 完整性保护 HTTPS并不能取代HTTP SSL是把双刃剑 HTTPS的 ...

  5. Http协议和Https协议的安全性问题

    https://www.cnblogs.com/intsmaze/p/6009648.html https://blog.csdn.net/jeffleo/article/details/768630 ...

  6. Bytom BIP-32协议和BIP-44协议

    我们知道HD(分层确定性)钱包,基于 BIP-32:多币种和多帐户钱包,基于 BIP-44:最近比原社区的钱包开发者对比原的BIP-32和BIP-44协议有疑问,所以我今天就专门整理了一下该协议的内容 ...

  7. HTTP协议和SOCKS5协议

    HTTP协议和SOCKS5协议 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们平时上网的时候基本上是离不开浏览器的,尤其是搜索资料的时候,那么这个浏览器是如何工作的呢?用的又是 ...

  8. http协议及http协议和tcp协议的区别

    http是应用层的协议,并且无连接,无状态的协议. http协议的特点: 1.支持c/s模式 2.简单快速:客户端向服务器端传送数据的时候,只需要发送请求方法和路径,请求方法有:post,get,he ...

  9. Java基础之UDP协议和TCP协议简介及简单案例的实现

    写在前面的废话:马上要找工作了,做了一年的.net ,到要找工作了发现没几个大公司招聘.net工程师,真是坑爹呀.哎,java就java吧,咱从头开始学呗,啥也不说了,玩命撸吧,我真可怜啊. 摘要: ...

随机推荐

  1. [Redux-Observable && Unit Testing] Use tests to verify updates to the Redux store (rxjs scheduler)

    In certain situations, you care more about the final state of the redux store than you do about the ...

  2. absolute、relative,toggle()

    測试代码例如以下: <div> <div class="global">不应用样式</div> <div class="glob ...

  3. RecyclerView 展示多种类型Item数据

    一.多Item布局实现(MultipleItem) 如果之前你用过ListView实现过此功能,那么你一定对下面这两个方法并不陌生 @Override public int getItemViewTy ...

  4. MariaDB 安装 (YUM)

    在CentOS 7.0安装MariaDB的数据库,在这里记录下安装过程,以便以后查看. 1. 安装MariaDB 安装命令 yum -y install mariadb mariadb-server ...

  5. Android 内存监测工具

    本文来自http://blog.csdn.net/liuxian13183/ ,引用必须注明出处! 文/幻影浪子 [博主导读]俗话说:工欲善其事必先利其器!我们先来了解下内存监测工具是怎么使用的?为内 ...

  6. windows服务插件利器-新生命组件XAgent使用心得

    1.简单介绍 XAgent为大石头带领下的新生命团队自己开发的一个.Net下的常用的Windows服务管理组件利器,通过在控制台中简单的输入1,2,3,4,5等数字可以实现一步安装.卸载Windows ...

  7. Objective-C - 类的静态常量

    创建头文件(.h), 导出常量: // Constants.h FOUNDATION_EXPORT NSString *const MyFirstConstant; FOUNDATION_EXPORT ...

  8. go package的理解

    golang package是基本的管理单元, 同一个package下面,可以有非常多的不同文件,只要 每个文件的头部    都有 如 "package xxx" 的相同name, ...

  9. ORA-01665 control file is not a standby control file

    ORA-01665错误处理 问题描述: 在备库启动至mount状态时,报如下错误: ORA-01665: control file is not a standby control file 解决办法 ...

  10. (转)oracle 启动监听 报“监听程序不支持服务” 解决

    转自 http://www.51testing.com/html/99/478599-842622.html 今天安装了oracle后,启动监听,报错如下:    启动tnslsnr: 请稍候... ...