​计算机网络-HTTP(超文本传送协议)响应状态码 及 请求方法

98 阅读6分钟

​计算机网络-HTTP(超文本传送协议)响应状态码 及 请求方法

 1.HTTP的URL的一般形式

        http://<主机>:<端口>/<路径>

        端口号默认为80,可省略。

<协议>和<主机>部分不区分大小写,但是<路径>有时要区分大小写

2.HTTP的操作过程

        HTTP协议定义了浏览器(即万维网客户进程)怎样向万维网服务器请求万维网文档,以及服务器怎样把文档传送给浏览器。HTTP是面向事务(一系列的信息交换,不可分割的整体)的应用层协议,它是万维网上能够可靠地交换文件的重要基础。
HTTP 不仅传送完成超文本跳转所必需的信息, 而且也传送任何可从互联网上得到的 信息, 如文本、 超文本、 声音和图像等。
万维网的大致工作过程,如下图:

​编辑

每个万维网网点都有一个 服务器进程, 它不断地监听 TCP的端口80, 以便发现是否有浏览器向它发出连接建立请求。一旦监听到连接建立请求并建立了TCP 连接之后, 浏览器就向万维网 服务器发出 浏览某个页面的请求, 服务器接着就返回所请求的页面作为响应。 最后, TCP连接就被释放了。 在浏览器和 服务器之间的请求和响应的交互, 必须按照规定的格式和遵循一定的规则。 这些格式和规则就是超文本传送协议HTTP。

用户在点击鼠标链接某个万维网文档时, HTTP协议首先要和服务器建立TCP连接。 这需要使用三报文握手。
当建立TCP连接的三报文握手的前两部分完成后(即经过了 一个RTT时间后), 万维网客户就把 HTTP请求报文, 作为建立TCP连接的三报文握手中的第三个报文的数据, 发送给万维网服务器。 服务器收到HTTP请求报文后, 就把所请求的文档作为响应报文 返回给客户。
​编辑

         第三次握手HTTP会请求报文   之后服务器会返回HTTP响应报文。

3.HTTP响应常见状态码

常见状态码:

200     //服务器成功返回网页
404     //请求的网页不存在
503     //服务器不可用

1xx(临时响应)

表示临时响应并需要请求者继续执行操作的状态码。

100     //继续  请求者应当继续提出请求。服务器返回此代码表示已收到请求的第一部分,正在等待其余部 
          分。
101     //切换协议  请求者已要求服务器切换协议,服务器已确认并准备切换。

2xx(成功)

表示成功处理了请求的状态码。

200     //成功  服务器已经成功处理了请求。通常,这表示服务器提供了请求的网页。
201     //已创建  请求成功并且服务器创建了新的资源
202     //已接受  服务器已接受请求,但尚未处理
203     //非授权信息  服务器已经成功处理了请求,但返回的信息可能来自另一来源
204     //无内容  服务器成功处理了请求,但没有返回任何内容
205     //重置内容  服务器成功处理了请求,但没有返回任何内容
206     //部分内容  服务器成功处理了部分GET请求

3xx(重定向)

表示要完成请求,需要进一步操作。通常,这些状态代码用来重定向。

300     //多种选择  针对请求,服务器可执行多种操作。服务器可根据请求者(user agent)选择一项操作,    
          或提供操作列表供请求者选择。
301     //永久移动  请求的网页已永久移动到新位置。服务器返回此响应(对GET或HEAD请求的响应)时,会 
          自动将请求者转到新位置。
302     //临时移动  服务器目前从不同位置的网页响应请求,但请求者应继续使用原有位置来进行以后的请求
303     //查看其它位置  请求者应当对不同的位置使用单独的GET请求来检索响应时,服务器返回此代码
304     //未修改  自动上次请求后,请求的网页未修改过。服务器返回此响应,不会返回网页的内容
305     //使用代理  请求者只能使用代理访问请求的网页。如果服务器返回此响应,还表示请求者应使用代理
307     //临时性重定向  服务器目前从不同位置的网页响应请求,但请求者应继续使用原有的位置来进行以后 
          的请求

4xx(请求错误)

这些状态码表示请求可能出错,妨碍了服务器的处理。

400     //错误请求  服务器不理解请求的语法
401     //未授权  请求要求身份验证。对于需要登录的网页,服务器可能返回此响应
403     //禁止  服务器拒绝请求
404     //未找到  服务器找不到请求的网页
405     //方法禁用  禁用请求中指定的方法
406     //不接受  无法使用请求的内容特性响应请求的网页
407     //需要代理授权  此状态码与401(未授权)类似,但指定请求者应当授权使用代理
408     //请求超时  服务器等候请求时发生超时
409     //冲突  服务器在完成请求时发生冲突。服务器必须在响应中包含有关冲突的信息。
410     //已删除  如果请求的资源已永久删除,服务器就会返回此响应
411     //需要有效长度  服务器不接受不含有效内容长度标头字段的请求
412     //未满足前提条件  服务器未满足请求者在请求者设置的其中一个前提条件
413     //请求实体过大  服务器无法处理请求,因为请求实体过大,超出了服务器的处理能力
414     //请求的URI过长  请求的URI(通常为网址)过长,服务器无法处理
415     //不支持媒体类型  请求的格式不受请求页面的支持
416     //请求范围不符合要求  如果页面无法提供请求的范围,则服务器会返回此状态码
417     //未满足期望值  服务器未满足“期望”请求标头字段的要求

5xx(服务器错误)

这些状态码表示服务器在尝试处理请求时发生内部错误。这些错误可能是服务器本身的错误,而不是请求出错。

500     //服务器内部错误  服务器遇到错误,无法完成请求
501     //尚未实施  服务器不具备完成请求的功能。例如,服务器无法识别请求方法时可能会返回此代码
502     //错误网关  服务器作为网关或代理,从上游服务器无法收到无效响应
503     //服务器不可用  服务器目前无法使用(由于超载或者停机维护)。通常,这只是暂时状态
504     //网关超时  服务器作为网关代理,但是没有及时从上游服务器收到请求
505     //HTTP版本不受支持  服务器不支持请求中所用的HTTP协议版本

4.HTTP请求的方法:

HTTP/1.1协议中共定义了八种方法(有时也叫“动作”),来表明Request-URL指定的资源不同的操作方式
HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法

1、OPTIONS
返回服务器针对特定资源所支持的HTTP请求方法,也可以利用向web服务器发送‘*’的请求来测试服务器的功能性
2、HEAD
向服务器索与GET请求相一致的响应,只不过响应体将不会被返回。这一方法可以再不必传输整个响应内容的情况下,就可以获取包含在响应小消息头中的元信息。
3、GET
向特定的资源发出请求。注意:GET方法不应当被用于产生“副作用”的操作中,例如在Web Application中,其中一个原因是GET可能会被网络蜘蛛等随意访问。Loadrunner中对应get请求函数:web_link和web_url
4、POST
向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。 Loadrunner中对应POST请求函数:web_submit_data,web_submit_form
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服务器支持扩展自定义的方法。

get与post请求的区别:

1,GET在浏览器回退是无害的,而POST会再次提交请求

2,GET产生的URL地址可以被网址收藏BOOKMARK,而POST不可以

3,GET请求只能进行url编码,而post支持多种编码形式

4,get请求参数会被完整保留在浏览器历史记录里,而post中的参数不会被保留

5,get请求在url中传递的参数是有长度限制的不超过4k,而post没有

6,对参数的数据类型,get只接受ASCII类型,而post没有限制

7,get比post更不安全,因为参数直接暴露在url上,所以不能用传递敏感信息

8,get参数通过url传递,post放在request body报文体中

9,get产生一个tcp数据包,post产生两个tcp数据包