常用协议
常用端口及协议
(1)常用端口
(2)基于TCP/UDP的协议
(3)OSI模型各层使用协议
http请求报文:
一个HTTP请求报文由请求行(请求方法、URI、HTTP协议版本)、请求头部(request header)、空行和请求数据4个部分构成。
http响应报文:
HTTP响应报文由状态行(HTTP版本、状态码(数字和原因短语))、响应头部、空行和响应体4个部分构成。
GET和POST的区别:
(1)get是从服务器上获取数据,post是向服务器传送数据。
(2)生成方式不同:
Get:URL输入;超连接;Form表单中method属性为get;Form表单中method为空。
Post只有一种:Form表单中method为Post。
(3)数据传送方式:Get传递的请求数据按照key-value的方式放在URL后面,在网址中可以直接看到,使用?分割URL和传输数据,传输的参数之间以&相连,如:login.action?name=user&password=123。所以安全性差。
POST方法会把请求的参数放到请求头部和空格下面的请求数据字段就是请求正文(请求体)中以&分隔各个字段,请求行不包含参数,URL中不会额外附带参数。所以安全性高。
(3)发送数据大小的限制:通常GET请求可以用于获取轻量级的数据,而POST请求的内容数据量比较庞大些。
Get:1~2KB。get方法提交数据的大小直接影响到了URL的长度,但HTTP协议规范中其实是没有对URL限制长度的,限制URL长度的是客户端或服务器的支持的不同所影响。
Post:没有要求。post方式HTTP协议规范中也没有限定,起限制作用的是服务器的处理程序的能力。
(4)提交数据的安全:POST比GET方式的安全性要高。Get安全性差,Post安全性高。
通过GET提交数据,用户名和密码将明文出现在URL上,如果登录页面有浏览器缓存,或者其他人查看浏览器的历史记录,那么
就可以拿到用户的账号和密码了。安全性将会很差。
GET和POST还有一个重大区别
简单的说:
GET产生一个TCP数据包;POST产生两个TCP数据包。
长的说:
对于GET方式的请求,浏览器会把http header和data一并发送出去,服务器响应200(返回数据);
而对于POST,浏览器先发送header,服务器响应100 continue,浏览器再发送data,服务器响应200 ok(返回数据)。
也就是说,GET只需要汽车跑一趟就把货送到了,而POST得跑两趟,第一趟,先去和服务器打个招呼“嗨,我等下要送一批货来,你们打开门迎接我”,然后再回头把货送过去。
因为POST需要两步,时间上消耗的要多一点,看起来GET比POST更有效。因此Yahoo团队有推荐用GET替换POST来优化网站性能。但这是一个坑!跳入需谨慎。为什么?
1. GET与POST都有自己的语义,不能随便混用。
2. 据研究,在网络环境好的情况下,发一次包的时间和发两次包的时间差别基本可以无视。而在网络环境差的情况下,两次包的TCP在验证数据包完整性上,有非常大的优点。
3. 并不是所有浏览器都会在POST中发送两次包,Firefox就只发送一次。
其中HTTP协议版本有两种:HTTP1.0/HTTP1.1。HTTP1.0/HTTP1.1的区别:
HTTP1.0对于每个连接都只能传送一个请求和响应,请求完服务器返回响应就会关闭,HTTP1.0没有Host字段。
而HTTP1.1在同一个连接中可以传送多个请求和响应,多个请求可以重叠和同时进行,HTTP1.1必须有Host字段。
HTTP状态码:
1** | 信息,服务器收到请求,需要请求者继续执行操作 |
2** | 成功,操作被成功接收并处理 |
3** | 重定向,需要进一步的操作以完成请求 |
4** | 客户端错误,请求包含语法错误或无法完成请求 |
5** | 服务器错误,服务器在处理请求的过程中发生了错误 |
- 200 - 请求成功
- 204 No Content:请求处理成功,但没有任何资源可以返回给客户端,一般在只需要从客户端往服务器发送信息,而对客户端不需要发送新信息内容的情况下使用。
- 301 - 资源(网页等)被永久转移到其它URL
- 302 - 临时移动。与301类似。但资源只是临时被移动。客户端应继续使用原有URI
-
304 Not Modified:资源已找到,但未符合条件请求。该状态码表示客户端发送附带条件的请求时(采用GET方法的请求报文中包含If-Match,If-Modified-Since,If-None-Match,If-Range,If-Unmodified-Since中任一首部)服务端允许请求访问资源,但因发生请求未满足条件的情况后,直接返回304.。
- 400 Bad Request:服务器端无法理解客户端发送的请求,请求报文中可能存在语法错误。
- 401 Unauthorized:该状态码表示发送的请求需要有通过HTTP认证(BASIC认证,DIGEST认证)的认证信息。
- 404 Not Found:服务器上没有请求的资源。路径错误等。
- 500 - 内部服务器错误
播放视频用TCP还是UDP?为什么?
TCP 和 UDP 是质量和实时性的权衡。
拿视频网站来说,你完全可以缓冲 20s 再播放,不会带来什么影响,但如果画面有马赛克之类的东西出现肯定是不好的,所以用 TCP。
而对于视频聊天,如果缓冲 5s,相信整个聊天已经没法愉快的进行了,而这时出现一些画面质量的损失也可以被接受,所以用 UDP。
HTTP和TCP的区别?
实际上,传输层的TCP是基于网络层的IP协议的,而应用层的HTTP协议又是基于传输层的TCP协议的,而Socket本身不算是协议,它只是提供了一个针对TCP或者UDP编程的接口。
Socket是什么
Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。