1. URL详解
-
url(Uniform Resource Locator)地址用于描述一个网络上的资源,基本的格式如下:
scheme://host[:port#]/path/.../[;url-parms][?query-string][#anchor]
- scheme指定底层使用的协议(例如:ftp,https)
- host HTTP服务器的IP地址或者域名
- port#HTTP服务器默认的端口是80,这种情况下端口号可以省略。如果使用了别的端口必须指定
- path访问资源的路径
- url-params
- query-strring发送给服务器的数据
- anchor-锚
-
理解url和urn以及uri的区别
- uri是统一资源定位符,包含了url和urn
- url是一个地址,某个对象的地址
- urn是一个唯一表示符,通过找个也可以找到资源;
2、 Http的头域理解
1.请求头域的相关知识点
- If-Modified-Since 把浏览器缓存页面的最后修改时间发送到服务器,服务器会把这个时间与服务器上的最后修改时间做对比,若一致返回304,不一致,则返回200,外加文件新的内容,收到之后就会缓存加显示
- If-None-Match:If-None-Match和ETag一起工作,主要的原理就是Http Resourcre里面加入ETag信息,当用户在此请求资源的时,姜在request中加入If-None-Match信息(也就是ETag值),服务器验证资源的ETag有没有改变,若改变了返回200外加资源,没有则返回304
- Pragma :指定no-cache值表示服务器必须返回一个刷新后的文档和Cache-Control中的no-cache一样
- Cache-Control:指定请求和相应遵循的缓存机制,缓存指令是单向的且是独立的;请求时的缓存指令包括no-cache、no-store、max-age、max-stale、min-fresh、only-if-cached,响应消息中的指令包括public、private、no-cache、no-store、no-transform、must-revalidate、proxy-revalidate、max-age、s-maxage。
- Cache-Control:Public 可以被任何缓存所缓存
- Cache-Control:Private 内容只缓存到私有缓存中
- Cache-Control:no-cache 所有内容都不会被缓存
- Cache-Control:no-store 用于防止重要的信息被无意的发布。在请求消息中发送将使得请求和响应消息都不使用缓存。
- Cache-Control:max-age 指示客户机可以接收生存期不大于指定时间(以秒为单位)的响应。
- Cache-Control:min-fresh 指示客户机可以接收响应时间小于当前时间加上指定时间的响应
- Cache-Control:max-stale 指示客户机可以接收超出超时期间的响应消息。如果指定max-stale消息的值,那么客户机可以接收超出超时期指定值之内的响应消息。
- Accept:浏览器端可以接受的MIME类型。如:Accept:text/html Accept: text/html 代表浏览器可以接受服务器回发的类型为 text/html 也就是我们常说的html文档,如果服务器无法返回text/html类型的数据,服务器应该返回一个406错误(non acceptable)。通配符 * 代表任意类型,例如 Accept: / 代表浏览器可以处理所有类型,(一般浏览器发给服务器都是发这个)。
- Accept-Encoding:浏览器申明自己可接受的编码方法,通常指定的压缩方法,是否支持压缩,支持什么压缩方法(gzip,deflate);如果请求消息中没有设置这个域,服务器假定客户端对各种内容的编码都可以接受
- Accept-Language:浏览器申明自己接受的语言,语言和字符集的区别:中文是语言,中文有多种字符集比如gbk,gb2312等;例如:Accept-Language: en-us。如果请求消息中没有设置这个报头域,服务器假定客户端对各种语言都可以接受。
- Accept-charset:浏览器可接受的字符集。如果在请求消息中没有设置这个域,缺省表示任何字符集都可以接受。
- User-Agent:告诉HTTP服务器,客户端使用的操作系统和浏览器的名称和版本
- Content-Type:如:Content-Type:application\x-www-form-urlencoded
- Referer:包含一个URL,用户从该URL代表的页面出发访问当前请求的页面。提供了Request的上下文信息的服务器,告诉服务器我是从哪个链接过来的,比如从我主页上链接到一个朋友那里,他的服务器就能够从HTTP Referer中统计出每天有多少用户点击我主页上的链接访问他的网站。
- Connection:例如:Connection: keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。HTTP 1.1默认进行持久连接。利用持久连接的优点,当页面包含多个元素时(例如Applet,图片),显著地减少下载所需要的时间。要实现这一点,Servlet需要在应答中发送一个Content-Length头,最简单的实现方法是:先把内容写入ByteArrayOutputStream,然后在正式写出内容之前计算它的大小。Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭,当客户端再次发送Request,需要重新建立TCP连接。
- Host:主要用于指定被请求资源的Internet主机和端口号,它通常从HTTP URL中提取出来的。HTTP/1.1请求必须包含主机头域,否则系统会以400状态码返回。
- Cookie:最重要的请求头之一, 将cookie的值发送给HTTP服务器。
- Content-Lenth:表示请求消息正文的长度。例如:Content-Length: 38。
- Authorization:授权信息通常出现在对服务器发送的WWW-Authenticate头的应答中。主要用于证明客户端有权查看某个资源。当浏览器访问一个页面时,如果收到服务器的响应代码为401(未授权),可以发送一个包含Authorization请求报头域的请求,要求服务器对其进行验证。
UA-Pixels,UA-Color,UA-OS,UA-CPU:由某些版本的IE浏览器所发送的非标准的请求头,表示屏幕大小、颜色深度、操作系统和CPU类型。 - Range:可以请求实体的一个或者多个子范围
2.响应头域
- Allow:服务器支持那些请求的方法;
- Date:表示消息发送的时间
- Expires:指明应该在什么时候认为文档已经过期,从而不在缓存它,要从服务器上获取,更新缓存,过期之前使用本地缓存,HTTP1.1的客户端和缓存会姜非法的日期格式看做已经过期;eg:为了让浏览器不要缓存页面,我们也可以将Expires实体报头域,设置为0。例如: Expires: Tue, 08 Feb 2022 11:35:14 GMT
- P3P:用于跨域设置Cookie,这样可以解决iframe跨域访问cookie的问题;
- set-Cookie:非常重要的header,用于把从cookie发送到客户端浏览器,每一个写入cookie都会生成一个set-Cookie;例如: Set-Cookie: sc=4c31523a; path=/; domain=.acookie.taobao.com
- ETag:和If-None-Match 配合使用。
- Last-Modified:用于指示资源的最后修改日期和时间。Last-Modified也可用setDateHeader方法来设置。
- Content-Type:WEB服务器告诉浏览器自己响应的对象的类型和字符集。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentType。可在web.xml文件中配置扩展名和MIME类型的对应关系。
- Content-Range:用于指定整个实体中的一部分的插入位置,他也指示了整个实体的长度。在服务器向客户返回一个部分响应,它必须描述响应覆盖的范围和整个实体长度。一般格式:Content-Range:bytes-unitSPfirst-byte-pos-last-byte-pos/entity-length。
例如,传送头500个字节次字段的形式:Content-Range:bytes0-499/1234如果一个http消息包含此节(例如,对范围请求的响 应或对一系列范围的重叠请求),Content-Range表示传送的范围。 - Content-Length:指明实体正文的长度,以字节方式存储的十进制数字来表示。在数据下行的过程中,Content-Length的方式要预先在服务器中缓存所有数据,然后所有数据再一股脑儿地发给客户端。只有当浏览器使用持久HTTP连接时才需要这个数据。
- Content-Encoding:WEB服务器表明自己使用了什么压缩方法(gzip,deflate)压缩响应中的对象。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。
- Content-Language:WEB服务器告诉浏览器自己响应的对象所用的自然语言。例如: Content-Language:da。没有设置该域则认为实体内容将提供给所有的语言阅读。
- Server:指明Http服务器用来处理请求的软件信息;例如:Server: Microsoft-IIS/7.5、Server:Apache-Coyote/1.1。此域能包含多个产品标识和注释,产品标识一般按照重要性排序。
- Connection:例如:Connection: keep-alive 当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,如果客户端再次访问这个服务器上的网页,会继续使用这一条已经建立的连接。
Connection: close 代表一个Request完成后,客户端和服务器之间用于传输HTTP数据的TCP连接会关闭,当客户端再次发送Request,需要重新建立TCP连接。 - Location:用于重定向一个新的位置,包含新的URL地址。表示客户应当到哪里去提取文档。Location通常不是直接设置的,而是通过HttpServletResponse的sendRedirect方法,该方法同时设置状态代码为302。Location响应报头域常用在更换域名的时候。
- Refresh:表示浏览器应该在多少时间之后刷新文档,以秒计
- WWW-Authenticate:该响应报头域必须被包含在401(未授权的)响应消息中,客户端收到401响应消息时候,并发送Authorization报头域请求服务器对其进行验证时,服务端响应报头就包含该报头域。
3、 缓存的实现原理
- 实现原理:缓存会根据请求保存输出内容的副本,当下一个请求来的时候若是同URL,缓存直接使用副本响应访问请求而不用向源服务器再次发送请求;
- 客户端缓存生效的常见流程:服务器收到请求时,会在200OK中回送该资源的Last-Modified和ETag头,客户端将该资源保存在cache中,并记录这两个属性,当客户端需要发送相同请求的时候,会在请求中携带If-Modified-since和If-None-Match两个头,两个头分别响应中的Last-Modified和ETag的值,服务器通过这两个值判断本地资源未发生变化,客户端不需要下载返回304;
- 缓存机制
- Freshness:允许一个回应消息可以在源服务器不被重新检查,并且可以由服务器和客户端来控制。例如,Expires回应头给了一个文档不可用的时间。Cache-Control中的max-age标识指明了缓存的最长时间;
- Validation:用来检查以一个缓存的回应是否仍然可用。例如,如果一个回应有一个Last-Modified回应头,缓存能够使用If-Modified-Since来判断是否已改变,以便判断根据情况发送请求;
- Invalidation:在另一个请求通过缓存的时候,常常有一个副作用。例如,如果一个URL关联到一个缓存回应,但是其后跟着POST、PUT和DELETE的请求的话,缓存就会过期。
4. cookie和session的保持状态
- 通过cookie保存状态信息;通过cookie服务器就可以清楚的知道两个请求是否来自于同一个客户端;
- 通过session保存状态信息
- session机制是一种服务器端的机制,服务器使用一种类似于散列表的结构来保存信息,
- 服务器给每个Session分配一个唯一的JSESSIONID,并通Cookie发送给客户端。当客户端发起新的请求的时候,将在Cookie头中携带这个JSESSIONID。这样服务器能够找到这个客户端对应的Session。
5. 多线程下载的原理
- 下载工具开启多个发出HTTP请求的线程;每个http请求只请求资源文件的一部分:Content-Range: bytes 20000-40000/47000;合并每个线程下载的文件
6. http代理以及隧道、geteway的理解
- http代理服务器
- 代理服务器英文全称是Proxy Server,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。大部分代理服务器都具有缓冲的功能,就好象一个大的Cache,它有很大的存储空间,它不断将新取得数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率
- http代理服务器的主要功能:
- 突破自身IP访问限制,访问国外站点。如:教育网、169网等网络用户可以通过代理访问国外网站;
- 访问一些单位或团体内部资源,如某大学FTP(前提是该代理地址在该资源的允许访问范围之内),使用教育网内地址段免费代理服务器,就可以用于对教育 网开放的各类FTP下载上传,以及各类资料查询共享等服务;
- 突破中国电信的IP封锁:中国电信用户有很多网站是被限制访问的,这种限制是人为的,不同Serve对地址的封锁是不同的。所以不能访问时可以换一个国外的代理服务器试试;
- 提高访问速度:通常代理服务器都设置一个较大的硬盘缓冲区,当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时,则直接由缓冲区中取出信息,传给用户,以提高访问速度;
- 隐藏真实IP:上网者也可以通过这种方法隐藏自己的IP,免受攻击。
8. https的传输协议原理
9. http不同的版本之间的区别
- HTTP/1.0 这是第一个在通讯中指定版本号的HTTP 协议版本,至今仍被广泛采用,特别是在代理服务器中。
- HTTP/1.1 当前版本。持久连接被默认采用,并能很好地配合代理服务器工作。还支持以管道方式同时发送多个请求,以便降低线路负载,提高传输速度。
- HTTP/1.1相较于 HTTP/1.0 协议的区别主要体现在:
- 缓存处理
- 带宽优化及网络连接的使用
- 错误通知的管理
- 消息在网络中的发送
- 互联网地址的维护
- 安全性及完整性
网友评论