前言

感谢

HTTP概述

协议:协议是客户端和服务器进行通信的时候发送数据的格式

Http:Hyper Text Translate Protocol:超文本传输协议

所以说,Http是一种协议,是一种服务器和客户端进行通信时进行数据交换的这么一中约定,Http通常运行在TCP上

如果学过计算机网络,肯定对TCP不陌生

Http经过长久以来的发展,已经跨越了两个时代

1、第一个时代是Http1.0时代,官方是HTTP/1.0,在这个时候,客户端和服务器进行连接只能获得一个web资源然后断开连接

2、第二个时代是Http2.0时代,官方是HTTP/1.1,在这个时候客户端和服务器进行连接后可以获得多个web资源,然后可以断开

现在新出现了一个比Http更加安全的Https,但是这Https我们自己没法学习,因为要取得认证。如果现在你上网还是用一些Http的协议,有些浏览器可能会给你弹窗提醒,告诉你这是个不安全的网站,当然我们自己写的东西肯定是没啥问题的。


HTTP请求和响应

请求

请求行

请求方式:Get,Post,HEAD,DELETE,PUT,PATCH,……

  • Get:能够携带的参数比较少,大小有限制,并且是ASCII码形式,会在浏览器的URL地址显示数据内容,比较高效,不太安全
  • Post:能够携带的参数无限制,大小无限制,不会在浏览器的URL地址显示数据内容,安全

消息头

1、Accept:告诉服务器浏览器支持的数据类型

2、Accept-Encoding:告诉服务器浏览器它支持的编码格式

3、Accpt-Language:告诉服务器浏览器它的语言环境

4、Cache-Control:缓存控制

5、Connection:告诉服务器浏览器请求完成之后是断开还是保持连接

6、HOST:主机

7、User-Agent:告诉服务器浏览器访问时的版本信息,可以根据这个解决兼容问题

8、Referer:告诉服务器浏览器从哪里来,可以防盗链

响应

响应体

1、Accept

2、Accept-Encoding

3、Accpt-Language

4、Cache-Control

5、Connection

6、HOST

响应状态码

1、200:成功

2、3xx:重定向

3、4xx:资源不存在

4、5xx:服务器错误


GET和POST的区别

1、GET在浏览器回退时是无害的,而POST会再次提交请求

2、GET产生的URL地址可以被Bookmark,而POST不可以

3、GET请求会被浏览器主动cache,而POST不会,除非手动设置

3、GET请求的参数会完整的被保存在历史记录里,POST不会

4、GET请求参数放在URL中,POST放在request body中

5、GET请求只能进行url编码,POST请求支持多种编码方式

6、对于参数类型,GET只接受ASCII字符,而POST没有限制

7、GET请求在URL中传递的参数是有长度限制的,而POST没有

8、GET比POST更不安全,因为参数直接暴露在URL中,所以不能传递敏感信息

GET和POST还有一个重大区别,简单的说:

  • GET产生一个TCP数据包
  • POST产生两个TCP数据包

对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 OK(返回数据)

但是注意,发送两次报文和发送两次请求是不同的,这个没有发送两次请求,而是发送了两次header

而且并不是所有的浏览器都发送两次,firefox就发送一次


但其实事实上,GET和POST没有任何区别

HTTP是基于TCP/IP的关于数据如何在万维网中传递的通信协议。

HTTP的底层是TCP/IP,所以GET和POST底层也是TCP/IP,也就是说GET和POST都是TCP链接。

GET和POST能做的事情是一样的。你要给GET加上request body或者给POST带上url参数技术上是完全行的通的。