您的位置:首页 > 理论基础 > 计算机网络

HTTP协议

2015-08-29 12:56 225 查看



Web请求、响应的核心是HTTP协议。HTTP是一个应用层的协议,主要有如下特点:

1) 客户端-服务端模式(请求-响应模式);

2) 简单快速:客户端向服务器发送请求时,只需传送请求方法和URL;

3) 无状态:HTPP协议是无状态的,在每次请求-响应完成后,服务器将断开TCP连接;

1、 URL

HTTP是基于请求-响应的、无状态的、基于TCP的应用层协议。在发送HTTP请求时,必须要确定资源的路径。

HTTP URL(URL是一种特殊类型的URI):包含了用于查找某个资源的信息,其格式如下:
http://host[:port][abs_path]
http:表示通过HTTP协议来定位网络资源;

host:表示合法的Internet地址或IP地址;

port:指定服务器端口号,缺省为80;

abs_path:指定请求的URI,如果URL中没有abs_path,那么当它作为请求URI时必须以“/”的形式表示(浏览器自动完成),如在浏览器输入www.baidu.com时,浏览器会自动转换成http://www.baidu.com/。

2、 请求

HTTP请求由三部分组成,分别是:请求行、消息头、请求正文。示例如下:

POST /index.htmlHTTP/1.1 (CRLF) //请求行

Accept:text/plain,text/html(CRLF) //以下为消息头

Accept-Language:zh-cn(CRLF)

Content-Length:19(CRLF)

Accept-Encoding:gzip(CRLF)

Connection:keep-alive(CRLF)

Host:localhost:8080(CRLF)

User-Agent:Mozilla/5.0(CRLF)

(CRLF) //空行

user=ssl&pwd=123456 //正文

请求行以一个请求方法符号开头,后面跟着请求的URI和协议版本,各个部分以空格分开,格式为:request-methodrequest-uri http-version CRLF 。

其中request-method表示请求的方法,常用的方法有get和post;request-uri:表示网络资源的完整路径;http-version:表示HTTP协议的版本;CRLF表示回车和换行(除了使用CRLF作为结尾外,不允许出现单独的CR或LF字符)。

请求头包含包含了浏览器使用的语言,接收的媒体类型等信息;各个请求头之间用CRLF分隔;

常见的HTTP请求头
请求头

说明

Accept

指定客户端接收那些媒体类型

Accept-Charset

用于指定客户端接受的字符集

Accept-Encoding

用于指定可接受的内容编码,如gzip,deflate

Accept-Language

用于指定一种自然语言

Host

用于指定被请求资源的Internet主机和端口号

User-Agent

用于指定客户端使用的浏览器、操作系统等

Connection

当前连接是否保持

Pragma

指定请求的内容是否被缓存(HTTP/1.0)

Cache-Control

作用和Pragma类似(HTTP/1.1)

在请求头和请求正文之间与一个空行,该空行只有一个CRLF符。这个空行对HTTP请求格式非常重要,CRLF告诉HTTP服务器请求正文从哪里开始。

3、 响应

HTTP响应也是由三部分组成,分别是:状态行、消息头、响应正文。示例如下:

HTTP/1.1200 OK (CRLF) //状态行

Server:Microsoft-IIS/4.0(CRLF) //消息头

Content-Type:text/html(CRLF)

Content-Length:122(CRLF)

Last-Modified:Mon,5Jan 2015 13:13:12 GMT (CRLF)

(CRLF) //空行

<html> //响应正文

<head>

<title>HTTP ResponseExample</title>

</head>

<body>

Welcome to Binary Software

</body>

</html>

状态行格式为:http-versionstatus-code reason-phrase CRLF;各个部分以空格分隔,其中http-version:表示HTTP协议的版本;status-code:服务器返回的状态码;reason-phrase:表示状态码的描述;CRLF表示回车和换行(除了使用CRLF作为结尾外,不允许出现单独的CR或LF字符)。

常见的HTTP响应状态码
状态码

状态描述

说明

200

OK

请求成功

400

Bad Request

客户端请求语法错误

401

Unauthorized

请求未经授权

402

Forbidden

服务器拒绝服务

404

Not Found

资源不存在

500

Internal Server Error

服务错误

503

Server Unavailable

服务不能处理请求

总结:状态码有三位数字,第一位数字定义了响应的类别,如下

1xx:指示信息,表示请求已接受

2xx:表示请求已被成功接收、处理

3xx:重定向

4xx:客户端错误

5xx:服务端错误

常见的HTTP响应头
响应头
说明
Server
使用的服务器名称
Content-Type
服务器返回的正文媒体类型
Content-Encoding
与请求头的Accept-Encoding对应
Content-Language
描述了资源所用的自然语言,与Accept-Language对应
Content-Length
正文的长度
Keep-Alive
保持连接的时间
在消息头和响应正文之间与一个空行,该空行只有一个CRLF符。

4、 缓存

浏览器缓存是一个比较重要的机制,当我们希望获取最新的数据,而不是缓存数据时,需要在HTTP请求头添加一些信息,以告诉服务器要获取最新的数据,而不是缓存数据。

Cache-Control:用于指定是否缓存的指令,缓存指令是单向且独立的,也即:在响应头中出现的缓存指令未必在请求头中出现,并且一个请求的缓存指令并不会影响其他请求的缓存指令。

请求时Cache-Control的常用取值为no-cache,表示请求的所有内容不会被缓存;

响应时,Cache-Control的常用取值有:

l public:所有内容都被缓存;

l private:内容只缓存到私有缓存中;

l no-cache:所有内容被不会被缓存;

l no-store:所有内容都不会被缓存到Internet的临时文件中;

l max-age=xxx:缓存的内容将在xxx秒后失效,只在HTTP1.1中可用,和Last-Modified一起使用时优先级较高;

Cache-Control请求字段被各个浏览器支持的比较好,而且它的优先级也比较高,它和其他字段(如Expires)同时出现时,Cache-Control将覆盖其他字段。Pragma字段的作用和Cache-Control类似,最好是pragma和Cache-Control一起使用,如Pragma:no-cache;Cache-Control:no-cache。

Expires字段后面跟着一个日期和时间,超过这个时间值后,缓存的内容将失效,也就是浏览器在发出请求之前先检查这个页面的Expires字段,若过期就重新向服务器发送请求。

Last-Modified字段一般用于表示一个服务器上资源的最后修改时间,以便确定当前请求的资源是否是最新的。一般服务端在相应头中返回一个Last-Modified字段,告诉浏览器这个页面的最后修改时间,浏览器再次请求时在请求头中增加一个If-Modified-Since字段,询问当前缓存的页面是否是最新的,如果是最新的就返回304状态码,告诉浏览器是最新的,服务器也不会传输新的数据。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: