http的请求方式

作为java开发,到今天发现自己对get/post到底是什么竟然没有理解,不由得觉得比较失败,百度深入了解一下吧。

**

1.http的特点

**
Http是属于应用层的面对对象的协议,HTTP一共有五大特点:
1.1、基于tcp/ip,一种网络应用层,超文本传输协议。
1.2、工作方式:客户端请求,服务器端应答模式,客户向服务器发送请求的时候,请求的方式通常有GET 、POST、HEAD、每种方法规定了客户与服务器联系的类型不同,由于HTTP协议简单,使得HTTP服务器的程序规模小,因而通信速度很快。
客户端请求request消息包括以下格式:请求行(request line),请求头(header)、空行,请求数据。
在这里插入图片描述
服务器端响应response响应也是由四个部分组成,分别是状态行、消息报头、空行、响应正文。
在这里插入图片描述
1.3、灵活:HTTP允许传输任意类型的数据对象,正在传输的类型由Content-Type加以标记。
1.4、 无连接:无连接的意义是限制每次连接只处理一个请求,服务器处理完用户的请求,并收到客户的响应后,即断开连接,采用这种方式可以减少传输时间。
1.5、无状态:http协议是无状态协议,无状态是指协议对于事物处理没有记忆能力,缺少状态意味着如果后续处理需要前面的信息,则必须重传,这样可能导致每次连接传输的数据量增大,另一方面,在服务器不需要之前的信息的时候,响应就会很快。

**

2.请求方法

**
2.1、GET请求:GET可以说是最常见的了,它本质就是发送一个请求来取得服务器上的某一资源。资源通过一组HTTP头和呈现据(如HTML文本,或者图片或者视频等)返回给客户端。GET请求中,永远不会包含呈现数据。

2.2、HEAD请求:HEAD和GET本质是一样的,区别在于HEAD不含有呈现数据,而仅仅是HTTP头信息。有的人可能觉得这个方法没什么用,其实不是这样的。
想象一个业务情景:欲判断某个资源是否存在,我们通常使用GET,但这里用HEAD则意义更加明确。

2.3、POST请求:向指定的资源提交数据并进行处理请求。数据被包含在请求体中,POST请求会产生新的资源的建立,或者已有的资源的修改。这个方法用途广泛,几乎目前所有的提交操作都是靠这个完成。

2.4、PUT请求:这个方法比较少见。HTML表单也不支持这个。本质上来讲, PUT和POST极为相似,都是向服务器发送数据,但它们之间有一个重要区别,
PUT通常指定了资源的存放位置,而POST则没有,POST的数据存放位置由服务器自己决定。举个例子:如一个用于提交博文的URL,/addNew。
如果用PUT,则提交的URL会是像这样的”/addNew/abc123”,其中abc123就是这个博文的地址。而如果用POST,则这个地址会在提交后由服务器告知客户端。
目前大部分博客都是这样的。显然,PUT和POST用途是不一样的。具体用哪个还取决于当前的业务场景。

2.5、DELETE请求:请求服务器删除指定的资源。

2.6、CONNECT请求:HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

2.7、OPTIONS:允许客户端查看服务器的性能。这个方法很有趣,但极少使用。它用于获取当前URL所支持的方法。若请求成功,则它会在HTTP头中包含一个名为“Allow”的头,值是所支持的方法,如“GET, POST”。

2.8、TRACE:回显服务器收到的请求,主要用于测试和诊断。

常见GET请求和POST的区别。
1.请求时get会被缓存,post不会被缓存。
2.保留浏览器历史,get可以,post不可以。
3.get常用于取回数据,post常用于提交数据。
4.post的安全性比get高。
5.get是不安全的,因为在传输过程,数据被放在请求的URL中;post的所有操作对用户来说都是不可见的(请求放在body中)
6.get请求长度最大为1024kb,post请求无限制。

get和post区别的一些见解

1.get用于取回数据,post用于发送数据。
这句话看起来是没什么问题的,只能说不是很全面的,post也被一些ui框架使用于取回数据,比如kendo ui中的grid,就是用post来接受数据的。所以结论是get、post用途也是因地制宜。

2.“请求参数长度限制:get请求长度最多1024kb,post对请求数据没有限制”

这句话看上去实在没毛病啊,菜鸟教程也是这样说的啊。虽然字面意思上没有错误,但是理解一定要正确。我想说的是GET方法提交的url参数数据大小没有限制,在http协议中没有对url长度进行限制(不仅仅是querystring的长度),这个限制是特定的浏览器及服务器对他的限制

下面就是对各种浏览器和服务器的最大处理能力做一些说明

IE浏览器对URL的最大限制为2083个字符
Firefox (Browser):对于Firefox浏览器URL的长度限制为65,536个字符。
Safari (Browser):URL最大长度限制为 80,000个字符。
Opera (Browser):URL最大长度限制为190,000个字符。
Google (chrome):URL最大长度限制为8182个字符。
Apache (Server):能接受最大url长度为8,192个字符。
Microsoft Internet Information Server(IIS):能接受最大url的长度为16,384个字符。
所以为了符合所有标准,url的最好不好超过最低标准的2083个字符(2k+35)。当然在做客户端程序时,url并不展示给用户,只是个程序调用,这时长度只收web服务器的影响了。对于中文的传递,一个汉字最终编码后的字符长度是9个字符。

最常见的form表单,浏览器默认的form表单,默认的content-type是application/x-www-form-urlencoded,提交的数据会按照key value的方式,jquery的ajax默认的也是这种content-type。当然在post方式中添加querystring一定是可以接收的到,但是在get方式中加body参数就不一定能成功接收到了。

**

3.附加常见状态码

**

3.1 状态码1xx

  • 100 Continue:
    服务器仅接收到部分请求,但是一旦服务器并没有拒绝该请求,客户端应该继续发送其余的请求。
  • 101 Switching Protocols:
    服务器转换协议:服务器将遵从客户的请求转换到另外一种协议。
  • 102: 由WebDAV(RFC 2518):
    扩展的状态码,代表处理将被继续执行
    3.2 状态码2xx:成功
  • 200 OK:
    请求成功(其后是对GET和POST请求的应答文档。)
  • 201 Created:
    请求被创建完成,同时新的资源被创建。
  • 202 Accepted:
    供处理的请求已被接受,但是处理未完成。
  • 203 Non-authoritative Information:
    文档已经正常地返回,但一些应答头可能不正确,因为使用的是文档的拷贝。
  • 204 No Content:
    没有新文档。浏览器应该继续显示原来的文档。如果用户定期地刷新页面,而Servlet可以确定用户文档足够新,这个状态代码是很有用的。
  • 205 Reset Content:
    没有新文档。但浏览器应该重置它所显示的内容。用来强制浏览器清除表单输入内容。
  • 206 Partial Content:
    客户发送了一个带有Range头的GET请求,服务器完成了它。
    3.3 状态码3xx:重定向
  • 300 Multiple Choices:
    多重选择。链接列表。用户可以选择某链接到达目的地。最多允许五个地址。
  • 301 Moved Permanently:
    所请求的页面已经转移至新的url
  • 302 Found:
    所请求的页面已经临时转移至新的url。
  • 303 See Other:
    所请求的页面可在别的url下被找到。
  • 304 Not Modified:
    未按预期修改文档。客户端有缓冲的文档并发出了一个条件性的请求(一般是提供If-Modified-Since头表示客户只想比指定日期更新的文档)。服务器告诉客户,原来缓冲的文档还可以继续使用。
  • 305 Use Proxy:
    客户请求的文档应该通过Location头所指明的代理服务器提取。
  • 306 Unused:
    此代码被用于前一版本。目前已不再使用,但是代码依然被保留。
  • 307 Temporary Redirect:
    被请求的页面已经临时移至新的url。
    3.4 状态码4xx:客户端错误
  • 400 Bad Request:
    服务器未能理解请求。
  • 401 Unauthorized:
    被请求的页面需要用户名和密码。
  • 401.1:
    登录失败。
  • 401.2:
    服务器配置导致登录失败。
  • 401.3:
    由于 ACL 对资源的限制而未获得授权。
  • 401.4:
    筛选器授权失败。
  • 401.5:
    ISAPI/CGI 应用程序授权失败。
  • 401.7:
    访问被 Web 服务器上的 URL 授权策略拒绝。这个错误代码为 IIS 6.0 所专用。
  • 402 Payment Required:
    此代码尚无法使用。
  • 403 Forbidden:
    对被请求页面的访问被禁止。
  • 404 Not Found:
    服务器无法找到被请求的页面。
  • 405 Method Not Allowed:
    请求中指定的方法不被允许。
  • 406 Not Acceptable:
    服务器生成的响应无法被客户端所接受。
  • 407 Proxy Authentication Required:
    用户必须首先使用代理服务器进行验证,这样请求才会被处理。
  • 408 Request Timeout:
    请求超出了服务器的等待时间。
  • 409 Conflict:
    由于冲突,请求无法被完成。
  • 410 Gone:
    被请求的页面不可用。
  • 411 Length Required:
    “Content-Length” 未被定义。如果无此内容,服务器不会接受请求。
  • 412 Precondition Failed:
    请求中的前提条件被服务器评估为失败。
  • 413 Request Entity Too Large:
    由于所请求的实体的太大,服务器不会接受请求。
  • 414 Request-url Too Long:
    由于url太长,服务器不会接受请求。当post请求被转换为带有很长的查询信息的get请求时,就会发生这种情况。
  • 415 Unsupported Media Type:
    由于媒介类型不被支持,服务器不会接受请求。
  • 416 Requested Range Not Satisfiable:
    服务器不能满足客户在请求中指定的Range头。
  • 417 Expectation Failed:
    执行失败。
  • 423:
    锁定的错误。
    3.5 状态码5 服务端错误**
  • 500 Internal Server Error:
    请求未完成。服务器遇到不可预知的情况。
  • 501 Not Implemented:
    请求未完成。服务器不支持所请求的功能。
  • 502 Bad Gateway:
    请求未完成。服务器从上游服务器收到一个无效的响应。
  • 503 Service Unavailable:
    请求未完成。服务器临时过载或宕机。
  • 504 Gateway Timeout:
    网关超时。
  • 505 HTTP Version Not Supported:
    服务器不支持请求中指明的HTTP协议版本。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值