sunxin's Studio.

Http协议了解多少

字数统计: 1.2k阅读时长: 4 min
2018/10/24 Share

Http协议

超文本传输协议,构建与TCP/IP协议之上,默认端口号为80,处于网络体系结构的最顶层应用层上,Http协议采用的是请求/响应的工作方式。Http是无连接无状态的。

Q1:怎么理解Http是无连接无状态的

无连接是指限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节省传输时间。

无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态。即我们给服务器发送 HTTP 请求之后,服务器根据请求,会给我们发送数据过来,但是,发送完,不会记录任何信息。这就表明每个请求都是独立的。

Http的这两个特性的优缺点:

优点在于解放了服务器,每一次请求“点到为止”不会造成不必要连接占用。

缺点在于每次请求会传输大量重复的内容信息。

CookieSession是用来保持Http连接的两种技术。

Http报文

Http在应用层通过报文的方式来交换数据,分为请求报文响应报文

请求报文

Http的请求报文由请求行,请求头,请求体组成

  • 请求行:声明了请求方法,主机域名,资源路径和协议版本

  • 请求头:包括一些访问的域名、用户代理、Cookie等信息

  • 请求体:Http请求的数据

请求行详解

请求方法

  • Get:从服务器读取数据

  • Post:为服务器添加信息

  • Put:为指定的URL下添加一个文档

  • Delete:删除指定URL所标志的信息

Q2:Http的Get和Post请求方式有什么区别

  1. Get可提交的数据量收到URL长度的限制,URL的长度最多是2048个字符。Post请求是没有长度的限制的。

  2. Get请求的数据类型只允许Ascll字符,Post可以是任何类型

  3. Get请求的安全性较差,因为数据参数是直接拼接在URL后面的,可见。Post数据封装在Http的请求体中,浏览器中没有缓存。

  4. Get请求适用于数据量较小,并且数据不敏感的情况。Post正好相反

请求头详解

采用heade : value的方式

请求体详解

存放需要发送给服务器的数据信息

请求体有三种使用方式:

  1. 数据交换:请求体可以任意类型,比如json串,不过服务器需要解析

  2. 键值对:Get请求数据每个键值对通过&拼接在URL后面,键与值之间用=连接

  3. 分部分形式:

1
2
3
4
5
6
7
8
9
10
11

POST http://www.example.com HTTP/1.1
Content-Type:multipart/form-data; boundary=----WebKitFormBoundaryrGKCBY7qhFd3TrwA
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="text"
title
------WebKitFormBoundaryrGKCBY7qhFd3TrwA
Content-Disposition: form-data; name="file"; filename="chrome.png"
Content-Type: image/png
PNG ... content of chrome.png ...
------WebKitFormBoundaryrGKCBY7qhFd3TrwA--

请求体被分为多个部分,boundary 用于分割不同的字段,为了避免与正文内容重复。然后接着一个空行 接 内容,最后以

–boundary– 结束

boundary:分割线

响应报文

包括状态行,响应头和响应体

  • 状态行:包括协议版本Version、状态码Status Code、状态码描述

  • 响应头:包括搭建服务器的软件,发送响应的时间,回应数据的格式等信息

  • 响应体:响应的具体数据

常见的响应码
1
2
3
4
5
6
7
8
9
10
11

200 OK 客户端请求成功
301 Moved Permanently 请求永久重定向
302 Moved Temporarily 请求临时重定向
304 Not Modified 文件未修改,可以直接使用缓存的文件。
400 Bad Request 由于客户端请求有语法错误,不能被服务器所理解。
401 Unauthorized 请求未经授权。这个状态代码必须和WWW-Authenticate报头域一起使用
403 Forbidden 服务器收到请求,但是拒绝提供服务。服务器通常会在响应正文中给出不提供服务的原因
404 Not Found 请求的资源不存在,例如,输入了错误的URL
500 Internal Server Error 服务器发生不可预期的错误,导致无法完成客户端的请求。
503 Service Unavailable 服务器当前不能够处理客户端的请求,在一段时间之后,服务器可能会恢复正常。

相关知识

Q3:Http1.0和Http1.1的区别有哪些

Http1.1比Http1.0升级了如下地方

  1. 引入了持久连接,意思就是在一个TCP连接中可以传送多个Http的请求和响应。在请求头中添加Connection: Keep-Alive开启

  2. 多个请求和响应可以同时进行

  3. 引入更加多的请求头和响应头

Q4:Http和Https的区别

  1. Http处在应用层,Https处在传输层

  2. Http明文传输,Https通过ssl加密和身份认证

  3. Http默认80端口,Https默认443端口

CATALOG
  1. 1. Http协议
    1. 1.1. Http报文
      1. 1.1.1. 请求报文
        1. 1.1.1.1. 请求行详解
        2. 1.1.1.2. 请求头详解
        3. 1.1.1.3. 请求体详解
      2. 1.1.2. 响应报文
        1. 1.1.2.1. 常见的响应码
      3. 1.1.3. 相关知识