一个URL地址用于描述一个网络上的资源,
而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。
我们最常见的就是GET和POST了。GET一般用于获取/查询资源信息,而POST一般用于更新资源信息.
带参数的get方法:
浏览器可以在get方法中,把数据传递给服务器,数据放在URL的问号(?)后面。
将查询字符串参数追加到URL末尾,一遍将信息发送给服务器。这种方式叫做查询字符串,或者叫querystring。
例如:百度搜索URL如下:
post方法通常用来把表单中填好的数据发送给服务器。
post方法,数据放在body中,不会放在url中。
===================================================================================================================================
其它详细的状态码,详细见其它参考博客。
客户端发起请求时,这些请求通常都是成功的。服务器有一组用来表示成功的状态码,分别对应于不同类型的请求。
。
状态码:204(nocontent,没有内容):返回的响应中,只有一些header和一个状态行,没有实体的主题内容(没有响应body)。
作用如下:
(1)在不获取资源的情况下,了解资源的情况(比如判断其类型)
(3)通过查看header测试资源是否被修改。
实例:先打开Fiddler,然后启动浏览器访问ditu.google.cn,你会捕获到很多204
状态码:206(partialcontent):代表服务器已经成功处理了部分GET请求(只有发送GET方法的request,web服务器才可能返回206)
应用场景:
1.FlashGet,迅雷或者HTTP下载工具都是使用206状态码来实现断点续传
2.将以个大文档分解为多个下载段同时下载比如,在线看视频
实例:一些流媒体技术比如在线视频,可以边看边下载。就是使用206来实现的。
1.浏览器发送一个Get方法的request.header中包含Range:bytes=5303296-5336063.(意思就是请求得到5303296-5336063这个范围的数据)。
2.Web服务器返回一个206的Response.header中包含Content-Range:bytes5303296-5336063/12129376(表明这次返回的内容范围)
重定向状态码用来告诉浏览器客户端,它们访问的资源已被移动,Web服务器发送一个重定向状态码和一个可选的LocationHeader,告诉客户端新的资源地址在哪。
浏览器客户端会自动用Location中提供的地址,重新发送新的Request。这个过程对用户来说是透明的。
301和302非常相似,一个是永久转移,一个是临时转移。
(SEO中,搜索引擎如果碰到301,比如网页A用301重定向到网页B,搜索引擎可以肯定网页A永久性改变地址,就会把网页B当做唯一有效目标)
302,303,307是一样。这是因为302是HTTP1.0定义的,HTTP1.1中使用303,307.同时又保留了302.(但在现实中,我们还是用302,我是没见过303和307)
所以这一节,我们只需要掌握302,304就可以了。
请求的URL已移走。Response中应该包含一个LocationURL,说明资源现在所处的位置
重定向,新的URL会在response中的Location中返回,浏览器将会自动使用新的URL发出新的Request
301和302在语法上是一模一样的,都是在location中返回新的url。区别在于:(1)、301表示旧地址的资源已经被永久的移除了(这个资源不可访问了),搜索引擎会把权重算到新的地址;(2)、302表示旧地址的资源还在(仍然可以访问),这个重定向只是临时的从旧地址跳转到新地址,搜索引擎会把权重算到旧的地址;
状态码:304(NotModified):代表上次的文档已经被缓存了,还可以继续使用
例如打开博客园首页,发现很多Response的statuscode都是304
提示:如果你不想使用本地缓存可以用Ctrl+F5强制刷新页面
有时客户端会发送一些服务器无法处理的东西,比如格式错误的Request,或者最常见的是,请求一个不存在的URL。
发送的Request中的数据有错误(比如:表单有错误,Cookie有错误),这个我们也经常见到。
Web客户端发送的请求被Web服务器拒绝了,如果服务器想说明为什么拒绝请求,可以包含实体的主体部分来对原因进行描述。但这个状态码通常是服务器不想说明拒绝原因。
访问下面的URL,会被服务器拒绝.并且返回403状态码
这个大家都懂的,值得一提的是:腾讯把404页面做成了“寻找被拐儿童”
405是指Web服务器不支持Request中的方法。
我个人认为状态码405MethodNotAllowed和501NotImplemented是一样的意思。都是不支持Request的方法。(目前我还不知道这两个的区别)
实例:发送一个是trace方法的Request给www.google.com
服务器要求在Request中包含Content-Length。
当浏览器使用Post方法,发送数据给Web服务器时,必须要有Content-Length。这样Web服务器才知道你要发送多少数据,否则Web服务器会返回411状态码
实例:发送一个Post方法的Request给www.google.com.Request中没有Content-Length
作用:客户端发送的实体主体部分比服务器能够或者希望处理的要大。一般情况下我们看不到这个状态码。因为浏览器不会发送太大的数据给网站,但是机器人可能会。
实例:用post方法发送一个大文件(100MB以上)给www.google.com
就是说RequestURI太长,一般浏览器本身对URI的长度就会有限制,所以不会发送URI很长的Request.我们平常是根本看不到414错误的。但是机器人可以发送很长URI。
有时候客户端发送了一条有效Request,Web服务器自身却出错了。可能是Web服务器运行出错了,或者网站都挂了。5XX就是用来描述服务器错误的。
这个太常见了,我们开发网站的时候,当我们的程序出错了时,就会返回500错误。
实例:ASP.NET程序出错
客户端发起的请求超出服务器的能力范围(比如,使用了服务器不支持的请求方法)时,使用此状态码)。一般的Web服务器只支持GET和POST方法。
实例:使用FiddlerComposer给www.qq.com,发送一个OPTIONS方法的Request.服务器就能返回501了。
代理使用的服务器遇到了上游的无效响应。
Fiddler本身就是代理服务器。当我们访问www.facebook.com,这网站被我们天朝屏蔽了。所以我们可以得到502
表示Web服务器不支持此HTTP协议的版本。
众所周知我们现在使用的HTTP协议版本是HTTP/1.1,如果我们发送一个HTTP/2.0的request给博客园,博客园肯定不能支持HTTP/2.0,所以会返回505
想要发送这样的request,可以使用Fiddler工具中的Composer来发送自定义的request,如下图。