Http协议原理(一)
2015-07-15 22:00
393 查看
一、简介
超文本传输协议(HTTP,HyperText Transfer Protocol)是一种广为使用的网络协议,所有www文件必须遵守该标准。
在Web开发的时候,常用到http超文本传输协议来请求页面或者发送ajax数据,有时候特殊需要,要我们封装设置http头部等信息,所有很有必要学习和了解Http协议的原理。
二、请求格式和原理
请求格式如下:
<request line>
<headers>
<空白行>
<request-body>
在http请求中,第一行必须是请求行(request line),请求行用来说明请求类型(get,post等,注意http请求不仅仅是get和post请求)、访问资源路径以及http使用版本(现在都是用http1.1)。
第二行是头部(headers),用来说明请求附加信息。
接下来是空白行
最后是请求主体(body),用来添加数据,如键值对(parameter),流等。
1.GET请求
对于get请求,如www.baidu.com请求格式如下:
第一行是请求行,这里表示请求类型时GET,接下来斜杠 “/”表示请求根目录,HTTP/1.1表示使用的版本号为1.1。
第二行是请求头部信息,Host指出请求目的地,结合请求行的斜杠,组合通知服务器请求的是www.baidu.com/(http1.0不需要使用Host)。第三行包含头部User-agent,是检测浏览器逻辑的重要部分,服务器和客户端脚本都可以访问它。该信息由浏览器定义,请在每个请求中自动发送。最后一行包含头部的连接,一般设为keep-alive。
这里没有body部分,因为get请求不设置body部分。
GET方式的url中键值对例如http://localhost:8080/bookstore/login?username=abc&password=123,就会写到请求行,如下所示:GET /login/?username=abc&password=123
2.POST请求
POST为http添加附加信息,如表单使用post提交的时候,数据就会写入body中。
如下所下所示:
和GET请求类型类似,请求行改为POST,头部多了Content-Type说明请求内容如何编码,Content-Length表示请求主体Body中字节数。最后一行表示请求主体,键值对。
三、相应格式和原理
如下所示,是http响应的格式:
<status-line>
<headers>
<blank line>
[ <reponse-body>]
和请求类似,只是请求行改成状态行,用来说明服务器响应码,响应码有2xx,3xx,4xx,5xx,对应响应码之后介绍。
如下所示为相应格式:
HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8
<html>
<head></head>
<body>
<!--body goes here-->
</body>
</html>
第一行是http协议1.1 ,响应码为200,响应ok
第二行为响应时间,响应mime类型和字符集编码
响应内容为一段html页面
超文本传输协议(HTTP,HyperText Transfer Protocol)是一种广为使用的网络协议,所有www文件必须遵守该标准。
在Web开发的时候,常用到http超文本传输协议来请求页面或者发送ajax数据,有时候特殊需要,要我们封装设置http头部等信息,所有很有必要学习和了解Http协议的原理。
二、请求格式和原理
请求格式如下:
<request line>
<headers>
<空白行>
<request-body>
在http请求中,第一行必须是请求行(request line),请求行用来说明请求类型(get,post等,注意http请求不仅仅是get和post请求)、访问资源路径以及http使用版本(现在都是用http1.1)。
第二行是头部(headers),用来说明请求附加信息。
接下来是空白行
最后是请求主体(body),用来添加数据,如键值对(parameter),流等。
1.GET请求
对于get请求,如www.baidu.com请求格式如下:
<span style="font-size:14px;">GET / HTTP/1.1 Host: www.baidu.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050225 Firefox/1.0.1 Connection: Keep-Alive</span></span>
第一行是请求行,这里表示请求类型时GET,接下来斜杠 “/”表示请求根目录,HTTP/1.1表示使用的版本号为1.1。
第二行是请求头部信息,Host指出请求目的地,结合请求行的斜杠,组合通知服务器请求的是www.baidu.com/(http1.0不需要使用Host)。第三行包含头部User-agent,是检测浏览器逻辑的重要部分,服务器和客户端脚本都可以访问它。该信息由浏览器定义,请在每个请求中自动发送。最后一行包含头部的连接,一般设为keep-alive。
这里没有body部分,因为get请求不设置body部分。
GET方式的url中键值对例如http://localhost:8080/bookstore/login?username=abc&password=123,就会写到请求行,如下所示:GET /login/?username=abc&password=123
2.POST请求
POST为http添加附加信息,如表单使用post提交的时候,数据就会写入body中。
如下所下所示:
<span style="font-size:14px;">POST / HTTP/1.1 Host: www.wrox.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.7.6) Gecko/20050225 Firefox/1.0.1 Content-Type: application/x-www-form-urlencoded Content-Length: 40 Connection: Keep-Alive name=Professional%20Ajax&publisher=Wiley</span></span>
和GET请求类型类似,请求行改为POST,头部多了Content-Type说明请求内容如何编码,Content-Length表示请求主体Body中字节数。最后一行表示请求主体,键值对。
三、相应格式和原理
如下所示,是http响应的格式:
<status-line>
<headers>
<blank line>
[ <reponse-body>]
和请求类似,只是请求行改成状态行,用来说明服务器响应码,响应码有2xx,3xx,4xx,5xx,对应响应码之后介绍。
如下所示为相应格式:
HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8
<html>
<head></head>
<body>
<!--body goes here-->
</body>
</html>
第一行是http协议1.1 ,响应码为200,响应ok
第二行为响应时间,响应mime类型和字符集编码
响应内容为一段html页面
相关文章推荐
- Network:socket发送http请求
- 流媒体协议介绍(rtp/rtcp/rtsp/rtmp/mms/hls)
- WCF 托管在IIS中遇到Http的错误
- Android中使用Volley开源库进行Http网络请求(POST方式)
- 读《《图解TCP-IP》》有感
- Nginx 定义自己的 http 模块
- C#畅谈“网络电视”
- 网络电视精灵
- 知识储备:HTTP协议
- 网络IO之阻塞、非阻塞、同步、异步总结
- TCP/UDP差异
- C#之网络精灵全面解析
- mac平台adb、tcpdump捕手android移动网络数据包
- 正则表达式,模拟网络爬虫小例子
- JBoss集群中启用HTTPS协议
- 网络事件触发自动登录
- iOS开发工具——网络封包分析工具Charles
- preg_match_all匹配网络上文件
- iOS开发系列--网络开发(翻译自 KenshinCui)
- Android开源网络请求框架Retrofit的介绍使用