HTTP操作符详解和常用状态码详解

HTTP与常见操作符


image.png

GET和POST的区别


GET
1.GET是幂等操作,Get请求不会改变服务器端资源的状态,相同请求进行get,结果都是一样的。

幂等操作:表示的操作至多只会被处理一次,每次调用都将返回第一次调用时的处理结果,就是没有其他操作的时候,第一次请求的结果和第N次是一样的。

2.GET可以缓存,动作是读取,所以可以对get到的数据进行缓存,减少请求次数。
3.GET把参数拼接在url当中。由于浏览器对于url长度有限制,所以get可以传递的参数大小是相对有限的,而且因为是在浏览器url中传递参数,所以参数非常容易被获取到。因此GET请求的参数除了用代码控制之外,手动在URL中去输入拼接也可以。

Restful中get+资源:去定位一个具体资源

POST
1.POST请求是不幂等的,RESTFUL 中POST请求,代表的是post to append,意思就是向服务端发起请求,提交数据之后,会改变服务端的资源的状态,增加一个数据,并且相同的数据POST两遍在服务器端会生成两个新的资源。
2.POST请求数据来自表单提交,数据被编码到HTTP请求的body里。(在chrome开发者工具中可以在HTTP请求的variable中看到)
3.POST请求不可以被缓存,因为其会改变服务端资源的状态
4.用POST提交一些私密数据的时候相对安全,但是对于关键信息还是需要另外加密。

从防止攻击的角度来说,POST和get都不够安全,因为HTTP本身是明文协议每个HTTP请求和返回的每个byte都会在网络上明文传播,不管是url,header还是body。只是POST的参数相对来说不像get那么只管展示在url上。


PUT:在restful中的语义是替代资源,服务器端不存在就创建,存在就替代,PUT是幂等操作。

PATCH :只修改所需要的字段,不会修改整个资源的状态。PATCH不是幂等的。比如服务端资源中有记录版本的信息,PATCH会引起版本的变化,所以不一定是幂等操作。

DELETE:删除该资源,是幂等操作,删除了资源就不存在了,删除多少次都一样。

OPTION:HTTP预请求,请求查询服务器性能,返回http allow报头,展示了请求的资源所支持的http方法,与CORS相关CORS跨域

  • 思考:能否用GET来替代POST?不能的话为什么?
    个人理解:服务端和客户端交互的时候可以强行用get请求是实现一些修改服务端资源的方法。但是会存在很多问题。
    • get通过url传递参数,url长度限制会导致参数丢失,后台资源更新数据不准确。
    • url传递参数都是字符串,一些复杂数据类型,比如对象数组等在转化成字符串时可能转换失败导致数据丢失。
    • url中传递的参数非常容易被篡改,只需要手动更改url的内容就可以篡改传输的数据。

常用状态码


  • 2XX:表示请求成功
    200(OK):服务端成功执行了请求
    201(Created):服务端成功创建了个新资源,响应报头:Location报头应包含指向新创建资源的规范URI。

  • 3XX:重定向

重定向:是客户端行为,客户端请求后,发现服务端响应的是重定向相关的状态码,就去获取响应中的Location访问这个资源的新URL,浏览器中的URL会变化,客户端至少发起了两次请求。
为什么会重定向:概括的说就是资源原来的URL因为种种原因不再使用了,所以对原有地址应该做重定向处理。
1)网站调整(如改变网页目录结构);
2)网页被移到一个新地址;
3)网页扩展名改变(如应用需要把.php改成.Html或.shtml)。
这种情况下,如果不做重定向,则用户收藏夹或搜索引擎数据库中旧地址只能让访问客户得到一个404页面错误信息,访问流量白白丧失;再者某些注册了多个域名的网站,也需要通过重定向让访问这些域名的用户自动跳转到主站点等。
转发:是服务端行为,客户端感受不到服务端的转发操作,只是发起了一次请求,转发的路径必须是同一个web容器下的URL。
重定向和转发

300(Multiple Choices):请求的资源可包括多个位置,相应可返回一个资源特征与地址的列表用于用户终端。
301(Moved Permanently):请求的资源已被永久的移动到新URI,返回信息会包括新的URI,浏览器会自动定向到新URI。
302(Temporarily Moved、Found):资源只是临时被移动。客户端应继续使用原有URI

301和302重定向的区别:
使用302的场景:当web资源只是在一段时间内临时转移到一个新的位置的时候,使用302告诉客户端,暂时用这个新地址。
使用301的场景
1)换域名了
2)规定了带www的域名为规范域名,在搜索引擎的搜索结果中出现了不带www的域名,而带www的域名却没有收录,这个时候可以用301重定向来告诉搜索引擎我们目标的域名是哪一个。
3)空间服务器不稳定,换空间的时候。
推荐使用301,尽量不使用302的原因:避免网址URL劫持
301跳转对它告诉查找引擎,这个地址弃用了,永远转向一个新地址,可以转移新域名的权重。所以老地址的搜索权重会被转移到新的域名上去。(与SEO相关)
302有可能存在内容已经重定向了,但是因为URL规范等原因,URL并没有跳转,所以有可能有些页面明明内容被访问了很多次,但是URL或域名在搜索引擎当中并没有被增加,就是URL被劫持了。这样很容易被搜索引擎误认为是利用多个域名指向同一网站,那么你的网站就会被封掉,罪名是“利用重复的内容来干扰Google搜索结果的网站排名”。
301和302比较

303(See Other):GET方法不会发生变更,其他方法会变更为 GET 方法(消息主体会丢失)。用于PUT请求方法 PUT或POST请求完成之后进行页面跳转来防止由于页面刷新导致的操作的重复触发。对于POST请求,它表示请求已经被处理,客户端可以接着使用GET方法去请求Location里的URI。
307(Temporary Redirect):类似于302,对于POST请求,表示请求还没有被处理,客户端应该向Location里的URI重新发起POST请求。
304(Not Modified):会使页面跳转到本地陈旧的缓存版本当中。
305(Use Proxy):必须通过代理访问资源, 代理的地址在Response 的Location中。
mozilla Redirections

  • 4XX:客户端请求错误

400(Bad Request):客户端请求的语法错误,服务器无法理解
401(Unauthorized):请求要求用户的身份认证。客户端提供了错误的证书,或者根本没有提供证书。
响应报头:WWW-Authenticate报头描述服务器将接受哪种认证。
实体主体:一个错误的描述文档。
潜台词:要客户端重新发送正确的身份验证信息。(我不认识你,需要验证你身份)
403(Forbidden):对于请求的资源没有访问的权限,即使你已经通过身份验证了。
潜台词是:联系服务端管理员开通权限。(我认识你,但是你无权访问)
404(Not Found):没有找到对应资源。
405(Method Not Allowed):请求的方法不允许。比如URL只允许POST,不允许DELETE时,用DELETE去请求会报错。
406(Not Accepted):服务器无法响应请求中指定的请求头Accept
比如:请求头(Request Headers)中看到请求信息是json格式,响应头(Response Hraders)中却发现返回信息的格式是“text/html”,前台无法解析。
409(Conflict):服务器完成客户端的 PUT 请求时可能返回此代码,服务器处理请求时发生了冲突

  • 5XX:服务端错误

500(Internal Server Error):服务端出错
501(Not Implemented):客户端试图使用一个服务器不支持的HTTP特性。最常见的例子是:客户端试图做一个采用了拓展HTTP方法的请求,而普通web服务器不支持此请求。它跟响应代码405比较相似,405表明客户端所用的方法是一个可识别的方法,但该资源不支持,而501表明服务器根本不能识别该方法。
502(Bad Gateway):表明代理方面出现问题,或者代理与上行服务器之间出现问题,而不是上行服务器本身有问题。若代理根本无法访问上行服务器,响应代码将是504。
503("Service Unavailable"):由于超载或系统维护,服务器暂时的无法处理客户端的请求。延时的长度可包含在服务器的Retry-After头信息中。
504("Gateway Timeout"):跟502类似,只有HTTP代理会发送此响应代码。请求超时
505("HTTP Version Not Supported")

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,189评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,577评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,857评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,703评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,705评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,620评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,995评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,656评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,898评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,639评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,720评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,395评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,982评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,953评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,195评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,907评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,472评论 2 342

推荐阅读更多精彩内容

  • HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码。有些 App...
    咖啡绿茶1991阅读 2,210评论 0 7
  • 详细看了几篇HTTP状态码的文章,在此做出总结与思考 201—POST 请求、ETag 、创建文件相关 请求已经被...
    美食家儿菜阅读 2,244评论 2 1
  • API定义规范 本规范设计基于如下使用场景: 请求频率不是非常高:如果产品的使用周期内请求频率非常高,建议使用双通...
    有涯逐无涯阅读 2,517评论 0 6
  • 2系列200 OK请求已成功,请求所希望的响应头或数据体将随此响应返回。201 Created请求已经被实现,而且...
    Y像梦一样自由阅读 3,557评论 1 5
  • 此文HTTP状态,包括1xx, 2xx,3xx,4xx,5xx开头的对应状态码及含义,需要查询的直接搜索即可 1....
    Kean_Qi阅读 619评论 0 1