Http协议与TCP协议

字数 905阅读 125
Paste_Image.png

Http协议

HTTP 超文本传输协议,是一个基于请求与响应模式的、无状态的、应用层协议。

Http报文介绍

Http请求报文�由请求行(request line)、请求头部(header)和请求数据组成,下图给出了请求报文的一般格式。

Paste_Image.png
  • 1、请求行
    由3部分组成,分别为:请求方法URL以及协议版本,之间由空格分隔
    请求方法包括GETHEADPUTPOSTTRACEOPTIONS、DELETE以及扩展方法,当然并不是所有的服务器都实现了所有的方法,部分方法即便支持,处于安全性的考虑也是不可用的
    协议版本的格式为:HTTP/主版本号.次版本号,常用的有HTTP/1.0和HTTP/1.1
    HTTP1.0定义了三种请求方法: GET, POSTHEAD方法。
    HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACECONNECT 方法。
Paste_Image.png
  • 2,请求头部
    请求头部为请求报文添加了一些附加信息,由“名/值”对组成,每行一对,名和值之间使用冒号分隔

常见请求头:


Paste_Image.png

请求头部的最后会有一个空行,表示请求头部结束,对于请求报文的组成有另一种说法:请求报文由请求行请求头空行请求体四个部分组成。

  • 3、请求正文
    可选部分,比如GET请求就没有请求正文
    GET请求示例:
Paste_Image.png

POST请求示例:

Paste_Image.png

Http响应报文
Http响应报文由状态行、响应头部、响应正文3部分组成

Paste_Image.png
  • 1、状态行
    由3部分组成,分别为:协议版本,状态码,状态码描述,之间由空格分隔
    状态代码为3位数字,200299的状态码表示成功,300399的状态码指资源重定向,400499的状态码指客户端请求出错,500599的状态码指服务端出错(HTTP/1.1向协议中引入了信息性状态码,范围100~199)
    状态码可参考HTTP状态码

  • 响应头部
    常见响应头部:

响应头 �说明
Allow 服务器支持哪些请求方法(如GET、POST等)
Content-Encoding 文档的编码(Encode)方法。只有在解码之后才可以得到Content-Type头指定的内容类型。利用gzip压缩文档能够显著地减少HTML文档的下载时间。Java的GZIPOutputStream可以很方便地进行gzip压缩,但只有Unix上的Netscape和Windows上的IE 4、IE 5才支持它。因此,Servlet应该通过查看Accept-Encoding头(即request.getHeader("Accept-Encoding"))检查浏览器是否支持gzip,为支持gzip的浏览器返回经gzip压缩的HTML页面,为其他浏览器返回普通页面。
Content-Length 表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。如果你想要利用持久连接的优势,可以把输出文档写入 ByteArrayOutputStream,完成后查看其大小,然后把该值放入Content-Length头,最后通过byteArrayStream.writeTo(response.getOutputStream()发送内容。
Content-Type 表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。由于经常要设置Content-Type,因此HttpServletResponse提供了一个专用的方法setContentType。
Server 服务器应用程序软件的名称和版本
Content-Charset 响应正文使用的编码
Content-Language 响应正文使用的语言

响应示例:

Paste_Image.png

Content-Type
Content-Type,http内容类型,一般是指网页中存在Content-Type。用于定义网络文件的类型和网页编码,决定文件接收方以什么样的形式,什么编码读取这个文件。
Content-Type默认类型是“text/html”。
Content-type类型有很多种,具体可参考HTTP content-type 对照表

URL
URL全名为Uniform Resource Locator(统一资源定位),通过描述资源的位置来标识资源

  • URI、URL和URN之间的区别
    URI全名为Uniform Resource Indentifier(统一资源标识),用来唯一的标识一个资源,是一个通用的概。URI由两个主要的子集URL和URN组成。
    URL全名为Uniform Resource Locator(统一资源定位),通过描述资源的位置来标识资源
    URN全名为Uniform Resource Name(统一资源命名),通过资源的名字来标识资源,与其所处的位置无关,这样即使资源的位置发生变动,其URN也不会变化

HTTP规范将更通用的概念URI作为其资源标识符,但是实际上,HTTP应用程序处理的只是URI的URL子集

-关于BIO和NIO的理解

推荐阅读更多精彩内容