专题二:HTTP协议详解
我们在用Asp.net技术开发Web应用程序后,当用户在浏览器输入一个网址时就是再向服务器发送一个HTTP请求,此时就使用了应用层的HTTP协议,在上一个专题我们简单介绍了网络协议的知识,主要是为了后面讲HTTP协议做一个铺垫的,只有对HTTP协议有一个清楚的认识,这样当我们用Asp.net技术开发Web应用程序时,我们可以多从网络协议的方面去思考我们的应用程序,而不是只是单单停留在对服务器控件的拖拉的使用,这样也可以帮助我们开发一个自己的自定义web服务器。在这里我想同时把我对Asp.net的本质的理解和大家分享下,如果有什么不对的地方,还请大家指出,首先,当我们设计一个算法的时候要明确输入参数和算法的返回(算法也就是也就是一个处理程序),其实Asp.net开发的web网页可以理解为一个处理程序,因为我们在web浏览器中所看到的都是HTML文档(HTML也就是Asp.net网页处理后程序的输出,即算法的返回),然而输入参数也就是用户通过浏览器输入的一个Http请求(可以说是请求的一个URI地址),asp.net这门技术就帮助我们把请求的aspx页面翻译为HTML文档,然后HTML文档通过HTTP协议把HTML文档发送给浏览器,浏览器再把这么标签(HTML文档只是一串字符串,如果没有浏览器的解析我们看到的也是一些字符串,而不是可视化的界面了)解析为可视化的界面。这样一次web请求也就结束。后面也会和大家分享下Asp.net中背后替我们所做事情的一些对象,这里还是回到Http协议的介绍吧。
一、HTTP协议的简介
HTTP中文为超文本传输协议,从名字上很容易理解,Http协议就是将超文本标记语言的文档(即Html文档)从web服务传送到客户端的浏览器。它属于一个应用层的协议。
二、网络的工作过程
当用户要访问网络中的某个网页时,大致要经过以下几个步骤:
- 用户首先要确定网页文件所在的URL(统一资源定位符,也就是网页在网络上的家庭住址,通过这个地址就可以找到这个网页)如www.cnblogs.com
- 浏览器向DNS(域名服务器)发出请求,告诉DNS说:"我要把www.cnblogs.com转化为它所定义的IP地址",这里可以简单把DNS理解为一个字典,知道域名就可以知道域名对于的IP地址,他们有这个一个映射的关系
- DNS收到请求后就开始查询,查到后向浏览器返回结果。如域名为www.cnblogs.com对应的IP地址为61.155.169.116
- 知道IP地址后, 浏览器向IP地址为61.155.169.116的主机发出与端口号80建议一条TCP连接请求(HTTP协议是建立在传输层TCP的基础上的),80端口是服务器提供web服务的默认端口
- 建立连接后,浏览器发出一条HTTP请求,如 GET http://www.cnblogs.com/ HTTP/1.1
- 当域名为www.cnblogs.com的服务器接受到请求后,向浏览器发送一个html文件
- 文件发送完后,由服务器主动关闭TCP连接。
- 浏览器接收传送来的页面并显示
- 如果Html文件中包含图片,还要与服务器再次建立一个TCP连接,以便可以下载图片
上面介绍的步骤中,浏览器发出一个请求后,如何把一个服务器上的HTML文档下载到请求网页的主机上呢? 这个过程就是由HTTP完成,即完成超文本文件的传送,HTTP协议是web服务器的基础。
二、HTTP请求
Http请求由三部分组成:请求行、请求头和请求数据,一个HTTP请求的格式一般如下:
请求方法 URL HTTP版本号 请求头信息 <一个空行> 请求数据|
方法 |
描述 |
|
Get |
返回URL所指的文档,一般用来请求下载Web网页 |
|
Head |
请求文档头,它类似Get方法,只是Web服务器返回指定文档的首部信息 |
|
Post |
它与Get方法相反,请求服务器接受指定文档,但它不替换已有的文档,只是将新数据附加在它的后面 |
|
Put |
它与Get方法类似,用从客户端传送的数据取代指定文档中的内容,使客户可以向远程Web服务器传送网页等文件 |
|
Delete |
请求服务器删除指定的页面 |
|
Options |
允许客户端查看服务器的性能 |
|
Trace |
用于测试允许客户端查看的消息回收过程 |
经常使用的是Get和Post方法,当使用Get方法发出请求时,请求数据为空,所以此时的HTTP请求行就由两部分组成:请求行和请求头信息,下面我们形象看看具体的HttP的实例:
当在浏览器中地址栏里面输入:www.cnblogs.com,此时我们相当于发出一个HTTP请求,具体为:

并且从图中可以看出网页中含有图片脚本等文件时,客户端会继续与服务器发出请求,请求所需要的图片和脚本文件。
补充:经一位朋友的留言中,在这里我补充下,现在通常是只建立一个TCP连接,通过HTPP 请求头的Connetion字段来指明,当服务器收到附带有Connection: Keep-Alive的请求时,它也会在响应头中添加一个同样的字段来使用Keep-Alive。这样一来,客户端和服务器之间的HTTP连接就会被保持,不会断开,(一些特殊情况除外)当客户端发送另外一个请求时,就使用这条已经建立的连接。
下面介绍下请求头的信息:
Accept:表示客户端接收的数据类型。例如,Accept:text/html表示客户端可接收HTML类型的文本
User Agent:表示客户端软件类型
Referer:表示的是上一连接的url,如跳转到本页面的上一页面url。
上图是一个通过Get方法把一个HTML文件下载到本例浏览器中显示的过程,当我们在博客园主页面点登陆后输入用户名和密码后点确认按钮后,此时我们发出的HTTP的请求是通过Post方法,下面是一个截图:

从图中可以看出, 通过Post方法发出的HTTP请求中有一个空行(空行后为请求数据),而Get方法发出的请求中没有。
三、HTTP响应
同样,Http响应也是由三部分组成:状态行,响应头和响应数据组成,Http响应格式如下:
状态行 响应头 <一个空行> 响应数据 状态行以HTTP版本号开始,后面跟着3为数字,代表响应代码,响应代码用来告诉客户端,服务器是否产生了预期的响应。如HTTP/1.1 200 OK.HTTP/1.1中定义五种响应代码:
1xx:指示信息--表示请求已接收,继续处理
2xx:成功--表示请求已被成功接收、理解、接受
3xx:重定向--要完成请求必须进行更进一步的操作
4xx:客户端错误--请求有语法错误或请求无法实现
5xx:服务器端错误--服务器未能实现合法的请求
具体响应代码的说明见下:

HTTP响应头用于服务器向客户端提供请求文档信息或服务端的状态信息,如图:

四、总结
到这里这篇文章也算是说完了,HTTP协议只是应用层中协议的其中之一,应用层还有其他的一些协议,比如FTP(文件传输协议),SMTP(电子邮件协议)等,这些协议在后面都会有所介绍。后面一个专题打算应用HTTP协议的只是自定义一个简单的Web服务器来模拟我们平常在浏览器中输入网址后发送Http请求和服务器返回响应的过程。
转自:http://www.cnblogs.com/zhili/archive/2012/08/18/HTTP.html
专题二:HTTP协议详解的更多相关文章
- linux高性能服务器编程 (二) --IP协议详解
第二章 IP协议详解 什么是IP协议:IP 协议是TCP/IP协议族的动力,它为上层提供了无状态.无连接.不可靠的服务. IP 头部信息:头部信息会出现在每一个IP数据报上,便于记录IP通信的源端IP ...
- HTTP协议详解(转)
转自:http://blog.csdn.net/gueter/archive/2007/03/08/1524447.aspx Author :Jeffrey 引言 HTTP是一个属于应用层的面向对象的 ...
- HTTP协议详解
Author :Jeffrey 引言 HTTP 是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和 扩展. ...
- ASP.NET知识总结(3.HTTP协议详解)
引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...
- 接口测试之HTTP协议详解
引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...
- OSPF协议详解
CCNP OSPF协议详解 2010-02-24 20:30:22 标签:CCNP 职场 OSPF 休闲 OSPF(Open Shortest Path Fitst,ospf)开放最短路径优先协议,是 ...
- HTTP协议详解(真的很经典)
HTTP 是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和 扩展.目前在WWW中使用的是HTTP/1.0 ...
- HTTP协议详解--转载http://blog.csdn.net/gueter/article/details/1524447
引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...
- 关于http协议详解
Author :Jeffrey 引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前 ...
- HTTP协议详解(一直在用可是这篇太好了转一下)
引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1. ...
随机推荐
- 谈谈hibernate的缓存
一,hibernate是什么技术? 1 hibernate是一个orm 就是对象关系映射框架. 及我们创建的实体类对象与数据库表中的数据是一一对应的关系. 我们可以改变对象信息从而改变数据库中的 ...
- day1--大数据概念,hadoop介绍,hdfs整体运行机制
1.什么是大数据 基本概念 在互联网技术发展到现今阶段,大量日常.工作等事务产生的数据都已经信息化,人类产生的数据量相比以前有了爆炸式的增长,以前的传统的数据处理技术已经无法胜任,需求催生技术,一套用 ...
- 11种常见sqlmap使用方法
sqlmap是渗透中常用的一个注入工具,其实在注入工具方面,一个sqlmap就足够用了,只要你用的熟,秒杀各种工具,只是一个便捷性问题. 一.SQLMAP用于Access数据库注入 (1) 猜解是否能 ...
- 【Qt入门实践】Qt之哲学家问题(linux 多线程)
转载请注明出处:http://blog.csdn.net/feng1790291543 linux多线程实现哲学家问题,依据哲学家吃饭.拿筷子.放下筷子...... watermark/2/text/ ...
- CSS和JS结合控制样式
CSS控制样式,毋庸置疑.但有时,仅靠CSS却很难控制好,比如说,页面在多种条件下进行不同的呈现:或者运行过程中,会发生变化,比如说,左侧的菜单栏收缩了,那么右侧的宽度就变大了. 就拿这个元素的wid ...
- gcc的搜索路径,头文件和库
1 抛开默认的搜索路径,自己指定搜索路径 第一,明确自己编写的代码所需要的头文件和库放在了哪里 第二,使用“-I”指定头文件的搜索路径,使用-rpath指定库的搜索路径 2 无论是本地编译还是交叉编译 ...
- HTTP要点概述:七,编码,压缩传输,分块传输
一,编码: HTTP 在传输数据时可以按照数据原貌直接传输,但也可以在传输过程中通过编码提升传输速率.通过在传输时编码,能有效地处理大量的访问请求.但是,编码的操作需要计算机来完成,因此会消耗更多的 ...
- ios30---pthread, NSThread, GCD, NSOperation
pthread(线程库,很早就有的技术,了解):一套通用的多线程API适用于Unix\Linux\Windows等系统(java开发也有pthread)跨平台\可移植使用难度大(全是C函数) C语言 ...
- 7-81 js课程小结
7-81 js课程小结 学习要点 理解全局对象 变量的作用范围 理解全局对象Global 全局属性和函数可用于所有内建的 JavaScript 对象.全局对象是所有全局方法的拥有者,用来统一管理全局方 ...
- 将数据从数据仓库Hive导入到MySQL
1.启动Hadoop,hive,mysql 2.在mysql中建表(需要导入数据的) mysql> CREATE TABLE `dbtaobao`.`user_log` (`user_id` v ...