5、HTTP协议的版本
HTTP1.1和HTTP1.0的区别
Persistent Connection(持久连接)
在HTTP1.0中,每对Request/Response都使用一个新的连接。
HTTP 1.1则支持Persistent Connection, 并且默认使用persistent connection.
Host域
HTTP1.1在Request消息头里头多了一个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.1有2个)
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 Negotiation,Agent-driven Negotiation和Transparent Negotiation三种。
Cache (缓存)
HTTP1.1(RFC2616)详细展开地描述了Cache机制
6、socket
socket的英文原义是“孔”或“插座”。作为4BDS UNIX的进程通信机制,取后一种意思。通常也称作"套接字",用于描述IP地址和端口,是一个通信链的句柄。
每一个socket用一个半相关描述:(协议,本地地址,本地端口)
一个完整的socket有一个本地唯一的socket号,由操作系统分配。即上面的本地地址。这个本地地址是一种文件描述符,和文件句柄很相似。
在Internet上有很多这样的主机,这些主机一般运行了多个服务软件,同时提供几种服务。每种服务都打开一个socket(ServerSocket),并绑定到一个端口上,不同的端口对应于不同的服务。socket正如其英文原意那样,象一个多孔插座。一台主机犹如布满各种插座的房间,每个插座有一个编号,有的插座提供220伏交流电, 有的提供110伏交流电,有的则提供有线电视节目。 客户软件将插头插到不同编号的插座,就可以得到不同的服务。
socket接口是TCP/IP网络的API,socket接口定义了许多函数或例程,程序员可以用它们来开发TCP/IP网络上的应用程序。要学Internet上的TCP/IP网络编程,必须理解socket接口。socket接口设计者最先是将接口放在Unix操作系统里面的。如果了解Unix系统的输入和输出的话,就很容易了解socket了。网络的socket数据传输是一种特殊的I/O,socket也是一种文件描述符。socket也具有一个类似于打开文件的函数调用Socket(),该函数返回一个整型的socket描述符,随后的连接建立、数据传输等操作都是通过该socket实现的。
在socket编程接口里,设计者提出了一个很重要的概念,那就是socket。这个socket跟文件句柄很相似(一种文件描述符),实际上在BSD系统里就是跟文件句柄一样存放在一样的进程句柄表里。这个socket其实是一个序号,表示其在句柄表中的位置。这一点,我们已经见过很多了,比如文件句柄,窗口句柄等等。这些句柄,其实是代表了系统中的某些特定的对象,用于在各种函数中作为参数传入,以对特定的对象进行操作--这其实是C语言的问题,在C++语言里,这个句柄其实就是this指针,实际就是对象指针啦。
socket跟TCP/IP并没有必然的联系。socket编程接口在设计的时候,就希望也能适应其他的网络协议。所以,socket的出现只是可以更方便的使用TCP/IP协议栈而已,其对TCP/IP进行了抽象,形成了几个最基本的函数接口。比如create,listen,accept,connect,read和write等等。
如果一个程序创建了一个socket(ServerSocket),并让其监听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协议的操作封装!
ServerSocket和Socket,我认为本质上都是socket,都是文件描述符,只不过ServerSocket提供了创建Socket的方法。以J2SDK-1.3为例,Socket和ServerSocket类库位于java.net包中。ServerSocket用于服务器端,Socket是建立网络连接时使用的。不管是Socket还是ServerSocket它们的工作都是通过SocketImpl类及其子类完成的。
在TCP连接成功时,应用程序两端都会产生一个Socket实例。操作这个实例,完成所需的会话。对于一个网络连接来说,套接字是平等的,并没有差别,不因为在服务器端或在客户端而产生不同级别。
分享到:
相关推荐
在JavaWeb开发中,HTTP协议、Tomcat服务器和Servlet是三个关键的概念,它们构成了Web应用程序的基础框架。HTTP协议是客户端和服务器之间通信的标准,Tomcat是应用广泛的Java Servlet容器,而Servlet则是Java语言中...
Tomcat 是一个基于 Java 的开源实现的 Servlet 容器,可以运行 Java Servlet 和 JavaServer Pages(JSP)程序,而 Http 协议是万维网(World Wide Web)中使用的主要协议。 首先,我们来了解 JavaEE 规范。JavaEE ...
本文主要介绍了HTTP协议的基本概念和请求响应模型,以及Tomcat作为Servlet容器的工作原理。通过对Tomcat源码的探索,可以深入了解其内部设计,这对于提升Web应用开发和运维能力具有重要意义。无论是HTTP协议的深入...
本文将详细介绍Apache HTTP Server与Tomcat的三种连接方式:独立模式、代理模式和集成模式。 一、独立模式 在独立模式下,Apache和Tomcat作为两个独立的服务器运行。Apache主要负责处理静态内容,如HTML、CSS、...
Tomcat是一款开源的Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范,用于部署和运行Java Web应用。在Android客户端与服务器通信的场景下,Tomcat扮演了接收和响应HTTP请求的角色。 三、HTTP协议...
4. ALPN(Application-Layer Protocol Negotiation):为实现HTTP/2提供了更高效的连接处理。 5. WebSocket增强:除了基本的WebSocket 1.1支持,还添加了更多的控制和管理功能。 6. 更强的可扩展性:通过改进插件...
### 在Tomcat中实现HTTPS安全连接的方法 #### 一、SSL概述 SSL(Secure Socket Layer)是一种用于Web的安全协议,它通过加密数据传输来保护Web通信的安全性。SSL的主要功能是为Web通信提供一个安全通道,确保数据...
Tomcat是Apache软件基金会的Jakarta项目中的一个核心项目,是一个开源的Servlet容器,它实现了Java Servlet和JavaServer Pages(JSP)规范。Tomcat7、Tomcat8和Tomcat9是不同版本的Tomcat,每个版本都有其特性和改进...
【服务器原理和协议】 ...总的来说,服务器原理、HTTP协议、Tomcat、Servlet和JSP是构建Web应用的基础,它们共同构成了Web服务的核心机制。理解这些知识点对于进行软件开发,特别是Java Web开发至关重要。
它实现了JK(Java Kona)协议,负责将HTTP请求转发到Tomcat实例,同时将响应返回给客户端。通过配置mod_jk的worker.properties文件来定义Tomcat实例,以及httpd.conf中的mod_jk.conf配置来设置路由规则。 2. ** mod...
7. **连接器与协议**:讲解`Connector`元素在`server.xml`中的配置,包括HTTP、AJP等协议的使用,以及调整连接器参数以优化性能。 8. **安全性**:讨论如何设置用户认证、角色权限和 Realm,以实现基本的访问控制。...
在传统的HTTP协议中,浏览器和服务器之间的通信是基于请求-响应模型的,即每次交互都需要客户端发起请求,服务器才能响应。而WebSocket则允许持久连接,允许数据双向传输,大大减少了延迟,提高了效率,尤其适合实时...
例如,可以通过修改workers.properties文件中的worker列表,实现请求在多个Tomcat实例间的分发,从而提高系统可用性和性能。 总结来说,Apache HttpServer 2.4.X与Tomcat连接器的使用涉及到Apache服务器的模块配置...
在这个“tomcat实现websocket聊天室”的项目中,我们将深入探讨如何利用Tomcat搭建一个具备单聊、群聊、数据库管理以及用户管理功能的聊天室。 首先,我们需要理解WebSocket API的基本概念。WebSocket协议定义了两...
【标题】"how tomcat works和jetty-src和tomcat7-src" 提及了三个关键概念:Tomcat的工作原理、Jetty源代码以及Tomcat 7的源代码。这些是Java Web服务器领域的核心元素,主要涉及到如何处理HTTP请求、部署Web应用...
本压缩包包含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是Apache软件基金会的Jakarta项目中的一个核心项目,它是一个开源的、免费的Web应用服务器,实现了Java Servlet和JavaServer Pages(JSP)规范。 【描述】"tomcat的简易源码实现"指的是通过阅读和理解Tomcat...
### Apache和Tomcat实现集群和负载均衡(Windows NT) #### 软件环境 为了实现Apache与Tomcat的集群及负载均衡,在Windows NT环境下需要准备以下软件环境: 1. **Apache**: 版本2.0.55。可以从官方网站...
6. **启动Tomcat**:启动Tomcat服务器,Web服务就会按照指定的端点地址(由`@WebService`注解中的`serviceName`和`endpointInterface`属性决定)运行。 7. **客户端调用**:创建一个Web服务客户端,通过JAX-WS的`...