HTTP请求与状态码

HTTP的请求与响应

HTTP通信由两部分组成: 客户端请求消息 与 服务器响应消息

(一)浏览器发送HTTP请求的过程:

当用户在浏览器的地址栏中输入一个URL并按回车键之后,浏览器会向HTTP服务器发送HTTP请求。HTTP请求主要分为“Get”和“Post”两种方法。

当我们在浏览器输入URL http://www.baidu.com 的时候,浏览器发送一个Request请求去获取 http://www.baidu.com 的html文件,服务器把Response文件对象发送回给浏览器。

浏览器分析Response中的 HTML,发现其中引用了很多其他文件,比如Images文件,CSS文件,JS文件。 浏览器会自动再次发送Request去获取图片,CSS文件,或者JS文件。

当所有的文件都下载成功后,网页会根据HTML语法结构,完整的显示出来了。

【URL(Uniform / Universal Resource Locator的缩写)】:

统一资源定位符,是用于完整地描述Internet上网页和其他资源的地址的一种标识方法。

【基本格式:】scheme://host[:port#]/path/…/[?query-string][#anchor]

                        协议://IP[:端口#]/路径/.../[?参数][#锚]

【解析:】

(1)scheme:协议(例如:http, https, ftp)

(2)host:服务器的IP地址或者域名

(3)port#:服务器的端口(如果是走协议默认端口,缺省端口80)

(4)path:访问资源的路径

(5)query-string:参数,发送给http服务器的数据

(6)anchor:锚(跳转到网页的指定锚点位置)

例如:

http://www.baidu.com
http://192.168.0.116:8080/index.jsp
http://item.jd.com/11936238.html#product-detail

(二)客户端HTTP请求:

URL只是标识资源的位置,而HTTP是用来提交和获取资源。

客户端发送一个HTTP请求到服务器的请求消息,包括以下格式:请求行、请求头部、空行、请求数据四个部分组成

HTTP请求主要分为Get和Post两种方法:

  GET是从服务器上获取数据,POST是向服务器传送数据

  GET请求参数显示,都显示在浏览器网址上,HTTP服务器根据该请求所包含URL中的参数来产生响应内容,即“Get”请求的参数是URL的一部分。 例如: http://www.baidu.com/s?wd=Chinese

  POST请求参数在请求体当中,消息长度没有限制而且以隐式的方式进行发送,通常用来向HTTP服务器提交量比较大的数据(比如请求中包含许多参数或者文件上传操作等),请求的参数包含在“Content-Type”消息头里,指明该消息体的媒体类型和编码,

  注意:避免使用Get方式提交表单,因为有可能会导致安全问题。 比如说在登陆表单中用Get方式,用户输入的用户名和密码将在地址栏中暴露无遗。

常用的请求报头:这个我在后面文章里再做介绍

当浏览器向Web服务器发出请求时,它向服务器传递了一个数据块,也就是请求信息

HTTP请求信息由3部分组成:

①请求方法URI协议/版本 ;②请求头(Request Header) ;③请求正文 

下面是一个HTTP请求的例子:

GET/sample.jspHTTP/1.1
Accept:image/gif.image/jpeg,*/*
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible;MSIE5.01;Window NT5.0)
Accept-Encoding:gzip,deflate
username=jinqiao&password=1234

 (1) 请求方法URI协议/版本 

请求的第一行是“方法URL议/版本”:GET/sample.jsp HTTP/1.1 

以上代码中“GET”代表请求方法,“/sample.jsp”表示URI,“HTTP/1.1代表协议和协议的版本。 

根据HTTP标准,HTTP请求可以使用多种请求方法。例如:HTTP1.1支持7种请求方法:GET、POST、HEAD、OPTIONS、PUT、DELETE和TARCE。在Internet应用中,最常用的方法是GET和POST。 

URL完整地指定了要访问的网络资源,通常只要给出相对于服务器的根目录的相对目录即可,因此总是以“/”开头,最后,协议版本声明了通信过程中使用HTTP的版本。

(2) 请求头(Request Header) 

请求头包含许多有关的客户端环境和请求正文的有用信息。例如,请求头可以声明浏览器所用的语言,请求正文的长

Accept:image/gif.image/jpeg.*/*
Accept-Language:zh-cn
Connection:Keep-Alive
Host:localhost
User-Agent:Mozila/4.0(compatible:MSIE5.01:Windows NT5.0)
Accept-Encoding:gzip,deflate.

 (3)请求正文 

请求头和请求正文之间是一个空行,这个行非常重要,它表示请求头已经结束,接下来的是请求正文。请求正文中可以包含客户提交的查询字符串信息: 

username=jinqiao&password=1234 

 在以上的例子的HTTP请求中,请求的正文只有一行内容。当然,在实际应用中,HTTP请求正文可以包含更多的内容。 

HTTP应答与HTTP请求相似,HTTP响应也由3个部分构成,分别是: 

①协议状态版本代码描述;②响应头(Response Header);③响应正文 

下面是一个HTTP响应的例子:

HTTP/1.1 200 OK
Server:Apache Tomcat/5.0.12
Date:Mon,6Oct2003 13:23:42 GMT
Content-Length:112
<html>
<head>
<title>HTTP响应示例<title>
</head>
<body>
Hello HTTP!
</body>
</html>

 协议状态代码描述HTTP响应的第一行类似于HTTP请求的第一行,它表示通信所用的协议是HTTP1.1服务器已经成功的处理了客户端发出的请求(200表示成功): 

HTTP/1.1 200 OK 

响应头(Response Header)响应头也和请求头一样包含许多有用的信息,例如服务器类型、日期时间、内容类型和长度等:

Server:Apache Tomcat/5.0.12
Date:Mon,6Oct2003 13:13:33 GMT
Content-Type:text/html
Last-Moified:Mon,6 Oct 2003 13:23:42 GMT
Content-Length:112

 响应正文响应正文就是服务器返回的HTML页面:

<html>
<head>
<title>HTTP响应示例<title>
</head>
<body>
Hello HTTP!
</body>
</html>

 响应头和正文之间也必须用空行分隔。

常见方法支持的HTTP协议版本

HTTP1.0、HTTP1.1支持的方法

【HTTP状态码】

HTTP状态码(HTTP Status Code)是用以表示网页服务器HTTP响应状态的3位数字代码

当浏览器从 web 服务器请求服务时,可能会发生错误

从而有可能会返回下面的一系列状态消息:

(1)1xx: 信息

(2)2xx: 成功

(3)3xx:重定向

(4)4xx:客户端错误(也称请求错误)

(5)5xx:服务器错误

1xx:

代表请求已被接受,需要继续处理。这类响应是临时响应,只包含状态行和某些可选的响应头信息,并以空行结束。由于 HTTP/1.0 协议中没有定义任何 1xx 状态码,所以除非在某些试验条件下,服务器禁止向此类客户端发送 1xx 响应。

2xx:

代表请求已成功被服务器接收、理解、并接受

3xx:

代表需要客户端采取进一步的操作才能完成请求。通常,这些状态码用来重定向,后续的请求地址(重定向目标)在本次响应的 Location 域中指明。

当且仅当后续的请求所使用的方法是 GET 或者 HEAD 时,用户浏览器才可以在没有用户介入的情况下自动提交所需要的后续请求。客户端应当自动监测无限循环重定向(例如:A->A,或者A->B->C->A),因为这会导致服务器和客户端大量不必要的资源消耗。按照 HTTP/1.0 版规范的建议,浏览器不应自动访问超过5次的重定向。

4xx:

代表了客户端看起来可能发生了错误,妨碍了服务器的处理。除非响应的是一个 HEAD 请求,否则服务器就应该返回一个解释当前错误状况的实体,以及这是临时的还是永久性的状况。这些状态码适用于任何请求方法。浏览器应当向用户显示任何包含在此类错误响应中的实体内容。

如果错误发生时客户端正在传送数据,那么使用TCP的服务器实现应当仔细确保在关闭客户端与服务器之间的连接之前,客户端已经收到了包含错误信息的数据包。如果客户端在收到错误信息后继续向服务器发送数据,服务器的TCP栈将向客户端发送一个重置数据包,以清除该客户端所有还未识别的输入缓冲,以免这些数据被服务器上的应用程序读取并干扰后者。

5xx:

代表了服务器在处理请求的过程中有错误或者异常状态发生,也有可能是服务器意识到以当前的软硬件资源无法完成对请求的处理。除非这是一个HEAD 请求,否则服务器应当包含一个解释当前错误状态以及这个状况是临时的还是永久的解释信息实体。浏览器应当向用户展示任何在当前响应中被包含的实体。

这些状态码适用于任何响应方法。

【简单版】

100 Continue 继续,一般在发送post请求时,已发送了http header之后服务端将返回此信息,表示确认,之后发送具体参数信息

200 OK 正常返回信息

201 Created 请求成功并且服务器创建了新的资源

202 Accepted 服务器已接受请求,但尚未处理

301 Moved Permanently 请求的网页已永久移动到新位置。

302 Found 临时性重定向。

303 See Other 临时性重定向,且总是使用 GET 请求新的 URI。

304 Not Modified 自从上次请求后,请求的网页未修改过。

400 Bad Request 服务器无法理解请求的格式,客户端不应当尝试再次使用相同的内容发起请求。

401 Unauthorized 请求未授权。

403 Forbidden 禁止访问。

404 Not Found 找不到如何与 URI 相匹配的资源。

500 Internal Server Error 最常见的服务器端错误。

503 Service Unavailable 服务器端暂时无法处理请求(可能是过载或维护)。

.

猜你喜欢

转载自570109268.iteye.com/blog/2409565