HTTP协议
2015-08-29 12:56
225 查看
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) |
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 | 保持连接的时间 |
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状态码,告诉浏览器是最新的,服务器也不会传输新的数据。
相关文章推荐
- NS2网络仿真环境的搭建和使用
- c# http get post 用法
- python爬虫 - python requests网络请求简洁之道
- python爬虫 - python requests网络请求简洁之道
- 网络抓包以及进行简单数据分析
- C#异步SOCKET发送帮肋类,支持UDP,TCP
- Idiot的间谍网络
- [Q&A] 初次yum安装httpd 遇到的问题
- 新版XMLHttpRequest支持跨域请求
- POJ1273-Drainage Ditches-网络流-最大流(模板题)
- muduo网络库源码学习————互斥锁
- iOS开发 网络请求——HTTP协议
- 《TCP/IP详解卷1:协议》——第3章 IP:网际协议(转载)
- TCP/UDP相关知识总汇
- Android网络请求,请求参数是中文导致的乱码问题
- linux网络编程中阻塞和非阻塞socket的区别
- httpclient请求方法
- TCP/IP网络常用名词缩写
- 使用HttpURLConnection下载图片
- 黑马程序员 网络编程