HTTP协议

一、概念

​ HTTP协议(超文本传输协议)规定了客户端浏览器和服务器通信时发送数据的格式。HTTP协议使用TCP连接。通信开始时,首先在浏览器和服务器之间建立TCP连接,接着浏览器向服务器发送HTTP请求报文,服务器在收到该请求报文后向服务器发送HTTP响应报文,最后当通信结束后,释放TCP连接。

特点:

  1. 默认端口号:80
  2. 基于请求/响应模型:即一次请求对应一次响应
  3. 无状态的:即每次的请求之间是相互独立的,不能交换数据

历史版本:

​ 1.0:每一次的请求响应都会建立新的连接,通信结束后释放连接,效率较低。

​ 1.1:可以复用连接,提高了效率。

二、请求报文数据格式

  1. 请求行

    格式:请求方式 请求url 请求协议/版本(举例:GET /login.html HTTP/1.1)

    【注】HTTP协议有7种请求方式,常见的有2种,GET和POST。

​ GET:请求参数在请求行中,在url后;请求的url长度是有限制的;不太安全。

​ POST:请求参数在请求体中;请求的url长度时没有限制的(适用于文件的上传);相对安全。

  1. 请求头

    格式: 请求头名称:请求头值

    常见的请求头:

    ​ User-Agent:该请求头中的值为此次访问服务器使用的浏览器版本信息。这样可以在服务器端获取该头的信息,从而解决浏览器的兼容性问题。

    ​ Referer:http://localhost/login.html 告诉服务器,我(当前请求)从哪里来?可以用来防盗链和做统计工作。

  2. 请求空行

    空行,就是用于分割POST请求的请求头和请求体的。

  3. 请求体(正文)

    封装了POST请求消息的请求参数。比如:username=zhangsan

一个完整的请求报文例子:

POST /login.html HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:60.0) Gecko/20100101 Firefox/60.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate
Referer: http://localhost/login.html
Connection: keep-alive
Upgrade-Insecure-Requests: 1

username=zhangsan

三、响应报文数据格式

  1. 响应行

    格式:协议/版本 响应状态码 状态码描述

    【注】响应状态码:服务器告诉客户端浏览器本次请求和响应的一个状态。状态码都是3位数字。常见的状态码有以下几类:

    • 1xx:服务器接收客户端消息,但没有接收完成,等待一段时间后,发送1xx状态码
    • 2xx:成功。代表:200
    • 3xx:重定向。代表:302(重定向),304(访问缓存)
    • 4xx:客户端错误。代表:404(请求路径没有对应的资源),405(请求方式没有对应的doXxx方法)
    • 5xx:服务器端错误。代表:500(服务器内部出现异常)
  2. 响应头

    格式: 响应头名称:响应头值

    常见的响应头:

    ​ Content-Type:服务器告诉客户端浏览器本次响应体的数据格式以及编码格式。

    ​ Content-disposition:服务器告诉客户端浏览器要以什么样的方式打开响应体数据。

    ​ 值:

    ​ in-line:默认值,在当前页面内打开。

    ​ attachment;filename=xxx:以附件形式打开响应体。文件下载。

  3. 响应空行

  4. 响应体

    封装了服务器发送给客户端浏览器的数据。

一个完整的响应报文例子:

HTTP/1.1 200 OK
Content-Type: text/html;charset=UTF-8
Content-Length: 101
Date: Wed, 06 Jun 2018 07:08:42 GMT

<html>
  <head>
    <title>$Title$</title>
  </head>
  <body>
  	hello,response!
  </body>
</html>
posted @ 2020-05-26 15:03  Java程序员的进阶之路  阅读(145)  评论(0编辑  收藏  举报