一、Http请求过程
HTTP
协议采用请求/响应模式,客户端向服务器发送一个请求报文,然后服务器响应请求。下面介绍一下一次HTTP
请求的过程:
- 在浏览器中输入
URL
,并按下回车键 - 浏览器向
DNS
服务器请求解析该URL
中的域名对应的IP
地址(如果是IP
请求,则不需要该步骤) - 解析出
IP
后,根据IP
和端口号,和服务器建立TCP连接 - 浏览器向服务器发送请求,该请求报文作为
TCP
三次握手的第三个报文发送给服务器 - 服务器做出响应,把数据发送给浏览器
- 通信完成,断开
TCP
连接 - 浏览器解析收到的数据并显示
二、HTTP请求方法(method)
HTTP/1.1有7种请求方法:1、GET;2、POST;3、PUT;4、DELETE;5、HEAD;6、TRACE;7、OPTIONS;
1、各个方法的作用:
GET | 对这个资源的查操作 |
DELETE | 对这个资源的删操作(注意:客户端无法保证删除操作一定会被执行,因为HTTP规范允许服务器在不通知客 户端的情况下撤销请求) |
HEAD | 与GET方法的行为很类似,但服务器在响应中只返回实体的头部分。可以快速获取资源信息,比如资源类型; 通过查看响应中的状态码,可以确定资源是否存在; 通过查看首部,测试资源是否被修改; |
POST | 向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。(适用于更新操作) |
PUT | 从客户端向服务器传送的数据取代指定的文档的内容。(适用于添加操作) |
OPTIONS | 用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST” |
TRACE | 会在目的服务器端发起一个“回环”诊断,因为客户端在发起一个请求时,这个请求可能要穿过防火墙、代理、网关、或者其它的一些应用程序。这中间的每个节点都可能会修改原始的HTTP请求,TRACE方法允许客户端在最终将请求发送服务器时,它变成了什么样子。由于有一个“回环”诊断,在请求最终到达服务器时,服务器会弹回一条TRACE响应,并在响应主体中携带它收到的原始请求报文的最终模样。这样客户端就可以查看HTTP请求报文在发送的途中,是否被修改过了 |
2、主要的区别
1.PUT和POST
PUT和POS都有更改指定URI的语义.但PUT被定义为idempotent(幂等的)的方法,POST则不是.idempotent的方法:如果一个方法重复执行多次,产生的效果是一样的,那就是idempotent的。也就是说:PUT请求:如果两个请求相同,后一个请求会把第一个请求覆盖掉。(所以PUT用来改资源)Post请求:后一个请求不会把第一个请求覆盖掉。(所以Post用来增资源)
2.GET和POST
- GET参数通过URL传递,POST放在Request body中,因此参数无法直接拿到,相对
GET
安全性较高(但是通过抓包工具,还是可以看到请求参数的) - GET请求会被浏览器主动cache,而POST不会,除非手动设置。
- Get 请求中有非 ASCII 字符,会在请求之前进行转码,POST不用,因为POST在Request body中,通过 MIME( 多用途互联网邮件扩展),也就可以传输非 ASCII 字符。
- HTTP的底层是TCP/IP。HTTP只是个行为准则,而TCP才是GET和POST怎么实现的基本。GET/POST都是TCP链接。GET和POST能做的事情是一样一样的。但是请求的数据量太大对浏览器和服务器都是很大负担。所以业界有了不成文规定,(大多数)浏览器通常都会限制url长度在2K个字节,而(大多数)服务器最多处理64K大小的url。
- GET产生一个TCP数据包;POST产生两个TCP数据包。对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
- 在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。但并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。
-
GET
: 通过Request.QueryString
获取变量的值;POST
: 通过Request.form
获取变量的值
三、HTTPS协议简介
HTTPS
是安全的HTTP
通道,即在HTTP通信中加入了SSL
层(当前版本是TLS1.2
),通信的数据被加密了,防止被窃取,具体的通信流程如下:
HTTPS使用的加密方式结合了对称加密和不对称加密的特点,在保证安全的情况下,又提高了传输效率。HTTP和HTTPS的区别如下:
- https协议需要到ca申请证书,一般免费证书很少,需要交费。
- http的信息是明文传输,https 则是具有安全性的ssl加密传输协议。
- http和https用的端口不一样,前者是80,后者是443。
- http的连接很简单,是无状态的;HTTPS协议是由SSL+HTTP协议构建的可进行加密传输、身份认证的网络协议,比http协议安全