一、HTTP简介


  1. 概念
    HTTP:Hyper Text Transfer Protocol(超文本传输协议)。
    用途:基于TCP/IP通信协议,从万维网(World Wide Web)服务器传输超文本到本地服务器。
  2. 工作原理
    HTTP是客户端与Web服务器(C/S)之间的通信协议,客户端通过URL向服务器发送请求,服务器接收到请求后向客户端发送响应信息。
    HTTP默认端口号为80,可修改。
  3. 注意:
    ① HTTP是无连接的,即限制每次廉洁只处理一个请求,服务器发出响应并收到客户端应答后就断开连接,也就是不同请求之间相互独立。好处是节省传输时间。
    ② HTTP是媒体独立的,即任何客户端和服务器知道如何处理的数据内容都可以通过HTTP传输。
    ③ HTTP是无状态的,即不会记忆之前的信息,需要之前的信息必须重传。好处一是每次连接传送的数据量增大,二是在服务器不需要先前信息时反应较快。
  4. HTTP协议通信流程:
    HTTP协议学习笔记_服务器

二、消息结构


  1. 请求
    客户端发送一个HTTP请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,下图给出了请求报文的一般格式。
    HTTP协议学习笔记_html_02
    示例:

GET /hello.txt HTTP/1.1
User-Agent: curl/7.16.3 libcurl/7.16.3 OpenSSL/0.9.7l zlib/1.2.3
Host: www.example.com
Accept-Language: en, mi


  1. 响应
    HTTP响应也由四个部分组成,分别是:状态行、消息报头、空行和响应正文,下图给出了请求报文的一般格式。
    HTTP协议学习笔记_服务器_03

HTTP/1.1 200 OK
Date: Mon, 9 Aug 2021 19:13:05 GMT
Context-Type: text/html; charset=ISO-8859-1
Content-Length: 122

<html>
<head>
<title>My Homepage</title>
</head>
<body>
<!-- body goes here -->
</body>
</html>

三、请求方法

HTTP1.0定义了三种请求方法:GET、POST、HEAD;

HTTP1.1新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE、CONNECT。

序号

方法

描述

1

GET

请求指定的页面信息,并返回实体主体。

2

HEAD

类似于GET请求,只不过返回的响应中没有具体的内容,用于获取报头。

3

POST

向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

4

PUT

从客户端向服务器传送的数据取代指定的文档的内容。

5

DELETE

请求服务器删除指定的页面。

6

CONNECT

HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

7

OPTIONS

允许客户端查看服务器的性能。

8

TRACE

回显服务器收到的请求,主要用于测试或诊断。

9

PATCH

是对PUT方法的补充,用来对已知资源进行局部更新。

四、响应头信息

序号

响应头

说明

1

Allow

服务器支持哪些请求方法(如GET、POST等)。

2

Content-Encoding

文档的编码(Encode)方法。

3

Content-Length

表示内容长度。

4

Content-Type

表示后面的文档属于什么MIME类型。

5

Date

当前的GMT时间。

6

Expires

文档过期的时间

7

Last-Modified

文档的最后改动时间。

8

Location

表示客户应当到哪里去提取文档。

9

Refresh

表示浏览器应该在多少时间之后刷新文档,以秒计。

10

Server

服务器名字。

11

Set-Cookie

设置和页面关联的Cookie。Servlet不应使用response.setHeader("Set-Cookie", ...),而是应使用HttpServletResponse提供的专用方法addCookie。

12

WWW-Authenticate

客户应该在Authorization头中提供的授权信息

五、状态码

HTTP响应的状态行中包含一个状态码(HTTP Status Code),用以表示服务器响应状态。

常见的状态码:


  • 200 - 请求成功
  • 301 - 资源(网页等)被永久转移到其它URL
  • 404 - 请求的资源(网页等)不存在
  • 500 - 内部服务器错误

状态码由三个十进制数字组成,第一个数字定义了状态码的类型,后两位表示具体状态。状态码可分为5类:

状态码

描述

1**

信息,服务器收到请求,需要请求者继续执行操作。

2**

成功,操作被成功接收并处理。

3**

重定向,需要进一步的操作以完成请求。

4**

客户端错误,请求包含语法错误或无法完成请求。

5**

服务器错误,服务器在处理请求的过程中发生了错误。

六、Content-Type

Content-Type:用于告诉客户端实际返回的内容是什么类型的,决定浏览器将以什么形式、什么编码读取这个文件。

语法格式:​​Content-Type: text/html; charset=utf-8​

常见的媒体格式类型如下:

序号

Content-Type

格式

1

text/html

HTML格式

2

text/plain

纯文本格式

3

text/xml

XML格式

4

image/gif

gif图片格式

5

image/jpeg

jpg图片格式

6

image/png

png图片格式

7

application/xhtml+xml

XHTML格式

8

application/xml

XML数据格式

9

application/atom+xml

Atom XML聚合格式

10

application/json

JSON数据格式

11

application/pdf

pdf格式

12

application/msword

Word文档格式

13

application/octet-stream

二进制流数据(如常见的文件下载)

14

application/x-www-form-urlencoded

中默认的encType,form表单数据被编码为key/value格式发送到服务器(表单默认的提交数据的格式)

15

multipart/form-data

需要在表单中进行文件上传时,就需要使用该格式