] //请求体,只有post有
//具体格式 get请求
GET /books/?sex=man&name=Professional HTTP/1.1 <<--------请求行,请求服务器相应的资源,http协议版本
Host: www.wrox.com <<----请求头,服务器信息
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) <<----请求头,服务器信息
Gecko/20050225 Firefox/1.0.1 <<----请求头,服务器信息
Connection: Keep-Alive <<----请求头,服务器信息
//实际碰到的get请求
//具体格式 post请求
POST / HTTP/1.1 <<--------请求行,http协议版本
Host: www.wrox.com <<----请求头,服务器信息
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6)
Gecko/20050225 Firefox/1.0.1
Content-Type: application/x-www-form-urlencoded
Content-Length: 40
Connection: Keep-Alive
(----此处空一行---就是空行-)
数据部分
//实际碰到的post请求</code></pre>
HTTP响应
//状态行,比如状态码200
//响应头
//空行
[] //响应主体
HTTP/1.1 200 OK
Date: Sat,31 Dec 2005 23:59:59 GMT
Content-Type: text/html;charset=ISO-8859-1
Content-Length: 122
(----此处空一行---就是空行-)
<html>
<head>
<title>Wrox Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>
//实际碰到的响应头
get和post方式比较
1. post比get方式安全,因为get一般是在url后添加一串字符串,用户很容易看到,也很容易解析
2. get通过字符串传值的长度有限制,不同的浏览器对地址的字符限制也有所不同,一般最多只能识别1024个字符,所以如果需要传送大量数据的时候,也不适合使用GET方式。POST方式请求行中不包含数据字符串,这些数据保存在”请求内容”部分,各数据之间也是使用”&”符号隔开。POST方式大多用于页面的表单中。GET方式也有自己的特点和优势,我们应该根据不同的情况来选择是使用GET还是使用POST。涉及到不是私密的数据也是可以用get请求的。
前端还有一个常用的就是Ajax请求,之前一直是模糊的,由于前后端分离,常常由后端提供接口,我们进行模拟数据的接收和发送,这里都是通过发ajax请求,对于Ajax请求需要认识到几点,这里Ajax的意思是 异步 JavaScript和XML,还有一点可能会困惑的就是认识什么是异步,什么是同步,还有就是了解XMLHttpRequest对象。还有就是跨域的问题
里面也涉及到很多技术和安全问题。(CORS),即Cross-Orgin Resource Sharing 跨域资源共享,JSONP、都是解决跨域的一些方案
同步和异步
同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式。
异步是指:发送方发出数据后,不等接收方发回响应,接着发送下个数据包的通讯方式。
XHR的用法
1. 第一步创建XHR对象
function createXHR(){
if(typeof XMLHttpRequest != "undefined"){
return new XMLHttpRequest(); //现代浏览器一般都会支持
} else if(typeof ActiveXObject != "undefinded"){ //针对IE低版本做兼容
if(typeof arguments.caller.activeXString != "string"){
var versions = ["MSXML2.XMLHttp.6.0","MSXML2.XMLHttp.3.0","MSXML2.XMLHttp"],i,len;
for(i = 0,len = versions.length; i<len; i++){
try {
new ActiveXObject(versions[i]);
arguments.callee.activeXString = versions[i];
break;
} catch(ex){
//跳过
}
}
}
return new ActiveXObject(arguments.callee.activeXString);
} else {
throw new Error("No XHR object available");
}
}
- XHR对象的使用方法
var xhr = new createXHR(); //第一步 创建XHR对象
//第二步就是调用open方法,调用该方法并不会真正发送请求,只是启动一个请求以备发送
xhr.open("get","example.txt",true); //get 和 post方法,url,异步的(可选): 默认为true,false为同步,不建议使用
xhr.onreadystatechange = function(){ //第四步 这里对事件进行监听,只要readyState的值发生改变就会触发事件
if(xhr.readyState == 4){
if((xhr.status >= 200 && xhr.status < 300) || xhr.status == 304){
console.log(xhr.responseText);
} else {
console.log(xhr.status);
}
}
};
xhr.send(null); //第三步 调用send方法,请求就会发到服务器
3. 如何解决CORS问题
HTTPS 加密过程
这里以淘宝为例子。阐述具体的过程,说在前面的话,HTTPS
是在http 和传输层之间加的一层 TLS/SSL,以往http传输都是明文,为了确保安全,将传输的数据全部进行加密,SSL/TLS,有三点要明白,证书的验证(RSA)、传输过程数据加密(AES)、防止传输过程数据被篡改(SHA-256)
SSL/TLS 未完成之前,HTTP 层不会运行。
浏览器端 Client Hello
在Client Hello 之前完成的有DNS解析、TCP三次握手

-
浏览器这边通过TLSv1.2
协议发送 Client Hello,这里面包含很多东西
随机数,由两部分组成(时间戳(4字节)+随机数(28字节))

浏览器可选密码套件(用来与服务器协商到底使用哪种加密算法)

会话ID(Session ID) 初始值为0(一字节) ,下次进行连接,就不用进行握手。见下图
server_name extension: (通过这,告诉服务器客户端将要连接 )

.....
服务器--->浏览器 确认
这里还有一个确认,类似TCP三次握手,服务器给客户端,确认收到 Client Hello
服务器端 Server Hello
Server Hello ,这个记录分成三个子消息
Server Hello 短消息 这里主要进行协商加密算法,服务器从密码套件里面选取一种,之后就用该方法做后面的事情,而且服务端也向客户端这边发送随机数,格式和 Client Hello 一样。

证书消息。 从这里面可以看出来,server Hello 下面两个使用TCP的包里面就是 服务器给客户端发的证书内容,就是 X.509 证书里面的内容,比如公钥、颁发者信息

Server Hello Done (Certificate 部分)

在SSL/TLS握手协议的第三部分

RAS验证过程(基于大数难分解)一般都是2048比特长,转换成10进制,大概就是617位
总结:客户端这里会生成一个预主密钥,使用服务器的公钥加密, 后面 使用 客户端随机数、服务端随机数、以及预主密钥产生会话秘钥。这样就可以使用这个秘钥进行加密
参考
(编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!