`
ylsun1113
  • 浏览: 27931 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

HTTP协议和tomcat中的HTTP实现(三)

    博客分类:
  • http
阅读更多

5HTTP协议的版本

 

HTTP1.1HTTP1.0的区别

 

Persistent Connection(持久连接)

HTTP1.0中,每对Request/Response都使用一个新的连接。

HTTP 1.1则支持Persistent Connection, 并且默认使用persistent connection.

 

Host

HTTP1.1Request消息头里头多了一个Host域,比如:

                   GET /pub/WWW/TheProject.html HTTP/1.1

                   Host: www.w3.org

HTTP1.0则没有这个域。

可能HTTP1.0的时候认为,建立TCP连接的时候已经指定了IP地址,这个IP地址上只有一个host

 

date/time stamp (日期时间戳)

(接收方向)

无论是HTTP1.0还是HTTP1.1,都要能解析下面三种date/time stamp

                             Sun, 06 Nov 1994 08:49:37 GMT  ; RFC 822, updated by RFC 1123

 

                             Sunday, 06-Nov-94 08:49:37 GMT ; RFC 850, obsoleted by RFC 1036

 

                             Sun Nov  6 08:49:37 1994       ; ANSI C's asctime() format

(发送方向)

HTTP1.0要求不能生成第三种asctime格式的date/time stamp

HTTP1.1则要求只生成RFC 1123(第一种)格式的date/time stamp

 

Transfer Codings

HTTP1.1支持chunked transfer,所以可以有Transfer-Encoding头部域:

Transfer-Encoding: chunked

HTTP1.0则没有。

 

Quality Values

HTTP1.1多了个qvalue域:

                   qvalue         = ( "0" [ "." 0*3DIGIT ] )

 

                                    | ( "1" [ "." 0*3("0") ] )

 

 

Entity Tags

用于Cache

 

Range Content-Range

HTTP1.1支持传送内容的一部分。比方说,当客户端已经有内容的一部分,为了节省带宽,可以只向服务器请求一部分。

 

100 (Continue) Status

100 (Continue) 状态代码的使用,允许客户端在发request消息body之前先用request header试探一下server,看server要不要接收request body,再决定要不要发request body

客户端在Request头部中包含

Expect: 100-continue

Server看到之后呢如果回100 (Continue) 这个状态代码,客户端就继续发request body

这个是HTTP1.1才有的。

 

Request method

HTTP1.1增加了OPTIONS, PUT, DELETE, TRACE, CONNECT这些Request方法.

                            Method         = "OPTIONS"                ; Section 9.2

 

                                             | "GET"                    ; Section 9.3

 

                                             | "HEAD"                   ; Section 9.4

 

                                             | "POST"                   ; Section 9.5

 

                                             | "PUT"                    ; Section 9.6

 

                                             | "DELETE"                 ; Section 9.7

 

                                             | "TRACE"                  ; Section 9.8

 

                                             | "CONNECT"                ; Section 9.9

 

                                             | extension-method

 

extension-method = token

 

Status code

HTTP1.1 增加的新的status code

(HTTP1.0没有定义任何具体的1xx status code, HTTP1.12)

100 Continue

101 Switching Protocols

203 Non-Authoritative Information

205 Reset Content

206 Partial Content

302 Found (HTTP1.0中有个 302 Moved Temporarily)

303 See Other

305 Use Proxy

307 Temporary Redirect

405 Method Not Allowed

406 Not Acceptable

407 Proxy Authentication Required

408 Request Timeout

409 Conflict

410 Gone

411 Length Required

412 Precondition Failed

413 Request Entity Too Large

414 Request-URI Too Long

415 Unsupported Media Type

416 Requested Range Not Satisfiable

417 Expectation Failed

504 Gateway Timeout

505 HTTP Version Not Supported

 

Content Negotiation

HTTP1.1增加了Content Negotiation,分为Server-driven NegotiationAgent-driven NegotiationTransparent Negotiation三种。

 

Cache (缓存)

HTTP1.1(RFC2616)详细展开地描述了Cache机制

 

6socket

socket的英文原义是“孔”或“插座”。作为4BDS UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。

每一个socket用一个半相关描述:(协议,本地地址,本地端口)

一个完整的socket有一个本地唯一的socket号,由操作系统分配。即上面的本地地址。这个本地地址是一种文件描述符,和文件句柄很相似。

Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个socketServerSocket),并绑定到一个端口上,不同的端口对应于不同的服务。socket正如其英文原意那样,象一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。

socket接口是TCP/IP网络的APIsocket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解socket接口。socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解socket了。网络的socket数据传输是一种特殊的I/Osocket也是一种文件描述符。socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的socket描述符,随后的连接建立、数据传输等操作都是通过该socket实现的。

socket编程接口里,设计者提出了一个很重要的概念,那就是socket。这个socket跟文件句柄很相似(一种文件描述符),实际上在BSD系统里就是跟文件句柄一样存放在一样的进程句柄表里。这个socket其实是一个序号,表示其在句柄表中的位置。这一点,我们已经见过很多了,比如文件句柄,窗口句柄等等。这些句柄,其实是代表了系统中的某些特定的对象,用于在各种函数中作为参数传入,以对特定的对象进行操作--这其实是C语言的问题,在C++语言里,这个句柄其实就是this指针,实际就是对象指针啦。

socketTCP/IP并没有必然的联系。socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以,socket的出现只是可以更方便的使用TCP/IP协议栈而已,其对TCP/IP进行了抽象,形成了几个最基本的函数接口。比如createlistenacceptconnectreadwrite等等。

如果一个程序创建了一个socketServerSocket),并让其监听80端口,其实是向TCP/IP协议栈声明了其对80端口的占有。以后,所有目标是80端口的TCP数据包都会转发给该程序(这里的程序,因为使用的是socket编程接口,所以首先由socket层来处理)。所谓accept函数,其实抽象的是TCP的连接建立过程。accept函数返回的新socket其实指代的是本次创建的连接,而一个连接是包括两部分信息的,一个是源IP和源端口,另一个是宿IP和宿端口。所以,accept可以产生多个不同的socket,而这些socket里包含的宿IP和宿端口是不变的,变化的只是源IP和源端口。这样的话,这些socket宿端口就可以都是80,而socket层还是能根据源/宿对来准确地分辨出IP包和socket的归属关系,从而完成对TCP/IP协议的操作封装!

ServerSocketSocket,我认为本质上都是socket,都是文件描述符,只不过ServerSocket提供了创建Socket的方法。以J2SDK-1.3为例,SocketServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。

TCP连接成功时,应用程序两端都会产生一个Socket实例。操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。

分享到:
评论

相关推荐

    使用CAS在Tomcat中实现单点登录

    CAS(Central Authentication Service)是一款不错的针对 Web 应用的单点登录框架,本文介绍了 CAS 的原理、协议、在 Tomcat 中的配置和使用,对于采用 CAS 实现轻量级单点登录解决方案的入门读者具有一定指导作用。

    Java后端WebSocket的Tomcat实现.docx

    本文档主要讲述的是Java后端WebSocket的Tomcat实现;随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了。近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务器的全双工通信,...

    apr库(tomcat优化)

     AJP Connector, 基于AJP协议,AJP是专门设计用来为tomcat与http服务器之间通信专门定制的协议,能提供较高的通信速度和效率。如与Apache服务器集成时,采用这个协议。  APR HTTP Connector, 用C实现,通过JNI调用...

    在tomcat中配置https的总结

    为了使网站或开发的软件使用https协议访问,使用keytool工具实现生成证书,并在tomcat1.6的配置文件上设置相应的代码实现访问地址形式如:https://localhost/login.jsp。

    apache+tomcat 实现负载均衡

    在Apache中通过mod_proxy_ajp模块发送AJP数据,另外一端的服务器需要实现AJP协议,能够接受mod_proxy_ajp模块发送的AJP协议数据,在接受到AJP协议数据后做适当处理,并能够将处理结果以AJP协议方式发送回给mod_proxy_...

    基于HTTP协议的网络数据分析系统的设计与实现.pdf

    参考了 HTTP 协议中 User_Agent 字段的变动历史,提出了从 User_Agent 字段中提取浏览器信息、设备名称和操作系统的方法,实现了终端设备层面的 分析。对于用户层面,解析了 HTTP 协议正文,包括 JSON 格式和 HTML ...

    tomcat和apache mod_jk.so

    除了性能的提升,mod_jk另外的一个作用可以实现apache与tomcat一对多的对应, 使后端tomcat负载均衡。mod_jk也提供apache与tomcat链接情况的监控。 mod_jk模块的典型工作流程是这样的:一个HTTP请求过来,mod_jk模块...

    CVE-2020-1938 Apache Tomcat 文件包含EXP

    该漏洞是由于Tomcat AJP协议存在缺陷而导致,攻击者利用该漏洞可通过构造特定参数,读取服务器webapp下的任意文件。若目标服务器同时存在文件上传功能,攻击者可进一步实现远程代码执行。目前,厂商已发布新版本完成...

    spring-boot-protocol:springboot功能扩展-netty动态协议,可以支持各种网络协议的动态切换(单端口支持多个网络协议)。支持mmap,sendfile零拷贝,http请求批量聚合

    其中内置多个网络传输(标准与规范)的实现库,轻松添加或扩展协议。例如:HttpServlet,RPC,MQTT(物联网通讯协议),Websocket,RTSP(流媒体协议),DNS(域名解析协议),MYSQL协议。 1.可以替代tomcat或jetty....

    apache-tomcat-8.5.50-src.zip

    Tomcat启动流程分析 组件的生命周期管理 用Lifecycle管理启动、停止、关闭 Lifecycle接口预览 几个核心方法 Server中的init方法示例 为啥StandardServer没有init方法 LifecycleBase中的init与...

    tomcat8+websocket演示

    tomcat8真正支持jsr-356(包含对websocket的支持), tomcat7部分版本的websocket实现不兼容jsr-356。 需要注意websocket与浏览器的兼容问题,有些早期版本的浏览器支持旧版本的websocket协议,可能会与新版本的...

    Apache-Tomcat-8.5.5(Linux )

    Tomcat 8.5.x版本升级变化 By jmatrix_ds | Published 2017 年 1 月 9 日 1. 其中一些重要变化(对HTTP2,SSL支持的改动较多) <1> 不再提供对HTTP BIO,AJP BIO的支持; <2> 重构HTTP upgrade与AJP实现,减少重复;...

    apr库(tomcat优化) for native 20

     AJP Connector, 基于AJP协议,AJP是专门设计用来为tomcat与http服务器之间通信专门定制的协议,能提供较高的通信速度和效率。如与Apache服务器集成时,采用这个协议。  APR HTTP Connector, 用C实现,通过JNI...

    tomcat是java的一个中间件,浏览器发出HTTP请求后经过tomcat中间件,通过tomcat返回给浏览器的实现

    tomcat是java的一个中间件,浏览器发出HTTP请求后经过tomcat中间件,转发到目的服务器,目的服务器返回响应消息,通过tomcat返回给浏览器。

    apache-tomcat-8.5.30.zip

    最小的 Java 版本和实现的规范版本保持不变。 与 8.5.29 相比,显着的变化包括:将对 maxDays 属性的支持添加到 AccessLogValve 和 ExtendedAccessLogValve。 这允许在定义删除之前保留轮询访问日志的最大天数在...

    Tomcat汤姆猫

    Tomcat是由Apache软件基金会属下Jakarta项目开发的Servlet容器,按照Sun Microsystems提供的技术规范,实现了对Servlet和JavaServer Page(JSP)的支持,并提供了作为Web服务器的一些特有功能,如Tomcat管理和控制...

    Tomcat中实现Session小结

    Http协议是一种无状态协议,即每次服务端接收到客户端的请求时,都是一个全新的请求,服务器并不知道客户端的历史请求记录; Session的主要目的就是为了弥补Http的无状态特性。简单的说,就是服务器可以利用session...

    基于XMPP协议的Android消息推送设计与实现.pdf

    本文介绍了一种基于XMPP 协议的AndroidPn 开源框架的实现模型,将其部署在MySQL 数据库和Tomcat 服务器下,实现并改进了实时推送消息、自定义消息结构和内容、推送服务开机启动、手机端服务唤醒、发送离线消息等实用...

    HTTP Cookie 协议管理标准分析以及结构实现

    介绍Cookie的基本原理,服务器、客户端针对Cookie的使用; 讲述自己实现Cookie 管理器应该使用的方式,以及存储Cookie的结构说明。

    keepalived+Nginx+tomcat 搭建集群

    keepalived+Nginx+tomcat 搭建集群,实现高并发、高负载体系架构,具备我们平时说的第3层、第4层和第7层交换机的功能。主要提供loadbalancing(负载均衡)和 high-availability(高可用)功能,负载均衡实现需要依赖...

Global site tag (gtag.js) - Google Analytics