HTTP请求响应机制与响应状态码
转载来源:http://blog.csdn.net/xyw591238/article/details/51907143
HTTP协议
Internate的基本协议是TCP/IP(传输控制协议和网际协议)。而目前使用的FTP,HTTP都是建立在TCP/IP上的应用层协议。不同的协议对应不同的应用。而HTTP协议是Web应用所使用的主要协议。
HTTP协议基于请求响应模式,客户端向服务器发送一个请求,请求头包含请求的方法,URI,协议版本以及包含请求修饰符,客户端信息和内容的类似MIME的消息结果。服务器则以一个状态行为作为响应,相应的内容包括消息协议的版本,成功或错误编码加上包含服务器信息,实体元信息以及可能的实体内容。
HTTP协议是无状态协议,依赖瞬间或者近乎瞬间的请求处理。请求信息被立即发送,理想的情况是没有延迟地进行处理;不过,延迟还是客观存在的。HTTP协议有一种内置机制,在消息的传递时间上有一定的灵活性:超时机制。一个超时就是客户端等待请求消息返回信息的最长时间。
HTTP协议的请求和响应消息如果没有发送并传递成功的话,不保存任何已传递的信息。比如,单击“提交”按钮,如果表单没有发出去,则浏览器将会显示错误信息页,并且返回空白表单。虽然没有提交成功,但是HTTP不保存任何表单信息。
由于HTTP协议的上述特点,通常,客户端每次需要更新信息都必须重新向服务器发起请求,客户端接受到服务器端返回的信息后再刷新屏幕内容。
基于HTTP协议的客户端/服务器请求响应机制的信息交换过程包含下面几个步骤:
1.建立连接:客户端与服务器建立TCP连接
2.发送请求:打开一个连接后,客户端把请求信息发送到服务器的相应端口上,完成请求动作提交。
3.发送响应:服务器在处理完客户端请求之后,要向客户端发送响应消息。
4.关闭连接:客户端和服务器端都可以关闭套接字来结束TCP/IP对话。
HTTP的工作机制就是请求消息和响应消息。最简单的情况是一个用户输入一个站点地址,发送一个请求。之后,浏览器返回所请求的页面,这个页面可能是最简单的HTML页面,也可能是动态编译后的页面。如果这个页面有错或者不存在,则WEB服务器则将发送一个错误的信息页面。
WEB服务器发送错误信息页是因为HTTP没有内置的处理机制,是无状态的,传输协议不记忆从一个请求消息到另一个请求消息的任何信息(备注:意思是说,当发送一个请求消息发生错误,由于HTTP是无状态的,所以不能将这个发生错误的请求消息传递给另一个请求消息进行处理,也是请求消息不能转弯,必须一次传到并得到处理) 这个特点可以保证WEB的一致性。但是,用户常常需要记忆一些设置内容或者浏览过程,这就需要在web页面或者URL中携带各种参数及值。HTTP请求有多种样式。其中常用的有GET,POST,HEAD请求。 //这3个请求暂时不提了
状态管理
正如前面所提到的,HTTP协议是无状态的,不能保存每次提交的信息,即当服务器返回与请求相对应的应答之后,这次事务的所有信息就都丢掉了。如果用户发来一个新的请求,服务器也无法知道它是否与上次的请求有联系。
对于简单的静态HTML文件来说,这种特性是很适用,但是对于那些需要多次提交请求才能完成的WEB操作比如购物车来说,就成了问题了。服务器端的WEB应用程序必须允许用户通过多个步骤才能完成全部的物品采购。在这种情况下,应用程序必须跟踪由同一个浏览器发送的多个请求所提供的信息,即记住用户的交易状态。
通常,采用两种方法来解决这个问题。一个是每次应答都返回完整的状态,让浏览器把它作为下次请求的一部分再发送过来。二是把状态保存在服务器的某个地方,只发送回一个标识符,浏览器在下次提交中把这个标识符发送过来;这样,就可以定位存贮在服务器上的状态信息了。
在这两种方法中,信息可以通过下列三种方法中的一种发送给浏览器:
1.作为COOKIE; 但是不是所有浏览器都支持,而且用户也可以禁用COOKIE
2.附加在主体的URL中
2.作为隐藏域嵌入HTML表单中;
当表但提交时,浏览器将作为常规HTTP参数的方式将这些信息返回服务器,当状态信息被注入时,它将作为请求URL的一部分传送到服务器,但是这在浏览器和服务器之间来回传递信息的效率较低,所以一般还是选择把信息保存在服务器中,即上面两种方法中的第二种。在浏览器和服务器之间来回传递一个标识符,这就是所谓的会话(session)跟踪。来自浏览器的所有包含同一个标识符(这里是SESSIONID)的请求同属于一个会话。
会话的有效期直到它被终止为止,或者当用户在异端时间内没有动作,由服务器自动设置为过期。目前没有办法通知服务器用户已经关闭浏览器,因为在浏览器和服务器之间没有一个持久的连接,并且浏览器关闭时也不向服务器发送信息。同时,关闭浏览器通常意味着会话ID丢失;COOKIE将过期,或者注入了信息的URL将不能再使用。所以当用户再次打开浏览器的时候,服务器无法将新的请求与以前的会话联系起来,而只能创建一个新的会话。然而,所有与前一个会话有关的数据依然存放在服务器上,直到会话过期被清除为止。
响应状态吗表示的意义
200:表示成功,正常结果;
302:表示重定向,转到别的站点;
304:表示未修改;
404:表示找不到资源;
500:表示内部服务器错误;
附上HTTP的请求和响应详解链接
1、http://canrry.iteye.com/blog/1331292
2、http://blog.csdn.net/fengzijia/article/details/50134819
HTTP请求响应机制与响应状态码的更多相关文章
- HTTP 笔记与总结(2 )HTTP 协议的(请求行的)请求方法 及 (响应行的)状态码
(请求行的)请求方法 包括: GET,POST,HEAD,PUT,TRACE,DELETE,OPTIONS 注意:这些请求方法虽然是 HTTP 协议规定的,但是 Web Server 未必允许或支持这 ...
- HTML 请求头,响应头和 HTTP状态码
请求头 选项 说明 Accept: text/html,application/xhtml+xml,application/xml;q=0.9,/;q=0.8 告诉服务器,当前客户端可以接收的文档类型 ...
- 接口测试——HttpClient工具的https请求、代理设置、请求头设置、获取状态码和响应头
目录 https请求 代理设置 请求头设置 获取状态码 接收响应头 https请求 https协议(Secure Hypertext Transfer Protocol) : 安全超文本传输协议, H ...
- HTTP协议响应消息的常用状态码【转】
“100″ : Continue(继续) 初始的请求已经接受,客户应当继续发送请求的其余部分.(HTTP 1.1新) “101″ : Switching Protocols(切换协议) 请求者已要求服 ...
- http缓存机制之304状态码
在网上看到一篇关于解释浏览器缓存更新机制304状态码的文章,里面说如果请求头中的If-Modified-Since字段和If-None-Match字段的值分别和响应头中的Last-Modified字段 ...
- LB层到Real Server之间访问请求的响应时间及HTTP状态码监控及报警设置
为了监控到各业务的访问质量,基于LB层的Nginx日志,实现LB层到Real Server之间访问请求的响应时间(即upstream_response_time)及HTTP状态码(即upstream_ ...
- http响应需要记住的状态码
200:请求成功. 301:被请求的资源已永久移动到新位置.302:请求的资源现在临时从不同的 URI 响应请求.401:当前请求需要用户验证.403:服务器已经理解请求,但是拒绝执行它. 404:请 ...
- HTTP请求响应报文&&相关状态码&&GET_POST请求方法 总结
HTTP请求报文: 一个HTTP请求报文由四个部分组成:请求行.请求头部.空行.请求数据 1.请求行 请求行由请求方法字段.URL字段和HTTP协议版本字段3个字段组成,它们用空格分隔.比如 GE ...
- HTTP协议简介详解 HTTP协议发展 原理 请求方法 响应状态码 请求头 请求首部 java模拟浏览器客户端服务端
协议简介 协议,自然语言里面就是契约,也是双方或者多方经过协商达成的一致意见; 契约也即类似于合同,自然有甲方123...,乙方123...,哪些能做,哪些不能做; 通信协议,也即是双方通过网络通信必 ...
随机推荐
- 每周问题系列 - JavaFX界面没响应,Maven编译自动忽略rt包
本人博客文章网址:https://www.peretang.com/weekly-problem-session-week-31/ 前言 新开一个系列, 用来记录每周遇到的问题 JavaFX界面没响应 ...
- css2--垂直对齐
## CSS2 vertical-align 垂直对齐 - baseline 默认值.基于基线对齐 - middle 位于同一行的非衬线字体小写字母的 1/2 处.不要为父 ...
- JAVA中extends 与implements的用法
1. 在类的声明中,通过关键字extends来创建一个类的子类.一个类通过关键字implements声明自己使用一个或者多个接口.extends 是继承某个类, 继承之后可以使用父类的方法, 也可以重 ...
- MySQL之增_insert-replace
MySQL增删改查之增insert.replace 一.INSERT语句 带有values子句的insert语句,用于数据的增加 语法: INSERT [INTO] tbl_name[(col_nam ...
- MQ选型对比文档
几种MQ产品说明: ZeroMQ : 扩展性好,开发比较灵活,采用C语言实现,实际上他只是一个socket库的重新封装,如果我们做为消息队列使用,需要开发大量的代码 RabbitMQ ...
- python自动化运维四:nmap端口扫描
p { margin-bottom: 0.25cm; line-height: 120% } a:link { } 端口扫描器: Python的第三方模块python-nmap可以实现高效的端口扫描. ...
- angularjs select标签中参数的传递
今天做的一个demo中需要一个下拉选择框,并根据所选择的内容向服务器发送请求. 首先百度了一下angularjs关于select的使用,一种采用ng-repeat的方式. <select ng- ...
- Could not establish trust relationship for the SSL/TLS secure channel 问题解决方法
最近在写一个跟第三方对接的数据同步服务,在本地都没有问题,今天放到生产环境测试报错: System.Net.WebException: The underlying connection was cl ...
- 80C51 K1控制D1发光
#include "reg52.h" typedef unsigned char u8; typedef unsigned int u16; sbit led = P2^0; sb ...
- yii2 Rbac使用yii命令一键建表
首先在web.php和console.php配置authmanager组件,web.php是应用配置文件,console.php是yii命令配置文件,都需要配置. 在components加入如下配置: ...