HTTP协议笔记

萝らか妹 提交于 2020-02-17 20:37:31

笔记来源,超赞的原文链接https://www.jianshu.com/p/80e25cb1d81a

1.基本概念和交互模型

  • HTTP协议是Hyper Text Transfer Protocol(超文本传输协议)的缩写,是用于从万维网服务器传输超文本到本地浏览器的传送协议。
  • HTTP基于TCP/IP通信协议来传递数据
  • HTTP协议工作于客户端-服务端架构上。浏览器作为HTTP客户端通过URL向HTTP服务端(Web服务器)发送请求。Web服务器根据接收到的请求向客户端发送响应信息在这里插入图片描述

2.HTTP请求消息Request

  • 客户端发送一个HTTP请求到服务器的请求消息由请求行,请求头部,空行,请求数据构成在这里插入图片描述
  • GET请求例子
GET /562f25980001b1b106000338.jpg HTTP/1.1
Host    img.mukewang.com
User-Agent  Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36
Accept  image/webp,image/*,*/*;q=0.8
Referer http://www.imooc.com/
Accept-Encoding gzip, deflate, sdch
Accept-Language zh-CN,zh;q=0.8

第一部分:第1行代码为请求行
第二部分:第2-6行代码为请求头部
第三部分:第7行代码为空行
第四部分:空行下的为请求数据,本例请求数据为空

  • POST请求例子
POST / HTTP1.1
Host:www.wrox.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive

name=Professional%20Ajax&publisher=Wiley

请求消息结构上一致,在应用过程中的一些不同下文会详细列举

3.HTTP响应消息Response

  • 服务器在接收并处理客户端请求后返回一个HTTP响应消息,该响应消息由状态行,消息报头,空行,响应正文四部分组成在这里插入图片描述
  • 例子
HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8

<html>
      <head></head>
      <body>
            <!--body goes here-->
      </body>
</html>

第一部分:第1行代码为状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成
第二部分:第2,3行代码为消息报头,Date:生成响应的日期和时间;Content-Type:指定了MIME类型的HTML(text/html),编码类型是UTF-8
第三部分:第4行代码为空行
第四部分:空行下的html代码为响应正文

4.HTTP响应消息之状态码

状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

  • 1xx:指示信息–表示请求已接收,继续处理
  • 2xx:成功–表示请求已被成功接收、理解、接受
  • 3xx:重定向–要完成请求必须进行更进一步的操作
  • 4xx:客户端错误–请求有语法错误或请求无法实现
  • 5xx:服务器端错误–服务器未能实现合法的请求

常见状态码:

200 OK                        //客户端请求成功
400 Bad Request               //客户端请求有语法错误,不能被服务器所理解
401 Unauthorized              //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 
403 Forbidden                 //服务器收到请求,但是拒绝提供服务
404 Not Found                 //请求资源不存在,eg:输入了错误的URL
500 Internal Server Error     //服务器发生不可预期的错误
503 Server Unavailable        //服务器当前不能处理客户端的请求,一段时间后可能恢复正常

5.HTTP请求消息之请求方法

  • HTTP1.0定义了三种请求方法: GET, POSTHEAD方法。
  • HTTP1.1新增了五种请求方法:OPTIONS, PUT, DELETE, TRACECONNECT 方法。
GET      请求指定的页面信息,并返回实体主体。
HEAD     类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
POST     向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
PUT      从客户端向服务器传送的数据取代指定的文档的内容。
DELETE   请求服务器删除指定的页面。
CONNECT  HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
OPTIONS  允许客户端查看服务器的性能。
TRACE    回显服务器收到的请求,主要用于测试或诊断。

6.GET请求与POST请求的区别

  • GET和POST本质上并无区别,但是由于HTTP的规定和 浏览器/服务器 的限制导致他们在应用过程中体现出一些不同
  • 具体不同体现在下面几点

1.GET在浏览器回退或刷新时是无害的,而POST会再次提交请求。
2.GET产生的地址可以收藏,而POST不可以。
3.GET能被浏览器主动缓存,而POST不可以,除非手动设置。
4.GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
5.GET请求在URL中传送的参数是有长度限制的,而POST没有限制。
6.GET对参数类型的限制只允许ASCII 字符,而POST没有限制。
7.GET的安全性较差,因为要请求的参数直接暴露在URL上,而POST不会
8.GET参数通过URL传递,POST放在Request body(请求数据)中。
9.GET产生一个TCP数据包;POST可能会产生两个TCP数据包即header和body分开发送。

7.HTTP的工作流程

1. 地址解析

2. 建立TCP连接

建立 TCP 连接 , 也就是常说的"三次握手" . 由于HTTP位于最上层的应用层 , 所以HTTP在工作之前要由 TCP 和 IP 协议建立网络连接。

3. 发送HTTP请求

通过TCP套接字,客户端向Web服务器发送一个文本的请求报文,一个请求报文由请求行请求头部空行请求数据4部分组成。

4. 服务器接受请求并返回HTTP响应

Web服务器解析请求,定位请求资源。服务器将资源复本写到TCP套接字,由客户端读取。一个响应由状态行响应头部空行响应数据4部分组成。

5. 浏览器解析HTTP响应

客户端解析响应,然后将响应数据中的HTML代码渲染给用户

6. 关闭连接

服务器端在发送完响应之后 , 就会关闭连接 , 如果过客户端的请求的头部信息中有 Connection-alive , 那么客户端在响应完这个请求之后不会关闭连接 , 直到客户端的所有请求都响应完毕 , 才会关闭连接。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!