2021.6.24 星期六 19:24
HTTP是超文本传输协议,其定义了客户端与服务器端之间文本传输的规范。HTTP默认使用80端口,
# [HTTP请求方式中8种请求方法(简单介绍)]
HTTP请求方式中8种请求方法(简单介绍)
常用方法
GET方法、POST方法、HEAD方法、PUT方法、DELETE方法、CONNECT方法、OPTIONS方法、TRACE方法。
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法
### post 和 put 区分
1、OPTIONS
返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
2、HEAD
向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
3、GET
向特定的资源发出请求。
注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。
4、POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
POST方法用于将数据发送到服务器以创建或更新资源,它要求服务器确认请求中包含的内容作为由URI区分的Web资源的另一个下属。
5、PUT
向指定资源位置上传其最新内容
6、DELETE
请求服务器删除Request-URL所标识的资源
7、TRACE
回显服务器收到的请求,主要用于测试或诊断
8、CONNECT
HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
注意:
1)方法名称是区分大小写的,当某个请求所针对的资源不支持对应的请求方法的时候,服务器应当返回状态码405(Mothod Not Allowed);
当服务器不认识或者不支持对应的请求方法时,应返回状态码501(Not Implemented)。
2)HTTP服务器至少应该实现GET和HEAD/POST方法,其他方法都是可选的,此外除上述方法,特定的HTTP服务器支持扩展自定义的方法。
HTTP工作原理
请求消息
Request: 请求行(request line)、请求头部(header)、空行和请求数据四个部分组成。
Response: 状态行、消息报头、空行和响应正文.
请求行以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本
状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。1
2
3
4
5
6
7
8
9
10
11
12GET /562f25980001b1b106000338.jpg HTTP/1.1
Host img.mukewang.com
User-Agent Mozilla/5.0 (
// ## respons
HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8
<html>
<head></head> <body> <!--body goes here--> </body> </html>
状态码
200
HTTP状态200(OK)
状态代码表示该请求已经被成功地处理在服务器上。响应有效负载取决于为请求选择的HTTP方法。
201状态码英文名称是Created,该状态码表示已创建。成功请求并创建了新的资源,该请求已经被实现,而且有一个新的资源已经依据请求的需要而建立,且其 URI 已经随Location 头信息返回。
假如需要的资源无法及时建立的话,应当返回 ‘202 Accepted’。
202
HTTP状态202(Accepted)
HTTP状态202表示已接受处理请求,但处理尚未完成。当实际操作本质上是异步时,此状态代码很有用。
其目的是允许服务器接受对某些其他进程的请求(可能是每天只运行一次的面向批处理的进程),而不要求用户代理与服务器的连接持续到进程完成为止。
204
204 No Content 当您的操作成功,但不在响应正文中返回数据时,出现此结果。
HTTP状态204 (No Content)
HTTP状态204 (No Content)表示服务器已成功完成请求,并且在响应有效负载正文中没有要发送的内容。服务器可能希望以entity-headers的形式返回更新的元信息,如果存在,应该将其应用于当前文档的活动视图(如果有的话)。
204响应绝不能包含消息体,因此总是在头字段之后的第一个空行终止。
默认情况下,204 (No Content)响应是可缓存的。如果需要覆盖缓存,则响应必须包括缓存各自的缓存头。
例如,您可能希望204 (No Content)在UPDATE操作中返回状态,其中请求有效负载足够大而不能来回传输。用户代理将有效负载发送到服务器以更新资源,如果操作成功,服务器将响应204以指示成功,以便客户端应用程序可以更新其UI以通知用户操作的成功。
它还经常与期望自动数据传输普遍存在的接口一起使用,例如在分布式版本控制系统中。
使用惯例是,在 PUT 请求中进行资源更新,但是不需要改变当前展示给用户的页面,那么返回 204 No Content。
如果新创建了资源,那么返回 201 Created 。如果页面需要更新以反映更新后的资源,那么需要返回 200 。
201
201-option请求
出于安全考虑,并不是所有域名访问后端服务都可以。其实在正式跨域之前,浏览器会根据需要发起一次预检(也就是option请求),用来让服务端返回允许的方法(如get、post),被跨域访问的Origin(来源或者域),还有是否需要Credentials(认证信息)等。那么浏览器在什么情况下能预检呢?
重定向 301和302
301 Moved Permanently。代表永久性转移(Permanently Moved)
302 Found。 代表暂时性转移(Temporarily Moved )
详细来说,301和302状态码都表示重定向,就是说浏览器在拿到服务器返回的这个状态码后会自动跳转到一个新的URL地址,这个地址可以从响应的Location首部中获取(用户看到的效果就是他输入的地址A瞬间变成了另一个地址B)——这是它们的共同点。
网页重定向、域名的重定向、路由选择的变化
区别:
301表示旧地址A的资源已经被永久地移除了(这个资源不可访问了),搜索引擎在抓取新内容的同时也将旧的网址交换为重定向之后的网址;
302表示旧地址A的资源还在(仍然可以访问),这个重定向只是临时地从旧地址A跳转到地址B,搜索引擎会抓取新的内容而保存旧的网址。
三. 301重定向有什么优点?
有利于网站首选域的确定,对于同一资源页面多条路径的301重定向有助于URL权重的集中。例如 www.conimi.com和 conimi.com 是两个不同的域名,但是指向的内容完全相同,搜索引擎会对两个域名收录情况不同,这样导致网站权重和排名被分散;对conimi.com 做301重定向跳转至www.conimi.com 后,权重和排名集中到www.conimi.com,从而提升自然排名。
<!– 四. 302重定向又是什么鬼?
302重定向(302 Move Temporarily),指页面暂时性转移,表示资源或页面暂时转移到另一个位置,常被用作网址劫持,容易导致网站降权,严重时网站会被封掉,不推荐使用。
五. 301与302的区别
301重定向是页面永久性转移,搜索引擎在抓取新内容的同时也将旧的网址替换成重定向之后的网址;
302重定向是页面暂时性转移,搜索引擎会抓取新的内容而保存旧的网址并认为新的网址只是暂时的。
六. 301重定向的用途
- 将不带www的域名转向带www的域名
- 将多个域名跳转至同一个站点
–>3、那么,什么时候进行301或者302跳转呢?
使用301跳转的场景:
1)域名到期不想续费(或者发现了更适合网站的域名),想换个域名。
2)在搜索引擎的搜索结果中出现了不带www的域名,而带www的域名却没有收录,这个时候可以用301重定向来告诉搜索引擎我们目标的域名是哪一个。
3)空间服务器不稳定,换空间的时候。 - 将多个域名跳转至同一个站点:
使用302跳转的场景:
–尽量使用301跳转!
4、为什么尽量要使用301跳转?——网址劫持!
<!– 这里摘录百度百科上的解释:
从网址A 做一个302 重定向到网址B 时,主机 服务器的隐含意思是网址A 随时有可能改主意,重新显示本身的内容或转向其他的地方。大部分的搜索引擎在大部分情况下,当收到302 重定向时,一般只要去抓取目标网址就可以了,也就是说网址B。如果搜索引擎在遇到302 转向时,百分之百的都抓取目标网址B 的话,就不用担心网址URL 劫持了。问题就在于,有的时候搜索引擎,尤其是Google,并不能总是抓取目标网址。比如说,有的时候A 网址很短,但是它做了一个302 重定向到B 网址,而B 网址是一个很长的乱七八糟的URL 网址,甚至还有可能包含一些问号之类的参数。很自然的,A 网址更加用户友好,而B 网址既难看,又不用户友好。这时Google 很有可能会仍然显示网址A。由于搜索引擎排名算法只是程序而不是人,在遇到302 重定向的时候,并不能像人一样的去准确判定哪一个网址更适当,这就造成了网址URL 劫持的可能性。也就是说,一个不道德的人在他自己的网址A 做一个302 重定向到你的网址B,出于某种原因, Google 搜索结果所显示的仍然是网址A,但是所用的网页内容却是你的网址B 上的内容,这种情况就叫做网址URL 劫持。你辛辛苦苦所写的内容就这样被别人偷走了。302 重定向所造成的网址URL 劫持现象,已经存在一段时间了。不过到目前为止,似乎也没有什么更好的解决方法。在正在进行的谷歌大爸爸数据中心转换中,302 重定向问题也是要被解决的目标之一。从一些搜索结果来看,网址劫持现象有所改善,但是并没有完全解决。
我的理解是, –>从网站A(网站比较烂)上做了一个302跳转到网站B(搜索排名很靠前),这时候有时搜索引擎会使用网站B的内容,但却收录了网站A的地址,这样在不知不觉间,网站B在为网站A作贡献,网站A的排名就靠前了。
301跳转对查找引擎是一种对照驯良的跳转编制,也是查找引擎能够遭遇的跳转编制,它告诉查找引擎,这个地址弃用了,永远转向一个新地址,可以转移新域名的权重。而302重定向很容易被搜索引擎误认为是利用多个域名指向同一网站,那么你的网站就会被封掉,罪名是“利用重复的内容来干扰Google搜索结果的网站排名”。