![轻松学Java Web开发](https://wfqqreader-1252317822.image.myqcloud.com/cover/142/656142/b_656142.jpg)
1.1 HTTP协议
我们通过浏览器在互联网上浏览新闻、看电影、购物等,这些行为看似是顺理成章的事,但其实,这一切的行为都是浏览器通过与远在各地的Web服务器进行交互而实现的。为了交互的进行,它们需要共同遵守一定的协议来控制。这就是HTTP(Hypertext Transport Protocol),超文本传输协议,一种详细规定了浏览器和Web服务器之间互相通信的规则,通过互联网传送万维网文档的数据传送协议。
1.1.1 HTTP协议原理
HTTP 协议是一种通信协议。它允许将 HTML(超文本标记语言)从 Web 服务器传送到Web浏览器,因此需要Web服务器和Web浏览器都支持该协议。它的具体请求、响应格式如图1.1所示。
![](https://epubservercos.yuewen.com/1E8AEB/3590313403979401/epubprivate/OEBPS/Images/figure_0018_0001.jpg?sign=1739287786-79lzzwP7soD5BIHBA770ZrFUIHRUsJeH-0-7b7ae6806494da0f6c5609226c77106e)
图1.1 HTTP协议的请求、响应格式
当浏览器向 Web 服务器发送一个请求,Web 服务器在接收到这个请求后,会返回一个响应给浏览器。这个请求包含一个请求页面的名字和请求页面的信息等。返回的响应包含被请求的页面和被请求页面的信息以及服务器的一些信息等。从图1.1我们也可以看到,浏览器发送这个请求的时候,依据的是 HTTP/1.1 的格式,因此在返回响应的时候,服务器也必须按照HTTP/1.1的协议格式来响应。
1.1.2 HTTP请求格式
HTTP协议对浏览器所发出的Request格式有如下三部分的规定。
· 第一部分是Request line。它包括请求的方法、所请求资源的名字以及现在所使用的协议。
· 第二部分是Request headers。它包含浏览器的一些信息。
· 第三部分是Request body。其中Request headers与Request body之间有一个空行。
具体结构如图1.2所示。
![](https://epubservercos.yuewen.com/1E8AEB/3590313403979401/epubprivate/OEBPS/Images/figure_0019_0001.jpg?sign=1739287786-n84henF2hbmtWJuuD6UIVOy0bgqImddA-0-38e7a34a51533c62d452ce4c63767dfb)
图1.2 Request请求的结构
其中,METHOD 表示请求的方法,如“POST”、“GET”。path-to-resource 表示请求的资源。HTTP/version-number表示HTTP协议的版本号。
【示例1.1】我们借用Fiddler工具(可以记录客户端与服务器端的HTTP请求与响应信息)来捕捉一个向百度首页所发出Request的具体格式及内容,如图1.3所示。
![](https://epubservercos.yuewen.com/1E8AEB/3590313403979401/epubprivate/OEBPS/Images/figure_0019_0002.jpg?sign=1739287786-hTWCfDhw02EIrL9NdKM3uAPoH8jalrja-0-06fb2a453c068029396f7cd53ca6db38)
图1.3 Fiddler捕捉的浏览器向百度首页发出的Request内容
1.1.3 HTTP响应格式
HTTP 协议对 Web 服务器所返回的 Response 也有具体的格式规定。和 Request 一样,Response也分为三部分。
· 第一部分是Response line。它包含HTTP协议的版本信息,响应状态等。
· 第二部分是Response header。它包括服务器的一些基本信息。
· 第三部分是Response body。Response header与Response body之间也有一个空行。具体结构如图1.4所示。
![](https://epubservercos.yuewen.com/1E8AEB/3590313403979401/epubprivate/OEBPS/Images/figure_0020_0001.jpg?sign=1739287786-U7uXL3xCw1B7bHt9J38AqQMlA1h6m37w-0-555ce11a16c20d9ca8d5fc43a2645cff)
图1.4 Response响应的结构
其中,HTTP/version-number表示HTTP协议的版本号。statuscode表示服务器返回的状态码。message表示服务器返回的状态消息。
【示例1.2】查看通过Fiddler工具请求百度首页后返回的Response的信息格式和内容,如图1.5所示。
![](https://epubservercos.yuewen.com/1E8AEB/3590313403979401/epubprivate/OEBPS/Images/figure_0020_0002.jpg?sign=1739287786-sJrrz7qYEuL5RUQk0MGlhvFfizSspkt6-0-1e54ff327bfd5d8afd69c92ebf2c1566)
图1.5 Fiddler截取的百度首页Response的信息内容
注意:这里返回的状态码是200,状态信息是OK。表示服务器响应成功,请求被成功地完成,所请求的资源被发送到客户端。
1.1.4 Content type
服务器在接收到请求后,必须能识别要发送的信息类型,比如图片、txt文本、Excel表格或者其他的形式。还需要知道网页的编码方式是什么。因此,Content type 就是用于定义网络文件的类型以及网页字符的编码,用于决定浏览器以什么形式、什么编码读取这个文件。
1.MIME类型
MIME(Multipurpose Internet Mail Extensions),即多功能Internet邮件扩充服务。它是一种多用途网际邮件扩充协议,服务器会通过这种手段来告诉浏览器它所发送的这些多媒体数据是什么类型的,需要用何种程序来打开这种文件。最常用的MIME类型如表1.1所示。
表1.1 常用的MIME类型
![](https://epubservercos.yuewen.com/1E8AEB/3590313403979401/epubprivate/OEBPS/Images/figure_0021_0001.jpg?sign=1739287786-zqmL637TO3E8aEM5RfHlClukCaOmEL0n-0-f58c840ea1b43a07617a88e8f430157c)
2.Content-charset
字符的编码方式有很多种。有的支持中文显示,有的支持英文显示。其中最常见的字符集编码类型如表1.2所示。
表1.2 常见的charset字符集类型
![](https://epubservercos.yuewen.com/1E8AEB/3590313403979401/epubprivate/OEBPS/Images/figure_0021_0002.jpg?sign=1739287786-2h0oJFx6qYRYa19QoRU0VFtNJMFwKpQY-0-b2dd217e3f7ec3ecb710fd0124f8c75a)