首页 > 代码库 > http协议

http协议

2016-06-05 21:20:14

一、HTTP协议简介

二、客户端请求消息

       HTTP请求方法

       URL

三、服务器响应消息

       HTTP状态码

 

一、简介:

HTTP协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,基于TCP/IP通信协议来传递数据(HTML 文件, 图片文件, 查询结果等),所有的WWW文件都必须遵守这个标准。

HTTP默认端口号为80。

HTTP三点注意事项:

HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

HTTP是媒体独立的:这意味着,只要客户端和服务器知道如何处理的数据内容,任何类型的数据都可以通过HTTP发送。客户端以及服务器指定使用适合的MIME-type内容类型。

HTTP是无状态:HTTP协议是无状态协议。无状态是指协议对于事务处理没有记忆能力。缺少状态意味着如果后续处理需要前面的信息,则它必须重传,这样可能导致每次连接传送的数据量增大。另一方面,在服务器不需要先前信息时它的应答就较快。

浏览器作为HTTP客户端通过URL(URL(统一资源定位符)向HTTP服务端即WEB服务器发送所有请求。 

技术分享

 http是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。

URL:

http://host[":"port][abs_path]

    http表示要通过HTTP协议来定位网络资源;

    host表示合法的Internet主机域名或者IP地址;

    port指定一个端口号,为空则使用缺省端口80;

abs_path指定请求资源的URI;如果URL中没有给出abs_path,那么当它作为请求URI时,必须以“/”的形式给出,通常这个工作浏览器自动帮我们完成。

HTTP是基于客户端/服务端(C/S)的架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。

一个HTTP"客户端"是一个应用程序(Web浏览器或其他任何客户端),通过连接到服务器达到向服务器发送一个或多个HTTP的请求的目的。

一个HTTP"服务器"同样也是一个应用程序(通常是一个Web服务,如Apache Web服务器或IIS服务器等),通过接收客户端的请求并向客户端发送HTTP响应数据。

HTTP使用统一资源标识符(Uniform Resource Identifiers, URI)来传输数据和建立连接。???

一旦建立连接后,数据消息就通过类似Internet邮件所使用的格式[RFC5322]和多用途Internet邮件扩展(MIME)[RFC2045]来传送。

 

二、客户端请求消息

客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的一般格式。

技术分享

请求行:以一个方法符号开头,以空格分开,后面跟着请求的URI和协议的版本。

格式如下:Method Request-URL HTTP-Version CRLF 

其中 Method表示请求方法;Request-URL是一个统一资源定位符;HTTP-Version表示请求的HTTP协议版本;CRLF表示回车和换行(除了作为结尾的CRLF外,不允许出现单独的CR或LF字符)。

1、HTTP请求方法

HTTP1.0定义了三种请求方法: GET, POST 和 HEAD方法。

HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。

最常用的还是get、post方法。 

在客户机和服务器之间进行请求-响应时,最常用的就是get和post:下面将这两种方法进行比较

●GET - 从指定的资源请求数据。

●POST - 向指定的资源提交要被处理的数据

GET:查询字符串(名称/值对)是在 GET 请求的 URL 中发送的:/test/demo_form.asp?name1=value1&name2=value2

有关 GET 请求的其他一些注释:

●   GET 请求可被缓存

●   GET 请求保留在浏览器历史记录中

●   GET 请求可被收藏为书签

●   GET 请求不应在处理敏感数据时使用

●   GET 请求有长度限制

●   GET 请求只应当用于取回数据

POST:查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的:

POST /test/demo_form.asp HTTP/1.1

Host: w3schools.com

name1=value1&name2=value2

有关 POST 请求的其他一些注释:

●   POST 请求不会被缓存

●   POST 请求不会保留在浏览器历史记录中

●   POST 不能被收藏为书签

●   POST 请求对数据长度没有要求

下面的表格比较了两种 HTTP 方法:GET 和 POST。

GET                        POST

后退按钮/刷新        无害         数据会被重新提交(浏览器应该告知用户数据会被重新提交)。

书签         可收藏为书签         不可收藏为书签

缓存         能被缓存         不能缓存

编码类型         application/x-www-form-urlencoded      application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码。

历史         参数保留在浏览器历史中。         参数不会保存在浏览器历史中。

对数据长度的限制         是的。当发送数据时,GET 方法向 URL 添加数据;URL 的长度是受限制的(URL 的最大长度是 2048 个字符)。       无限制。

对数据类型的限制         只允许 ASCII 字符。    没有限制。也允许二进制数据。

安全性    

与 POST 相比,GET 的安全性较差,因为所发送的数据是 URL 的一部分。

在发送密码或其他敏感信息时绝不要使用 GET !

POST 比 GET 更安全,因为参数不会被保存在浏览器历史或 web 服务器日志中。

可见性     数据在 URL 中对所有人都是可见的。      ?数据不会显示在 URL 中。

 

服务器响应消息

HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文。

技术分享

状态行:格式如下

HTTP-Version Status-Code Reason-Phrase CRLF

其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。

 

 

实例

下面实例是一点典型的使用GET来传递数据的实例:

客户端请求:

GET /hello.txt HTTP/1.1

User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3

Host: www.example.com

Accept-Language: en, mi

服务端响应:

HTTP/1.1 200 OK

Date: Mon, 27 Jul 2009 12:28:53 GMT

Server: Apache

Last-Modified: Wed, 22 Jul 2009 19:15:56 GMT

ETag: "34aa387-d-1568eb00"

Accept-Ranges: bytes

Content-Length: 51

Vary: Accept-Encoding

Content-Type: text/plain

输出结果:

Hello World! My payload includes a trailing CRLF.

 

 

 

HTTP状态码(HTTP Status Code)

当浏览者访问一个网页时,浏览者的浏览器会向网页所在服务器发出请求。当浏览器接收并显示网页前,此网页所在的服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。

下面是常见的HTTP状态码:

200     OK               //客户端请求成功

301 - 资源(网页等)被永久转移到其它URL

404 - 请求的资源(网页等)不存在

500 - 内部服务器错误

HTTP状态码由三个十进制数字组成,第一个十进制数字定义了状态码的类型,后两个数字没有分类的作用。HTTP状态码共分为5种类型:

常见状态代码、状态描述、说明:

400     Bad Request           //客户端请求有语法错误,不能被服务器所理解

401     Unauthorized         //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用

403     Forbidden               //服务器收到请求,但是拒绝提供服务

404     Not Found              //请求资源不存在,eg:输入了错误的URL

500     Internal Server Error          //服务器发生不可预期的错误

503     Server Unavailable            //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

eg:HTTP/1.1 200 OK (CRLF)

 

http协议