Http协议

来源:互联网 发布:sql中如何添加一个字段 编辑:程序博客网 时间:2024/06/06 00:45

www.sina.com.cn  这个是主机名

sina.com.cn 是域名

 

 

1,在HTTP1.0协议中,客户端与web服务器建立连接后,只能获得一个web资源。

HTTP1.1协议,允许客户端与web服务器建立连接后,在一个连接上获取多个web资源。

http 1.0 和 1.1的区别:前者,请求web服务器一次资源后,就断开和服务器的连接。后者请求完一次后,不断开

可以接着请求第二次。。。。,现在都是用http 1.1 ,因为减少服务器的负荷。

下面分别用telnet演示http1.0http1.1的区别

 

1

 

2

 

http1.1 :可以不停的请求。但是一段时间不请求的话,也会自动断开。

3

 

 

有时候在命令行敲击http访问的时候,会出现不显示的情况,可以按键盘上的ctrl 加 键,然后再按下回车。再敲

4

 

 

 

2 用命令行的telnet测试http协议的时候,要注意,不能写错字母,一次写错,就要重新开始。不能删除的

就算能删除也没用。因为你敲一个字母,就向服务器已经发送过去一个字母了。

3关于客户端浏览器 http请求服务器次数:

当在浏览器地址栏里输入地址后,一点回车,这是第一次请求,服务器把访问的页面的html页面代码文本内容发送给浏览器,在浏览器的查看源文件里可以看到,浏览器拿到代码后开始解析

html页面代码,当解析到类似<img src= ""> 或者<style src="">这种需要资源的时候,会再次请求服务器,去服务器取资源

用来保持页面图片等的显示。每有一次这种资源需求,就请求一次服务器。

5

 

这个html文件,浏览器就请求了4次服务器。把aaaaa去掉也是请求了4次服务器。第一个地址栏点回车后,就是请求服务器,这时候把文本已经带过来了。

 

 

 

 

 

 

web站点优化技术有一点就是减少http请求web服务器的次数。这样能减少服务器的负载。例如:html文档里,有多个img标签,最好浓缩成一次请求服务器,有时候有多个style样式表,最好浓缩少的请求。有多个script代码,最好放在一个里面。

 

 

 

 

 

4 ,下面是用工具httpWatch监视的一次web请求:

 

333

 

 

 

 

 

 

左边显示的是浏览器向服务器所发出的请求数据。右边是服务器回应的信息。这个是用httpWatch工具查看的,这个使用了gzip压缩格式,发送给浏览器的所以下面的内容是乱码,不用gzip格式,就是html代码。

 

45646

上面的空行,,下面跟的是客户端浏览器如果想向服务器发送数据,就在空行下一行,带上。Post方式是这样的。Get方式,带数据,则是在

地址栏用?Name=dd&password=123”这种方式。

 

dd

浏览器默认的是Get方式,所有的<a>标签提交等都是Get方式,除非一般你自己定义的表单提交,改为Post方式。因为Get方式提交的速度快。

 

 

 

fgs

http请求:

 

accept:用于告诉服务器,浏览器支持数据格式

Accept-Charset:用于告诉服务器,浏览器支持的编码

Accept-Encoding:用于告诉服务器,浏览器支持哪种压缩

Accept-Language:用于告诉服务器,浏览器支持的语言

Host: 用于告诉服务器,浏览器想访问的主机名

If-Modified-Since: 用于告诉服务器,浏览器缓存的时间

Cookie: 浏览器使用 cookie向服务器带点数据

Referer: 用于告诉服务器,浏览器是从哪个页面来的,ls:这个技术很重要,可以用来防盗链

这里我们写了一个1.html测试,此html页面上,有个<a  href="http://localhost:8080/day01/servlet/ServeletDemo1">点点</a>的链接 ,一点击

这个链接,就跳到ServletDemo1,点击后a链接后,浏览器就会把Referer信息发送给服务器,Referer就会向下图一样显示访问SeverletDemo1的是谁,来自哪个页面的访问。

Referer : http://localhost:8080/day04/1.html

这样如果别人在自己的网站上,写个<a href=""></a>,href里面填写你的资源的路径,假如是春春演唱会。大家在他网站上点击他的a标签,其实

访问的是你的资源,这样他就盗链了你的资源。

怎么来防止他盗链呢?大家有没有看到,在请求访问你春春演唱会的时候,浏览器Referer会带给服务器从哪里访问的这个资源,

你这边是服务器。你可以在Servlet doGet 或者doPost里面拿到Referer对应的地址,然后截取前面的字符串,看是从自己主机名吗、如果是就让他通过,不是,就是别人网站盗链自己的,就不让他通过。这里还没给出怎么在doGetdoPost方法里拿到Referer

 

 

 

 

 

 

 

 

 

 

 gfsfg

 

 

 

 

 

 

 gfgsf

http响应:

Location:服务器通过这个头告诉浏览器,浏览器该去找谁,一般和响应码302一起用。

//控制浏览器跳转到2.html,当浏览器访问我的时候,我把他转到2.html

response.setStatus(302);

response.setHeader("Location""/day04/2.html");

302状态码就是告诉浏览器,重定向。

Server:服务器通过这个头告诉浏览器,服务器的类型,这里用的是Apache的服务器。

Content-Encoding: 服务器通过这个头告诉浏览器,数据的压缩格式,这个标签蛮重要的。现在sohusina都用压缩格式发给浏览器,用这个通知

  浏览器用什么压缩格式打开。这样大大提高了浏览器的打开网页的速度,因为服务器向浏览器传输的数据小,速度自然快,本地解压 速度肯定要比不压缩传输的快。

 

Content-Length:用于告诉浏览器,回送数据的大小

Content-Type:用于告诉浏览器,回送数据的格式 如text/html

关于这个类型,在tomcat conf 文件夹下的web.xml文件中,对应的类型都有对应的回送格式的。

 

 gfsgfs

Last-Modified: 用于告诉浏览器,服务器数据的最后修改时间

Refresh:用于告诉浏览器,隔多长时间刷新页面

//3秒后跳到后面url指定的链接

response.setHeader("refresh""3;url='http://www.sina.com.cn'");

//3秒刷新下自己。

//response.setHeader("refresh", "3");

Content-Disposition:用于告诉浏览器,以下载方式打开回送的数据

Transfer-Encoding:用于告诉浏览器,服务器的数据是分块传送的

Set-Cookie:服务器通过这个字段,向浏览器回送cookie

Expires: -1  控制浏览器缓存,-1 为不缓存。

Cache-Control: no-cache  

Pragma: no-cache 

如果只设置Expires只是在IE中设置缓存情况。如果浏览器是火狐或者其它的怎么办呢。下面的两种Cache-ControlPragma再加上,就是所有的浏览器的缓存都可以设置了。

可以设置缓存多久。下面是设置缓存一天。

long time = 1000*60*60*24;

response.setDateHeader("Expires", System.currentTimeMillis()+time);

response.setHeader("Cache-Control""no-cache");

response.setHeader("Pragma""no-cache");

状态码 含义

100~199 表示成功接收请求,要求客户端继续提交下一次请求才能完成整个处理过程

200~299  表示成功接收请求并已完成整个处理过程,常用200

300~399 为完成请求,客户需进一步细化请求。例如,请求的资源已经移动一个新地址,常用302、307和304

                  307和304都是通知浏览器,不要再我这取数据了,读你自己的缓存。

400~499 客户端的请求有错误,常用404

500~599 服务器端出现错误,常用 500

 

 

下面是一个例子。

 

 

 

 

 

 

 

 

 

 

 

 

原创粉丝点击