HTTP 协议

2019/07/25 Http 逃离CSDN

HTTP 协议

HTTP 简介

HTTP 协议(HyperText Transfer Protocol,超文本传输协议)是因特网上应用最为广泛的一种网络传输协议,基于 TCP/IP 通信协议来传递数据(HTML 文件, 图片文件, 查询结果等)。

HTTP 协议工作于客户端-服务端架构(C/S)上。浏览器作为 HTTP 客户端通过 URL 向 HTTP 服务端即 WEB 服务器发送所有请求。

Web 服务器有:Apache 服务器,IIS 服务器(Internet Information Services)等。

HTTP 默认端口号为 80,但是你也可以改为 8080 (代理服务器)或者其他端口。

HTTP 消息结构

客户端请求消息(请求头)

客户端发送一个 HTTP 请求到服务器的请求消息包括以下格式:请求行(request line)、请求头部(header)、空行和请求数据四个部分组成,如下图:

1、请求行

请求行由请求方法字段、URL 字段和 HTTP 协议版本字段 3 个字段组成,它们用空格分隔。比如:

GET /data/info.html HTTP/1.1
  • 方法字段就是 HTTP 使用的请求方法,比如常见的 GET/POST/HEAD。HTTP1.1 新增了五种请求方法:OPTIONS, PUT, DELETE, TRACE 和 CONNECT 方法。
  • URL 统一资源定位符
  • HTTP 协议版本有两种:HTTP1.0/HTTP1.1。

2、请求头部

大多数请求头并不是必需的,但 Content-Length 除外。对于 POST (向服务器提交数据)请求来说 Content-Length 必须出现。

常见的有:

  • Host:客户机通过这个头告诉服务器,想访问的主机名。Host 头域指定请求资源的 Intenet 主机和端口号,必须表示请求 url 的原始服务器或网关的位置。HTTP/1.1 请求必须包含主机头域,否则系统会以 400 状态码返回。
  • User-Agent:User-Agent 头域的内容包含发出请求的用户信息。浏览器类型,如果 Servlet 返回的内容与浏览器类型有关则该值非常有用。
  • Cookie:客户机通过这个头可以向服务器带数据,这是最重要的请求头信息之一。

更多请求头字段参考HTTP头字段

3、空行

通过一个空行,告诉服务器请求头部到此为止,以下是请求数据。

4、请求数据

  • 若方法字段是 GET,则此项为空,没有数据。
  • 若方法字段是 POST,则通常来说此处放置的就是要提交的数据。表单数据包含在这部分。

服务器响应消息(响应头)

HTTP 响应也由四个部分组成,分别是:响应行、响应头、空行和响应体。

1、响应行

响应行一般由协议版本、状态码及其描述组成 比如:

HTTP/1.1 200 OK

其中协议版本 HTTP/1.1 或者 HTTP/1.0,200就是它的状态码(关于状态码见下文),OK 则为它的描述。

2、响应头

响应头用于描述服务器的基本信息,以及数据的描述,服务器通过这些数据的描述信息,可以通知客户端如何处理等一会儿它回送的数据。根据响应行的状态码,响应头会有不同的字段。例如,有好几个表示“文档位置已经改变”的状态代码都伴随着一个 Location 头,而 401(Unauthorized) 状态代码则必须伴随一个 WWW-Authenticate 头。

常见的响应头字段:

  • Allow:服务器支持哪些请求方法(如GET、POST等)
  • Date:当前的GMT时间
  • Server:服务器通过这个头告诉浏览器服务器的类型

更多响应头字段请参考HTTP头字段

3、空行

通过一个空行,告诉服务器请求头部到此为止,以下内容是响应体。

4、响应体

响应体就是响应的消息体,如果是纯数据就是返回纯数据,如果请求的是 HTML 页面,那么返回的就是 HTML 代码,如果是 JS 就是 JS 代码。

通用头(General)、实体头

详见通用头、实体头

状态码

状态码分类

  • 1**:信息,服务器收到请求,需要请求者继续执行操作
  • 2**:成功,操作被成功接收并处理
  • 3**:重定向,需要进一步的操作以完成请求
  • 4**:客户端错误,请求包含语法错误或无法完成请求
  • 5**:服务器错误,服务器在处理请求的过程中发生了错误

常见状态码

  • 200 - 请求成功。
  • 301 - 资源(网页等)被永久转移到其它 URL。
  • 304 - 未修改。所请求的资源未修改,服务器返回此状态码时,不会返回任何资源。
  • 400 - 客户端请求的语法错误,服务器无法理解。
  • 401 - 未授权。请求要求用户的身份认证。
  • 404 - 请求的资源(网页等)不存在。
  • 500 - 内部服务器错误。
  • 502 - 充当网关或代理的服务器,从远端服务器接收到了一个无效的请求。
  • 更多 - 参考HTTP状态码

区分 GET/POST

1、提交数据的形式

  • GET 请求的数据会附在 URL 之后,会直接展现在地址栏中。
  • POST 方法则会把数据放到请求数据字段中以 & 分隔各个字段,请求行不包含数据参数,地址栏也不会额外附带参数

2、提交数据的安全

  • POST 比 GET 方式的安全性要高
  • 通过GET提交数据,用户名和密码将明文出现在URL上,如:
    • 登录页面有可能被浏览器缓存
    • 其他人查看浏览器的历史纪录
    • 跨站攻击

Search

    Table of Contents