声明

文章均为本人技术笔记,转载请注明出处https://segmentfault.com/u/yzwall

http协议

http(Hypertext Transfer Protocol, 超文本传输协议),基于TCP连接
URL(Uniform Resource Locator,统一资源定位符),用于指明网络资源的地址
http报文类型分为请求报文响应报文

http请求报文

http请求报文由客户端向服务端发送;

http请求报文由三部分组成:Request-Line(请求行),Request Header(请求报文头,可选),Body(请求报文,只对POST有效)

请求行/Requst-Line

请求行格式:[Request + Request-URI + HTTP-Version + CRLF]

  • Request:请求方法

  • Request-URI:表示访问链接

  • HTTP-Version:表示HTTP协议版本

  • CRLF:表示回车换行,不允许出现单独的CRLF字符

请求方法/Request

请求方法类型可分为:

  • GET:根据Request-URI,从服务端读取数据

  • POST:根据Request-URI,向服务端发送数据(Body)

  • HEAD:根据Request-URI,从服务端只读取响应消息报头

  • PUT:根据Request-URI,请求服务端存储一个资源

  • DELETE:请求服务端删除Request-URI所标识的资源

  • TRACE:请求服务器回送收到的请求信息,主要用于测试

  • CONNECT:待补充

  • OPTIONS:待补充

GET和POST区别
  • GET用于向服务端查询某些信息, POST用于向服务端发送应该被保存的数据. 即GET是从服务器上获取数据,POST是向服务器传送数据

  • GET将查询字符串参数追加到URL尾部,大小有限制; POST请求把提交数据放入请求正文中. 数据格式不限,大小不受限制;

http响应报文

服务端收到和解释请求报文后,返回一个http响应报文

http响应报文由三部分组成:Status-Line(状态行),Response Header(响应报文头,可选),Body(响应正文)

状态行/Status-Line

状态行格式为HTTP Version + Status Code(响应码) + Reason-Phase(响应码描述)

响应码/Status Code

响应码一共3位,第1位定义响应的类别
1xx:信息响应类,表示接收到请求并且继续处理;
2xx:成功响应;
3xx:重定向响应类,需要请求方执行更多操作
4xx:客户端错误,请求包含语法错误或者不能正确执行

  • 400:客户端请求有语法错误,不能被服务端处理;

  • 401:请求未授权;

  • 403:服务端收到请求,但是拒绝提供服务;

  • 404:请求资源不存在;

5xx:服务端错误,服务端不能执行正确的客户端请求

  • 500:服务端内部错误;

  • 501:保留未实现;

  • 502:网关错误,服务器无法响应;

  • 503:服务暂时失效,一段时间后可能恢复正常;

http报文头/Headers

待补充;

https协议

https协议与ssl协议

ssl

ssl(secure socket layer,安全套接字层),ssl协议是Netscape公司提出的安全保密协议,运行在应用层,ssl协议采用加密算法生成40位密钥,为应用程序提供数据加密;

https协议

https(Secure Hypertext Transfer Protocol,安全超文本传输协议),在http基础上通过SSl协议实现信息安全传输;https使用ssl在发送端将数据加密,然后由接收端进行解密,加密和解密都需要发送端和接收端通过交换一致的密钥来实现。

https过程

  1. 【客户端】客户端使用https url访问Web服务端,要求建立ssl连接
    【服务端】Web服务端收到客户端请求,将网站的证书传送一份给客户端,证书里面包含了网站地址,加密公钥,以及证书的颁发机构等信息。

  2. 【客户端】客户端收到网站证书后,浏览器执行如下操作:

    • 2.1 验证证书是否受信任

    • 2.2 生成随机密钥:如果证书受信任,浏览器生成一串随机密钥

  3. 【客户端】加密随机密钥:浏览器用证书提供的公钥对生成的随机密钥进行加密

  4. 【客户端】计算握手信息并加密:浏览器使用HASH加密算法计算握手信息,并用随机密钥加密,然后发送握手信息给服务端

  5. 【服务端】服务端收到握手信息后,执行如下操作:

    • 5.1 解密随机密钥:服务端使用自己的私钥解密出随机密钥

    • 5.2 解密握手信息:服务端使用随机密钥解密收到的握手信息,并验证HASH是否与浏览器发来的一致

    • 5.3 发送加密握手信息:服务端使用随机密钥加密一段握手信息,发送给浏览器

  6. 【客户端】浏览器解密并计算握手信息的HASH,如果与服务端发来的HASH一致,握手结束;

  7. 最后,客户端与服务端的所有通信数据都通过随机密钥加密传输

http与https辨析

  • 安全性:http用明文发送内容,不提供任何方式的数据加密,安全性较差;https协议在http基础上加入ssl协议保证数据安全,ssl凭借证书来验证服务器的身份,并为浏览器和服务器之间的通信加密;

  • 端口:http和https使用的是完全不同的连接方式,http使用80端口,https使用443端口

  • 系统开销:https系统开销比http开销大,传输效率不如http;

  • 费用:https中ssl证书需要缴纳费用;

session与cookine

cookie数据存放在客户的浏览器上,session数据放在服务器上
cookie不是很安全,别人可以分析存放在本地的cookie并进行cookie欺骗,考虑到安全应当使用session
session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能 考虑到减轻服务器性能方面,应当使用cookine
单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie

参考

[1] http://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html
[2] http://www.cnblogs.com/wqhwe/p/5407468.html
[3] http://www.php100.com/html/it/biancheng/2015/0209/8582.html


yzwall
120 声望17 粉丝

对大规模分布式系统技术兴趣浓厚