网络:HTTP

HTTP协议定义了浏览器怎么向万维网请求万维网文档,以及服务器怎么把万维网文档传给浏览器,

HTTP是面向事务的应用层协议。

所谓面向事务就是指一系列的信息交换,这些交换的信息是一个整体,要么这些信息全部交换,要么就不交换。

HTTP不仅能传送超文本跳转信息所必须的信息,而且也能传输任何能在互联网上得到的信息。

HTTP概念:

每个万维网网点都有一个服务器进程,用来监视TCP的端口80,以便发现是否有浏览器向它发出建立连接请求,一但监听到需要建立TCP连接,浏览器就会向万维网发出浏览某个页面的请求,而万维网对这个请求的页面做出响应,最后,TCP连接释放。在浏览器和服务器之间的请求与响应的交互,必须按照一定的格式和规则,这些格式和规则就是超文本传输协议HTTP。

 

HTTP协议本身是无连接的,虽然HTTP需要用到TCP作为运输层协议,但是在通信双方交换HTTP报文之前不需要建立HTTP连接。

HTTP本身是无状态的,也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次一样,因为服务器不记得曾经访问过的用户,也不记得这个用户访问了多少次。

 

HTTP的版本

HTTP/1.0的主要缺点:每当请求一个文档,就需要两倍的RTT的开销(一个RTT是用于TCP的连接,另一个RTT用于请求和接受万维网文档),如果有很多个对象需要建立连接,那么每一次连接都需要2*RTT的时间开销。另一方面,每一次请求都需要建立TCP连接,并且万维网通常都服务于大量的请求,所以这种非持续性的连接会导致万维网的负荷过大。

HTTP/1.1采用的是持续连接,就是在建立连接后的一段时间内任然保持连接,使得同一个客户和服务器传送后续的请求的响应。

持续连接有两种工作方式,非流水线和流水线。

非流水线:客户在收到上一个响应才能发出下一个请求。缺点:服务器在发送了一个对象后,TCP处于空闲状态,浪费资源

流水线:客户在收到HTTP的响应报文之前,就能够接着发送新的请求。

 

HTTP的报文结构:

请求报文:客户向服务器发送请求报文

请求报文:服务器给客户的响应

HTTP的请求和响应报文都是由三部分组成:

1.开始行

请求报文:方法+URL+版本

请求报文:版本+状态+短语

2.首部行

用来说明浏览器和服务器和报文主体的一些信息。

3.正文

 

请求报文中的方法:

【GET:获取资源】
     GET方法用来请求已被URI识别的资源。指定的资源经服务器端解析后返回响应内容(也就是说,如果请求的资源是文本,那就保持原样返回;如果是CGI[通用网关接口]那样的程序,则返回经过执行后的输出结果)。

【POST:传输实体文本】
    POST方法用来传输实体的主体。
    虽然用GET方法也可以传输实体的主体,但一般不用GET方法进行传输,而是用POST方法;虽然GET方法和POST方法很相似,但是POST的主要目的并不是获取响应的主体内容。

在这里我们来比较GET方法和POST方法本质上的区别:

  1、GET方法用于信息获取,它是安全的(安全:指非修改信息,如数据库方面的信息),而POST方法是用于修改服务器上资源的请求;

  2、GET请求的数据会附在URL之后,而POST方法提交的数据则放置在HTTP报文实体的主体里,所以POST方法的安全性比GET方法要高;

  3、GET方法传输的数据量一般限制在2KB,其原因在于:GET是通过URL提交数据,而URL本身对于数据没有限制,但是不同的浏览器对于URL是有限制的,比如IE浏览器对于URL的限制为2KB,而Chrome,FireFox浏览器理论上对于URL是没有限制的,它真正的限制取决于操作系统本身;POST方法对于数据大小是无限制的,真正影响到数据大小的是服务器处理程序的能力。
    
【HEAD:获得报文首部】
    HEAD方法和GET方法一样,知识不返回豹纹的主体部分,用于确认URI的有效性及资源更新的日期时间等。
    具体来说:1、判断类型; 2、查看响应中的状态码,看对象是否存在(响应:请求执行成功了,但无数据返回); 3、测试资源是否被修改过
    HEAD方法和GET方法的区别: GET方法有实体,HEAD方法无实体。

【PUT:传输文件】
    PUT方法用来传输文件,就像FTP协议的文件上传一样,要求在请求报文的主体中包含文件内容,然后保存在请求URI指定的位置。但是HTTP/1.1的PUT方法自身不带验证机制,任何人都可以上传文件,存在安全问题,故一般不用。

【DELETE:删除文件】
    指明客户端想让服务器删除某个资源,与PUT方法相反,按URI删除指定资源
    
【OPTIONS:询问支持的方法】
    OPTIONS方法用来查询针对请求URI指定资源支持的方法(客户端询问服务器可以提交哪些请求方法)
    
【TRACE:追踪路径】
    客户端可以对请求消息的传输路径进行追踪,TRACE方法是让Web服务器端将之前的请求通信还给客户端的方法
    
【CONNECT:要求用隧道协议连接代理】
    CONNECT方法要求在与代理服务器通信时建立隧道,实现用隧道协议进行TCP通信。主要使用SSL(安全套接层)和TLS(传输层安全)协议把通信内容加密后经网络隧道传输。

首部行的首部字段名和含义:

常见的请求头字段含义:

Accept: 浏览器可接受的MIME类型。

Accept-Charset:浏览器可接受的字符集。

Accept-Encoding:浏览器能够进行解码的数据编码方式,比如gzip。Servlet能够向支持gzip的浏览器返回经gzip编码的HTML页面。许多情形下这可以减少5到10倍的下载时间。

Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时要用到。

Authorization:授权信息,通常出现在对服务器发送的WWW-Authenticate头的应答中。

Content-Length:表示请求消息正文的长度。

Host: 客户机通过这个头告诉服务器,想访问的主机名。Host头域指定请求资源的Intenet主机和端口号,必须表示请求url的原始服务器或网关的位置。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。

If-Modified-Since:客户机通过这个头告诉服务器,资源的缓存时间。只有当所请求的内容在指定的时间后又经过修改才返回它,否则返回304“Not Modified”应答。

Referer:客户机通过这个头告诉服务器,它是从哪个资源来访问服务器的(防盗链)。包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。

User-Agent:User-Agent头域的内容包含发出请求的用户信息。浏览器类型,如果Servlet返回的内容与浏览器类型有关则该值非常有用。

Cookie:客户机通过这个头可以向服务器带数据,这是最重要的请求头信息之一。

Pragma:指定“no-cache”值表示服务器必须返回一个刷新后的文档,即使它是代理服务器而且已经有了页面的本地拷贝。

From:请求发送者的email地址,由一些特殊的Web客户程序使用,浏览器不会用到它。

Connection:处理完这次请求后是否断开连接还是继续保持连接。如果Servlet看到这里的值为“Keep- Alive”,或者看到请求使用的是HTTP 1.1(HTTP 1.1默认进行持久连接),它就可以利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入 ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。

Range:Range头域可以请求实体的一个或者多个子范围。例如,

表示头500个字节:bytes=0-499

表示第二个500字节:bytes=500-999

表示最后500个字节:bytes=-500

表示500字节以后的范围:bytes=500-

第一个和最后一个字节:bytes=0-0,-1

同时指定几个范围:bytes=500-600,601-999

但是服务器可以忽略此请求头,如果无条件GET包含Range请求头,响应会以状态码206(PartialContent)返回而不是以200 (OK)。

UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。

响应报文中的状态码:

五大类

1.1xx    表示通知信息,比如请求收到了和正在处理

2.2xx    表示成功

3.3xx   表示重定向,如果请求成功需要进一步的操作

4.4xx   表示客户端的差错

5.5xx   表示服务器的差错

 

   

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值