Http Protocol

Http介绍

Http协议(HyperText Transfer Protocol,超文本传输协议)是用于从WWW服务器与本地浏览器之间传递超文本的协议。

Http协议永远都是客户端发起请求,服务器回送响应。见下图:
   

所以Http分Http请求和Http响应。

http协议是无状态的,同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端。 为了解决这个问题, Web程序引入了Cookie机制来维护状态.

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      锚

URI是指Url中 /path/…… 这段地址,资源的路径

Http Request

打开网页需要多次Request,因为HTML中引用的css,js,image等文件也需要Request,等所有文件加载完成,才能呈现整个网页。当设置了缓存以后,第二次访问时,css,js等文件就会从缓存中读取,不需要再次向服务器发送Request.

Request分为: Request line, Request header, Request body.

Request Line

格式为:Method   Request-URI  HTTP-Version

Request Method(请求方式)有:

GET    请求获取Request-URI所标识的资源

POST   在Request-URI所标识的资源后附加新的数据

HEAD   请求获取由Request-URI所标识的资源的响应消息报头

PUT    请求服务器存储一个资源,并用Request-URI作为其标识

DELETE  请求服务器删除Request-URI所标识的资源

TRACE   请求服务器回送收到的请求信息,主要用于测试或诊断

CONNECT 保留将来使用

OPTIONS 请求查询服务器的性能,或者查询与资源相关的选项和需求

常用的是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上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码.

Request Header

主要是携带客户端浏览器的信息给服务器,所以其中很多字段是用来描述浏览器信息。

请求头详解:(下面字段并非必须的,看情况)

Accept: 用于告诉服务器,客户机所支持的数据类型

Accept-Charset: 用于告诉服务器,客户机所采用的码表

Accept-Encoding: 用于告诉服务器,客户机所支持的数据压缩格式

Accept-Language: 用于告诉服务器,客户机的语言环境

Host: 用于告诉服务器,客户机想访问服务器哪台主机

 If-Modified-Since: 用于告诉服务器,客户机对于资源的最后缓存时间,精确到秒级。

Referer: 用于告诉服务器,客户机是从哪个页面去访问服务器的  (防盗链)

User-Agent: 用于告诉服务器,客户机的机器环境(所使用的操作系统,浏览器版本号)

Cookie:客户端通过这个头字段,可以带一些数据给服务器

Connection:客户端通过这个头字段告诉服务器,请求完成后,是保持链接还是关闭链接。一般情况下服务器处理完客户的请求,并收到客户的应答后,即断开连接。但是当设置为Keep-Alive时,是不会断开TCP链接的。

If-None-Match:和ETag一起工作,工作原理是在HTTP Response中添加ETag信息

If-Modified-Since:把浏览器端缓存页面的最后修改时间发送到服务器去,服务器会把这个时间与服务器上实际文件的最后修改时间进行对比。如果时间一致,那么返回304,客户端就直接使用本地缓存文件。如果时间不一致,就会返回200和新的文件内容。客户端接到之后,会丢弃旧文件,把新文件缓存起来,并显示在浏览器中.

这是请求百度的Request的例子:

Http Response

组成部分和Request类似。

Response Line

状态行格式为:HTTP-VersionStatus-Code Reason-Phrase
其中,HTTP-Version表示服务器HTTP协议的版本;Status-Code表示服务器发回的响应状态代码;Reason-Phrase表示状态代码的文本描述。

状态代码有三位数字组成,第一个数字定义了响应的类别,且有五种可能取值:

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

常见状态代码、状态描述、说明:

200OK      //客户端请求成功

400Bad Request  //客户端请求有语法错误,不能被服务器所理解

401Unauthorized //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 

403Forbidden  //服务器收到请求,但是拒绝提供服务

404Not Found  //请求资源不存在,eg:输入了错误的URL

500Internal Server Error //服务器发生不可预期的错误

503Server Unavailable  //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

Response Header

消息报头的字段如下:

Set-cookie:用于把cookie 发送到客户端浏览器,每一个写入cookie都会生成一个Set-Cookie.

Location:这个头通常配合302状态码使用,服务器使用这个头告诉浏览器去找谁

Server:服务器通过这个头告诉浏览器,服务器的类型

Content-Encoding: 服务器通过这个头告诉浏览器,数据的压缩格式(gzip) 一定要压缩服务器返回数据,既可提升服务器性能,又可大大减少服务器网络流量费用

Content-Length:服务器通过这个头告诉浏览器,回送数据的长度

Content-Language: 服务器通过这个头告诉浏览器,回送数据的语言

Content-Type: 服务器通过这个头告诉浏览器,回送数据的类型,对于响应返回图片、视频、音频等数据类型时,很重要。

Last-Modified: 服务器通过这个头告诉浏览器,数据的最后修改时间,精确到秒级。

Refresh:服务器 告诉浏览器,多长时间定时刷新或定时转向其他页面 (论坛刷新) 

Content-Disposition: 控制浏览器以下载方式打开回送的数据,对于响应返回图片、视频、音频等数据类型时,可能会用到。

P3P: 用于跨域设置Cookie, 这样可以解决iframe跨域访问cookie的问题

Transfer-Encoding: 服务器通过这个头告诉浏览器,数据是以块方式回送的(用的少)   

Expires:控制浏览器缓存数据的时间(-1或0,代表控制浏览器不要缓存) 时间+数据:保存该数据缓存的时间,eg:2012 12 12 (1.html)     

Cache-Control: no-cache  

Pragma: no-cache  

以上三个头一起用,就可以控制所有的浏览器不要缓存数据 

ETag:缓存相关,服务器给每一个网页都生成一个编码,用来进行比对,以配合304或307通知浏览器是否使用缓存的数据,精确到毫秒级。和If-None-Match 配合使用(一般的服务器不需要这么严谨)

访问百度的响应报头:

HttpWatch

         前面的截图都来自于HttpWatch Professional工具,是IE中的插件,还有很多Http抓取的工具,这个工具用法很简单,自行下载后,在工具中选择HttpWatch Professional.

在请求前,点击 Record就可以捕获Http的请求与响应报头。

 

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值