互联网协议入门(一)
互联网协议入门(二)
当今web程序的开发技术真是百家争鸣,asp.net, php, jsp,perl, ajax 等等。 无论web技术在未来如何发展,理解web程序之间通信的基本协议相当重要, 因为它让我们理解了web应用程序的内部工作. 本文将对http协议进行详细的实例讲解,内容较多,希望大家耐心看。也希望对大家的开发工作或者测试工作有所帮助。使用fiddler工具非常方便地捕 获http request和http response
阅读目录
什么是http协议 web服务器,浏览器,代理服务器 url详解 http协议是无状态的 打开一个网页需要浏览器发送很多次request http消息的结构 get和post方法的区别 状态码 http request header http response header http协议是无状态的和connection: keep–alive的区别
协议是指计算机通信网络中两台计算机之间进行通信所必须共同遵守的规定或规则,超文本传输协议(http)是一种通信协议,它允许将超文本标记语言(html)文档从web服务器传送到客户端的浏览器
目前我们使用的是http/1.1 版本
web服务器,浏览器,代理服务器
当我们打开浏览器,在地址栏中输入url,然后我们就看到了网页。 原理是怎样的呢?
实际上我们输入url后,我们的浏览器给web服务器发送了一个request, web服务器接到request后进行处理,生成相应的response,然后发送给浏览器, 浏览器解析response中的html,这样我们就看到了网页,
我们的request 有可能是经过了代理服务器,最后才到达web服务器的。
代理服务器就是网络信息的中转站,有什么功能呢?
1. 提高访问速度, 大多数的代理服务器都有缓存功能。
2. 突破限制, 也就是fq了
3. 隐藏身份。
url详解
url(uniform resource locator) 地址用于描述一个网络上的资源, 基本格式如下
schema://host[:port#]/path/…/[?query–string][#anchor]
scheme 指定低层使用的协议(例如:http, https, ftp)
host http服务器的ip地址或者域名
port# http服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如 http://www.cnblogs.com:8080/
path 访问资源的路径
query–string 发送给http服务器的数据
anchor– 锚
url 的一个例子
http://www.mywebsite.com/sj/test/test.aspx?name=sviergn&x=true#stuff schema: http host: www.mywebsite.com path: /sj/test/test.aspx query string: name=sviergn&x=true anchor: stuff
http协议是无状态的
http协议是无状态的,同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端。 为了解决这个问题, web程序引入了cookie机制来维护状态.
打开一个网页需要浏览器发送很多次request
1. 当你在浏览器输入url http://www.cnblogs.com 的时候,浏览器发送一个request去获取 http://www.cnblogs.com 的html. 服务器把response发送回给浏览器.
2. 浏览器分析response中的 html,发现其中引用了很多其他文件,比如图片,css文件,js文件。
3. 浏览器会自动再次发送request去获取图片,css文件,或者js文件。
4. 等所有的文件都下载成功后。 网页就被显示出来了。
http消息的结构
先看request 消息的结构, request 消息分为3部分,第一部分叫request line, 第二部分叫request header, 第三部分是body. header和body之间有个空行, 结构如下图
第一行中的method表示请求方法,比如"post","get", path–resoure表示请求的资源, http/version首页的request 如下
get http://www.cnblogs.com/ http/1.1 host: www.cnblogs.com
抽象的东西,难以理解,老感觉是虚的, 所谓眼见为实, 实际见到的东西,我们才能理解和记忆。 我们今天用fiddler,实际的看看request和response.
下面我们打开fiddler 捕捉一个登录的request 然后分析下它的结构, 在inspectors tab下以raw的方式可以看到完整的request的消息, 如下图
我们再看response消息的结构, 和request消息的结构基本一样。 同样也分为三部分,第一部分叫response line, 第二部分叫response header,第三部分是body. header和body之间也有个空行, 结构如下图
http/version–code 和message 请看下节[状态代码]的详细解释.
我们用fiddler 捕捉一个首页的response然后分析下它的结构, 在inspectors tab下以raw的方式可以看到完整的response的消息, 如下图
get和post方法的区别
http协议定义了很多与服务器交互的方法,最基本的有4种,分别是get,post,put,delete. 一个url地址用于描述一个网络上的资源,而http中的get, post, put, delete就对应着对这个资源的查,改,增,删4个操作。 我们最常见的就是get和post了。get一般用于获取/查询资源信息,而post一般用于更新资源信息.
我们看看get和post的区别
1. get提交的数据会放在url之后,以?分割url和传输数据,参数之间以&相连,如editposts.aspx?name=test1&id=123456. post方法是把提交的数据放在http包的body中.
2. get提交的数据大小有限制(因为浏览器对url的长度有限制),而post方法提交的数据没有限制.
3. get方式需要使用request.querystring来取得变量的值,而post方式通过request.form来获取变量的值。
4. get方式提交数据,会带来安全问题,比如一个登录页面,通过get方式提交数据时,用户名和密码将出现在url上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.
状态码
response 消息中的第一行叫做状态行,由http协议版本号, 状态码, 状态消息 三部分组成。
状态码用来告诉http客户端,http服务器是否产生了预期的response.
http/1.1中定义了5类状态码, 状态码由三位数字组成,第一个数字定义了响应的类别
1xx 提示信息–表示请求已被成功接收,理解,接受
3xx 重定向– 请求有语法错误或请求无法实现
5xx 服务器端错误– 服务器未能实现合法的请求
看看一些常见的状态码
200 ok
最常见的就是成功响应状态码200了, 这表明该请求被成功地完成,所请求的资源发送回客户端
如下图, 打开
302 found
重定向,新的url会在response 中的location中返回,浏览器将会自动使用新的url发出新的request
例如在ie中输入, http://www.google.com. http服务器会返回302, ie取到response中location header的新url, 又重新发送了一个request.
304 not modified
代表上次的文档已经被缓存了, 还可以继续使用,
例如打开首页, 发现很多response 的status code 都是304
提示: 如果你不想使用本地缓存可以用ctrl f5 强制刷新页面
400 bad request 客户端请求与语法错误,不能被服务器所理解
403 forbidden 服务器收到请求,但是拒绝提供服务
404 not found
请求资源不存在(输错了url)
比
商标域名是什么?如何赎回域名?外贸网站设计要做好哪些工作如何申请公司域名邮箱?域名邮箱的特色功能有哪些?申请新顶级域名该如何挑选?新顶级域名有哪些?域名绑定过虚拟主机必须先删除现在已经删除域名交费如何操作?域名交费有哪些骗局?3月份新春采购云服务器请麻烦检查下服务器是否出现问题