http请求

本周主要修了系统的一些bug,以及按照教程启了一下后台环境。

前言

HTTP/1.1有7种请求方法:1、GET;2、POST;3、PUT;4、DELETE;5、HEAD;6、TRACE;7、OPTIONS;
项目中常用的是前面四种。但是自己不太清楚请求的过程以及post和put请求之间的区别。于是记录一下。

POST和PUT

关于http的post和put方法,大多数的解释都是,如果是新建一条记录的话就用post,如果是更新一条记录的话就用put。
解释是这样的:
POST方法和PUT方法请求最根本的区别是请求URI(Request-URI)的含义不同。
POST请求里的URI 指示一个能处理请求实体的资源
PUT方法请求里的URI标识请求里封装的实体--用户代理知道URI 意指什么,并且服务器不能把此请求应用于其它资源。
比如下面的例子:

项目中新建请求例子
return this.httpClient.post(`user`, user)
更新请求例子
return this.httpClient.put(`user/${userId}`, user);

可以看到,put请求里的url带着userId,即标示着对应封装的实体。而post请求没有userId,它对应的是处理所有user的一个资源。

另外我尝试的时候,把更新请求的put改post的时候,也就是post方法用来指示实体的时候,能正常使用。如下:

return this.httpClient.post(`user/${userId}`, user);

但是我是在angular mockapi下尝试的,没有启动后台,不清楚后台下替换的话有什么区别。


从幂等的性质上看

PUT和POST方法语义中都有修改资源状态的意思,因此都不是安全的。但是PUT方法是幂等的,POST方法不是幂等的,这么设计的理由是:

HTTP协议规定,POST方法修改资源状态时,URL指示的是该资源的父级资源,待修改资源的ID信息在请求体中携带。而PUT方法修改资源状态时,URL直接指示待修改资源。因此,同样是创建资源,重复提交POST请求可能产生两个不同的资源,而重复提交PUT请求只会对其URL中指定的资源起作用,也就是只会创建一个资源。


按这么说,刚才把put换成post执行更新操作的话,请求可能会产生两个不同的user。
等学习后台之后再进行试验。

HTTP请求过程

HTTP协议采用请求/响应模式,客户端向服务器发送一个请求报文,然后服务器响应请求。过程:

1.在浏览器中输入URL,并按下回车键
2.域名解析
     即向DNS服务器请求解析该URL中的域名对应的IP地址。
     Domain Name Server,域名服务器,比如访问JD.com,就会去根服务器去查.com在哪个位置,再查JD在什么位置,最后获得该url的IP地址。
     这个DNS服务一般是电信运营商提供的,也可以使用像Google提供的DSN服务器。
3.浏览器根据IP和端口号,和服务器建立TCP连接,发起TCP3次握手
(TCP,Transmission Control Protocol)
这里的服务器指web程序(常用的有httpd,nginx等)。
两台计算机之间的通信是靠协议(目前流行TCP/IP协议)来实现的,如果两台计算机使用的通信协议不一样,那是不能进行通信的,所以这个3次握手就相当于试探一下对方是否遵循TCP/IP协议,协议完成后就可以进行通信了,
4.建立TCP连接后发起http请求
比如浏览器发起了http请求,使用的http的GET方法,请求的URL是/,协议是HTTP/1.0
5.服务器响应请求,返回结果
服务器端web程序接收到http请求以后,就开始处理改请求,处理之后就返回给浏览器html文件。
6.浏览器得到html标签代码
7.浏览器解析html代码中的资源,例如js,css,img等
8.浏览器对页面进行渲染并呈现给用户

你可能感兴趣的