http协议之请求方式

一:八种http请求方式

1. GET 请求:获取资源

GET 方法 用来请求访问 已被URI识别的资源。指定的资源经过服务器解析后返回响应内容。

2.POST请求:传输实体主体

向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

3. PUT: 传输文件

put方法用来传输文件,要求在报文的主体中包含文件内容,然后保存到请求URI指定的位置(创建或完全替换更新)。因为在在http/1.1中的PUT方法自身不带验证机制,任何人都可以上传文件,存在安全性问题,因此一般的Web网站不使用该方法。

4. HEAD:获得报文首部

HEAD方法和GET方法很类似,只是服务器不返回报文的主体部分,只返回响应状态和响应头。常常用于确认URI的有效性及资源更新的日期时间等。

5. DELETE:删除文件

DELETE方法用来删除文件,是按请求URI删除指定的资源,刚好与PUT方法相反。

6. OPTIONS: 询问支持的方法

OPTIONS方法 用来查询 针对请求URI指定的资源 所支持的方法。

7. TRACE:追踪路径

TRACE方法是让Web服务器端将之前的请求通信环回给客户端的方法。
发送请求时,在Max-Forwards首部子弹中填入数值,每经过一个服务器,该数字减1, 当数值刚好减到0时,就停止继续传输,最后收到请求的服务器端则返回状态码 200 OK 的响应。
客户端通过TRACE方法可以查询发送出去的请求是怎样被加工修改/篡改的。这是因为,请求想要连接到源目标服务器可能会通过代理中转,TRACE方法就是用来确认连接过程中发生的一系列操作。
但是,TRACE方法本来就不怎么常用,再加上它容易引发XST(Cross-site Tracing, 跨站追踪)攻击,通常就更不会用到了。

8. CONNECT: 要求用隧道协议代理

CONNECT 方法 要求在于代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL(Secure Sockets Layer, 安全套接层) 和 TLS(Transport Layer Security, 传输层安全) 协议把通信内容加密后经网络隧道传输。
CONNECT 方法的格式如下所示:
CONNECT 代理服务器:端口号 HTTP版本

二:GET和POST的区别

1、提交的方式不同:GET提交,请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,多个参数用&连接;例 如:login.action?name=aaa&password=123456&verify=%E4%BD%A0 %E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其他字符,则直接把字符串用urlencode函数转换,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。因此,GET提交的数据会在地址栏中显示出来,而POST提交,地址栏不会改变。
POST提交:把提交的数据放置在是HTTP包的包体中。上文示例中红色字体标明的就是实际的传输数据

2、所支持的编码及格式不同:对参数的数据类型,GET只接受ASCII字符,而POST没有限制。GET请求只能进行url编码,而POST支持多种编码方式

3、传输数据的大小不同:首先声明:HTTP协议没有对传输的数据大小进行限制,HTTP协议规范也没有对URL长度进行限制。

而在实际开发中存在的限制主要有:

GET:特定浏览器和服务器对URL长度有限制,例如 IE对URL长度的限制是2083字节(2K+35)。对于其他浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系 统的支持。

因此对于GET提交时,传输数据就会受到URL长度的 限制。

POST:由于不是通过URL传值,理论上数据不受 限。但实际各个WEB服务器会规定对post提交数据大小进行限制,Apache、IIS6都有各自的配置。

4、安全性:
POST的安全性要比GET的安全性高。比如:通过GET提交数据,用户名和密码将明文出现在URL上,因为(1)登录页面有可能被浏览器缓存;(2)其他人查看浏览器的历史纪录,那么别人就可以拿到你的账号和密码了,除此之外,使用GET提交数据还可能会造成Cross-site request forgery攻击。GET请求的话,会被缓存、保存在服务器日志、以及浏览器浏览记录中,而POST请求 不会。

5、速度上:
GET比POST 传输速度要快。为什么?
post在真正接收数据之前会先将请求头发送给服务器进行确认,然后才真正发送数据
post请求的过程:
(1)浏览器请求tcp连接(第一次握手)
(2)服务器答应进行tcp连接(第二次握手)
(3)浏览器确认,并发送post请求头(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
(4)服务器返回100 Continue响应
(5)浏览器发送数据
(6)服务器返回200 OK响应
get请求的过程:
(1)浏览器请求tcp连接(第一次握手)
(2)服务器答应进行tcp连接(第二次握手)
(3)浏览器确认,并发送get请求头和数据(第三次握手,这个报文比较小,所以http会在此时进行第一次数据发送)
(4)服务器返回200 OK响应
上面已经说了,get会将数据缓存起来,而post不会,所以这也是一方面。

三. POST 和PUT两种请求方式的区别

POST和PUT都是在向服务器增加或修改某个资源文件或者某种操作。但其实还是有区别的。首先要明确几个概念:
1.什么是幂等性
幂等性概念:幂等通俗来说是指不管进行多少次重复操作,都是实现相同的结果。

2.请求中哪些是幂等操作
GET,PUT,DELETE都是幂等操作,而POST不是,以下进行分析:

首先GET请求很好理解,对资源做查询多次,此实现的结果都是一样的。
PUT请求的幂等性可以这样理解,将A修改为B,它第一次请求值变为了B,再进行多次此操作,最终的结果还是B,与一次执行的结果是一样的,所以PUT是幂等操作。
同理可以理解DELETE操作,第一次将资源删除后,后面多次进行此删除请求,最终结果是一样的,将资源删除掉了。

POST不是幂等操作,因为一次请求添加一份新资源,二次请求则添加了两份新资源,多次请求会产生不同的结果,因此POST不是幂等操作。
因此,当是幂等操作时,就用PUT请求,当不是幂等操作时,就用POST请求。

四. Content-Type 和 POST 提交数据方式的关系

Content-Type提交数据方式
application/x-www-form-urlencodedForm 表单提交
multipart/form-data表单文件上传提交
application/json序列化 Json 数据提交
text/xmlXML 数据提交

在爬虫中如果要构造 POST 请求需要注意这几种 Content-Type,了解各种请求库的各个参数设置时使用的是哪种 Content-Type,不然可能会导致 POST 提交后得不到正常的 Response。
由上可以看出,POST常常用于form表单(账号密码登录提交)的场景,或者表单中文件上传操作,或者序列化json数据提交到服务器从而让服务器做出某种操作或响应,或者提交XML数据到服务器。同时,也会提交某种资源文件到服务器(这种情况下慎用)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值