概况

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. shape- 设置虚线

    <?xml version="1.0" encoding="utf-8"?> <shape xmlns:android="http: ...

  2. Android学习笔记之详细讲解画圆角图片

    package xiaosi.RoundConcer; import android.app.Activity; import android.graphics.Bitmap; import andr ...

  3. 公众平台调整SSL安全策略,请开发者注意升级

    公众平台调整SSL安全策略,请开发者注意升级 近一段时间HTTPS加密协议SSL曝出高危漏洞,可能导致网络中传输的数据被黑客监听,对用户信息.网络账号密码等安全构成威胁.为保证用户信息以及通信安全,微 ...

  4. Windows 下 Sublime Text 默认打开方式问题解决办法

    Sublime Text 2 是很受ACMer喜爱的文本编辑器 但是绿色版删除后无法设置为默认打开方式...而且网上也没有给出明确的解决办法 注册表的解决办法: 删除 HKEY_CURRENT_USE ...

  5. 【AIM Tech Round 4 (Div. 2) B】Rectangles

    [链接]http://codeforces.com/contest/844/problem/B [题意] 也是道计数水题,没什么记录意义 [题解] 枚举每个点的位置在,然后往右往下 枚举和它一样颜色的 ...

  6. js课程 6-15 js简单弹力球如何实现

    js课程 6-15 js简单弹力球如何实现 一.总结 一句话总结:a.通过document的documentElement属性获取可是区域的高: b.通过增值变为负的实现到底部后反弹 1.docume ...

  7. windows 批处理脚本(batch scripting)

    Guide to Windows Batch Scripting DOS 不需对变量事先声明.未声明或未初始化变量是一个空字符串("") 1. 变量赋值 set命令用于变量赋值.s ...

  8. java 文件读写--转载

    读文件 http://www.baeldung.com/java-read-file Java – Read from File 1. Overview In this tutorial we’ll ...

  9. c#下halcon配置

    1.在halcon中写入算子,实现函数过程 比如: read_image(Image,'D:/MyFile/halcon/数字识别/1.jpg') decompose3(Image, ImageR, ...

  10. Day2:数据类型

    一.数字 1.整型(int),无长整型.python3.x,不论多大的数都是int #!/usr/bin/env python # -*- coding:utf-8 -*- # Author:Hiuh ...