HTTP详解

来源:互联网 发布:井上真央松本润 知乎 编辑:程序博客网 时间:2024/06/05 03:18

  HTTP协议(HyperText Transfer Protocol,超文本传输协议),它是应用层上的一个协议,下图是应用层的一些协议。
  这里写图片描述

响应模式
  http遵循请求-响应模式,标准的客户端/服务器模式。http协议永远都是客户端先发起请求,服务器回答响应。
  http是一个无状态的协议,即客户端和服务器端不需要建立长久的连接,所以http又被称作为短连接。
 
工作过程
  一次请求响应,被称作为一个事务。
  
  1:DNS域名解析,如:http://localhost.com:8080/index.html
     协议:http
     地址:localhost.com
     端口:8080
     路径:index.html
  关于DNS域名解析,我在上篇文章中做了详细描述,不了解的可以去看看。
  
  2:封装http数据包,将请求地址,端口,路径,搭载的参数拼装到URL中,路径后参数之间,用?分开,每个参数则用paramName=value的方式,之间用&隔开,如:http://localhost.com:8080/login?name=luosiye&psd=123456

  3:建立连接,首先需要建立一个TCP连接,为何?http比tcp协议更高层次,根据规则,只有先建立低层次的连接,才能建立高层次的连接。连接成功后,开始向服务器发送封装的http数据包(get和post,这个下面讲)

  4:服务器应答,客户端给服务端发送请求后,服务端会给客户端进行应答,通常会发回一个协议版本号和应答码,如HTTP1.0 200 OK,我们都知道,200是请求成功的标识。至于前面的,就是协议版本号了。

  5:数据传输(这里其实也可以分为多个步骤),通常先发头信息,在发送需要传输的数据。

  6:关闭连接,请求完成后,客户端和服务端都会关闭连接。

以上就是http请求的全过程,步骤2其实也可以并入到3当中,简单的来说,就是连接-传输数据-关闭连接三个步骤。

GET和POST
  http和服务器交互的方式,最早有4种,get、post、put、delete。很遗憾,早期的Web MVC框架设计师并没有把URL当做抽象的资源来设计,所以传统的Web 框架只支持GET和POST两种方式。
  
  相信很多人在面试的时候都会被问到get和post的区别,通常我们这样回答:
  1:get使用URL或者Cookie进行传参,像上面的例子,而post用body传参;
  2:get的URL有长度限制(通常是1024),而post并没有这个限制;
  3:post比get更为的安全。
  
  下面一个一个来解释:

  1:get和post由http协议定义,在http协议中,Method和Data(URL、Body、Header)是正交的两个概念,也就是说,使用哪个方法,与应用层的数据传输没有任何的关系。http中没有规定说,如果用的post,就一定要把参数放在body中,也没有说,如果用的get,就非得要把参数放在URL中。

  2:实际上,http协议里头,不管是header还是body,都没有做长度的规定,**真正最长度限制的是浏览器和服务器,**IE是2083(2K+35),对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。

  3:最后一点,我只能说,安全与不安全,与get和post没有关系。我们说post安全,无非是因为他把参数放在了body中,但是,还可以抓包啊,get可以encoding啊,可以Base64啊,所以没有所谓的谁更安全。

  最后,我们明白了一点,get和post压根不存在以上的区别,非要说有什么区别,那只有一点,get是向服务器索取数据的一种请求,而post是向服务器提交数据的一种请求

关于HTTPS
  HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入SSL层,HTTPS的安全基础是SSL。其所用的端口号是443。
  
  SSL:安全套接层,是netscape公司设计的主要用于web的安全传输协议。这种协议在WEB上获得了广泛的应用。通过证书认证来确保客户端和网站服务器之间的通信数据是加密安全的。

  有两种基本的加解密算法类型:
  1:对称加密(symmetrcic encryption),只有一个密钥,加解密为同一个密码,且加解密速度很快,典型的有DES、AES、RC5、3DES等。
  2:非对称加密,使用两个秘钥,一个公有秘钥,一个私有秘钥,私有秘钥由一方密码保存(通常是服务器端),公钥任何一方都可以获取。这种秘钥成对出现,且根据公钥无非推知私钥,加解密都使用不同的秘钥,速度相对较慢,典型的有RSA、DSA等。

  下图是https通信的全过程:
  这里写图片描述

https通信的优点:
1:客户端产生的密钥只有客户端和服务器端能得到;
2:加密的数据只有客户端和服务器端才能得到明文;+
3:客户端到服务端的通信是安全的。

关于http,就先讲这些。
  

0 0
原创粉丝点击