1. HTTP:HyperTextTransferProtocol,超文本传输协议,是应用层面向对象的协议。
无状态:对于事务处理没有记忆功能,如果后面的请求需要前面的消息,必须重传才能实现。(可能会导致每次传送的数据量增大)
无连接:每次连接只处理一个请求,当服务器处理完客户的请求并收到客户端的应答之后,就断开连接。(可以节省传输时间)
2. HTTP的URI
格式:http://主机域名或者ip地址[:端口号]/路径
如果没有指定端口号,默认为80。在没有指定路径uri时,浏览器会自动处理成‘/’,如输入:www.xxx.edu.cn
浏览器自动转换成:http://www.xxx.edu.cn/
3. http请求
包括请求行,请求头部,请求正文。
请求行:包括请求方式Method、资源路径URI、协议版本Version;
请求头部:包括一些访问的域名、用户代理、Cookie等信息;
请求正文:就是HTTP请求的数据。
请求方法包括:
POST: 在Request-URI所标识的资源后附加新的数据
GET:请求获取Request-URI所标识的资源
PUT 请求服务器存储一个资源,并用Request-URI作为其标识
DELETE 请求服务器删除Request-URI所标识的资源
例如:在浏览器中输入网址的方式访问资源,浏览器采用的是GET方法向服务器获取数据
POST方法要求被请求的服务器接受附在请求后面的数据,常用于提交表单。
4. http响应
包括状态行,响应头部,响应正文
状态行:包括协议版本Version、状态码Status Code、回应短语;
响应头:包括搭建服务器的软件,发送响应的时间,回应数据的格式等信息;
响应正文:就是响应的具体数据。
状态码:
| 1xx | 表示HTTP请求已经接受,继续处理请求 |
| 2xx | 表示HTTP请求已经处理完成 |
| 3xx | 表示把请求访问的URL重定向到其他目录 |
| 4xx | 表示客户端出现错误 |
| 5xx | 表示服务端出现错误 |
常见状态码的含义
200---OK/请求已经正常处理完毕
301---/请求永久重定向
302---/请求临时重定向
304---/请求被重定向到客户端本地缓存
400---/客户端请求存在语法错误
401---/客户端请求没有经过授权
403---/客户端的请求被服务器拒绝,一般为客户端没有访问权限
404---/客户端请求的URL在服务端不存在
500---/服务端永久错误
503---/服务端发生临时错误
5. GET 与 POST
区别(面试):
- GET在浏览器回退时是无害的,而POST会再次提交请求。
- GET请求参数会被完整保留在浏览器历史记录里,而POST中的参数不会被保留。
- GET请求在URL中传送的参数是有长度限制的(最多1024字节),而POST没有。
- GET比POST更不安全,因为参数直接暴露在URL上,所以不能用来传递敏感信息。
- GET参数通过URL传递,POST放在Request body中
其实,get与post本质上是没有区别的,是http协议中,发送请求的两种方法。
http是基于tcp/ip的关于数据如何在万维网中通信的协议,HTTP的底层是TCP/IP。所以GET和POST的底层也是TCP/IP,也就是说,GET/POST都是TCP链接。两者可以以同样的方式实现(技术上可以支持,如可以在get的时候在request body中放数据,但是数据能不能被处理,就另说了),只不过正常情况下就像开始说的区别中那样。
GET和POST还有一个极为重要的区别:GET产生一个TCP数据包;POST产生两个TCP数据包
对于GET,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100(请求已接受,继续处理请求),浏览器再发送data,服务器响应200 (返回数据)。