`
ylsun1113
  • 浏览: 28381 次
  • 性别: 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实例。操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。

分享到:
评论

相关推荐

    JavaWeb HTTP协议&Tomcat&Servlet

    在JavaWeb开发中,HTTP协议、Tomcat服务器和Servlet是三个关键的概念,它们构成了Web应用程序的基础框架。HTTP协议是客户端和服务器之间通信的标准,Tomcat是应用广泛的Java Servlet容器,而Servlet则是Java语言中...

    Tomcat & Http协议

    Tomcat 是一个基于 Java 的开源实现的 Servlet 容器,可以运行 Java Servlet 和 JavaServer Pages(JSP)程序,而 Http 协议是万维网(World Wide Web)中使用的主要协议。 首先,我们来了解 JavaEE 规范。JavaEE ...

    http协议详解和tomcat源码,how tomcat works

    本文主要介绍了HTTP协议的基本概念和请求响应模型,以及Tomcat作为Servlet容器的工作原理。通过对Tomcat源码的探索,可以深入了解其内部设计,这对于提升Web应用开发和运维能力具有重要意义。无论是HTTP协议的深入...

    Apache HTTP Server 与 Tomcat 的三种连接方式介绍

    本文将详细介绍Apache HTTP Server与Tomcat的三种连接方式:独立模式、代理模式和集成模式。 一、独立模式 在独立模式下,Apache和Tomcat作为两个独立的服务器运行。Apache主要负责处理静态内容,如HTML、CSS、...

    Android&Tomcat服务器Http协议通信

    Tomcat是一款开源的Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范,用于部署和运行Java Web应用。在Android客户端与服务器通信的场景下,Tomcat扮演了接收和响应HTTP请求的角色。 三、HTTP协议...

    tomcat 7 和 tomcat 8

    4. ALPN(Application-Layer Protocol Negotiation):为实现HTTP/2提供了更高效的连接处理。 5. WebSocket增强:除了基本的WebSocket 1.1支持,还添加了更多的控制和管理功能。 6. 更强的可扩展性:通过改进插件...

    在tomcat中实现https安全连接的方法

    ### 在Tomcat中实现HTTPS安全连接的方法 #### 一、SSL概述 SSL(Secure Socket Layer)是一种用于Web的安全协议,它通过加密数据传输来保护Web通信的安全性。SSL的主要功能是为Web通信提供一个安全通道,确保数据...

    tomcat7,tomcat8,tomcat9

    Tomcat是Apache软件基金会的Jakarta项目中的一个核心项目,是一个开源的Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范。Tomcat7、Tomcat8和Tomcat9是不同版本的Tomcat,每个版本都有其特性和改进...

    服务器原理和协议&Tomcat&Http协议[总结].pdf

    【服务器原理和协议】 ...总的来说,服务器原理、HTTP协议、Tomcat、Servlet和JSP是构建Web应用的基础,它们共同构成了Web服务的核心机制。理解这些知识点对于进行软件开发,特别是Java Web开发至关重要。

    Apache HTTP Server 与 Tomcat 的连接方式介绍

    它实现了JK(Java Kona)协议,负责将HTTP请求转发到Tomcat实例,同时将响应返回给客户端。通过配置mod_jk的worker.properties文件来定义Tomcat实例,以及httpd.conf中的mod_jk.conf配置来设置路由规则。 2. ** mod...

    tomcat中文帮助手册

    7. **连接器与协议**:讲解`Connector`元素在`server.xml`中的配置,包括HTTP、AJP等协议的使用,以及调整连接器参数以优化性能。 8. **安全性**:讨论如何设置用户认证、角色权限和 Realm,以实现基本的访问控制。...

    基于Tomcat实现HTML5的WebSocket

    在传统的HTTP协议中,浏览器和服务器之间的通信是基于请求-响应模型的,即每次交互都需要客户端发起请求,服务器才能响应。而WebSocket则允许持久连接,允许数据双向传输,大大减少了延迟,提高了效率,尤其适合实时...

    Apache Httpserver2.4.X 和tomcat连接器

    例如,可以通过修改workers.properties文件中的worker列表,实现请求在多个Tomcat实例间的分发,从而提高系统可用性和性能。 总结来说,Apache HttpServer 2.4.X与Tomcat连接器的使用涉及到Apache服务器的模块配置...

    tomcat实现websocket聊天室

    在这个“tomcat实现websocket聊天室”的项目中,我们将深入探讨如何利用Tomcat搭建一个具备单聊、群聊、数据库管理以及用户管理功能的聊天室。 首先,我们需要理解WebSocket API的基本概念。WebSocket协议定义了两...

    how tomcat works和jetty-src和tomcat7-src

    【标题】"how tomcat works和jetty-src和tomcat7-src" 提及了三个关键概念:Tomcat的工作原理、Jetty源代码以及Tomcat 7的源代码。这些是Java Web服务器领域的核心元素,主要涉及到如何处理HTTP请求、部署Web应用...

    Tomcat 6、7、8全部三版

    本压缩包包含Tomcat的三个主要版本:6.0.53、7.0.78和8.0.0-RC1,这些版本分别代表了Tomcat在不同时间点的特性与功能。 **Tomcat 6.0.53** Tomcat 6是Java EE 5规范的支持者,它支持Servlet 2.5和JSP 2.1标准。这个...

    简单的Tomcat源码实现

    Tomcat是Apache软件基金会的Jakarta项目中的一个核心项目,它是一个开源的、免费的Web应用服务器,实现了Java Servlet和JavaServer Pages(JSP)规范。 【描述】"tomcat的简易源码实现"指的是通过阅读和理解Tomcat...

    Apache和Tomcat实现集群和负载均衡(WindowsNT)

    ### Apache和Tomcat实现集群和负载均衡(Windows NT) #### 软件环境 为了实现Apache与Tomcat的集群及负载均衡,在Windows NT环境下需要准备以下软件环境: 1. **Apache**: 版本2.0.55。可以从官方网站...

    webservice部署tomcat简单例子(客户端和服务端)

    6. **启动Tomcat**:启动Tomcat服务器,Web服务就会按照指定的端点地址(由`@WebService`注解中的`serviceName`和`endpointInterface`属性决定)运行。 7. **客户端调用**:创建一个Web服务客户端,通过JAX-WS的`...

Global site tag (gtag.js) - Google Analytics