Socket开发基础
Socket注意事项
http基于TCP/IP通信协议来传递数据(HTML文件, 图片文件, 查询结果等)
HTTPS
- 对称加密 速度快 秘钥传递问题无法解决
- RSA非对称加密 用私钥加密的数据,只有对应的公钥才能解密,用公钥加密的数据,只有对应的私钥才能解密 速度慢
- 进化-----使用RSA传递对称加密的私钥(保证安全)-----使用对称加密的私钥机密通话(保证速度)
- 中间人攻击---在A面前冒充B, 在B面前冒充A(需要解决你到底是谁)
- 公证处---领个证书,证明身份(证书内包含基本信息和公钥)---->但是证书怎么传递?
- 数字签名---把公钥和个人信息用一个Hash算法生成一个消息摘要(只要输入的信息有一点点变化,那生成的消息摘要就会发生巨变)--->但是中间人,虽然没办法改公钥,但是可以把整个原始信息都替换了,生成一个新的消息,让人辨别不出来
- 公证中心(CA)---用它的私钥对消息摘要加密,形成数字签名
- 数字证书 --- 原始信息 + 数字签名 叫数字证书
HTTP工作原理
HTTP协议采用请求/响应模型,客户端向服务端发送一个请求报文,请求报文包含请求的方法, URL, 协议版本, 请求头部和请求数据. 服务器以一个状态行作为响应,响应的内容包括协议的版本,成功或错误代码, 服务器信息,响应头部和响应数据
GET和POST的区别
- GET提交的数据会拼接到URL后面,在地址栏显示出来, POST把提交的数据放置在HTTP包的包体中,更安全
- GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据没有限制.
- GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。
- GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码
特点
- 简单:客户向服务器请求服务时,只需传请求方法和路径
- 灵活:HTTP允许传输任意类型的数据对象,传输的类型由Content-Type标记
- 无连接:服务器处理完客户的请求,并受到客户的应答后,即断开连接
- 无状态:没有请求的历史记录
URL
http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name
- 协议部分 http://
- 域名部分 www.aspxfans.com
- 端口部分 :8080
- 虚拟目录部分 从域名后的第一个"/"开始到最后一个"/"为止,是虚拟目录部分 /new/
- 文件名部分 index.asp
- 描部分 从"#"开始到最后
- 参数部分 从"?"开始到"#"结束
URI和URL
URI来传输数据和建立连接,URL是一种特殊类型的URI,包含了用于查找某个资源的足够信息
Web上可用的每种资源如HTML文档,视频片段,程序等都是一个URI来定位的
HTTP状态码
- 1xx 指示信息 请求已接受,继续处理
- 2xx 成功
- 3xx 重定向
- 4xx 客户端错误
- 5xx 服务端错误
以下是几个常见的状态码:
200 OK
你最希望看到的,即处理成功!
303 See Other
我把你redirect到其它的页面,目标的URL通过响应报文头的Location告诉你。
悟空:师傅给个桃吧,走了一天了 :relieved:
唐僧:我哪有桃啊!去王母娘娘那找吧 :unamused:
304 Not Modified
告诉客户端,你请求的这个资源至你上次取得后,并没有更改,你直接用你本地的缓存吧,我很忙哦,你能不能少来烦我啊!
404 Not Found
你最不希望看到的,即找不到页面。如你在google上找到一个页面,点击这个链接返回404,表示这个页面已经被网站删除了,google那边的记录只是美好的回忆。
500 Internal Server Error
看到这个错误,你就应该查查服务端的日志了,肯定抛出了一堆异常,别睡了,起来改BUG去吧!
有些响应码,Web应用服务器会自动给生成。你可以通过HttpServletResponse的API设置状态码:
//设置状态码,状态码在HttpServletResponse中通过一系列的常量预定义了,如SC_ACCEPTED,SC_OK
void setStatus(int sc)
HTTP请求方法
- GET 请求指定页面信息,并返回实体主体
- HEAD 类似GET请求,不过返回的相应没有具体内容,用于获取报头
- POST GET只是获取数据,POST可以上传数据和获取数据
- PUT 从客户端向服务器传送数据并取代指定的文档的内容
- DELETE 请求服务器删除指定页面
- CONNECT
- OPTIONS 查看服务器性能
- TRACE(路径) 回显服务器收到的请求, 用于测试和诊断
HTTP请求报文解剖
HTTP请求报文由3部分组成(请求行 + 请求头 + 请求体)
- ①是请求方法, GET和POST是常见的HTTP方法,大多数浏览器也只支持GET和POST方法
- ②是请求对应的URL地址,它和报文头的Host属性组成完整的请求URL
- ③协议名称和版本号
- ④HTTP的报文头,包含若干格式为"属性名:属性值"的属性,服务端据此获取客户端的信息
- ⑤报文体 请求参数
常见HTTP请求报文头属性
- Accept 客户端接受什么类型的响应
- Cookie 客户端的Cookie通过这个报文头属性传给服务端
- Referer 请求是从哪个网站过来的
- Cache-Control 控制缓存(控制响应内容可不可以在客户端缓存,缓存多久)
HTTP响应报文解剖
HTTP的响应报文也由三部分组成(响应行+响应头+响应体):
TCP和UDP是OSI模型中的运输层中的协议。TCP提供可靠的通信传输,而UDP则常被用于让广播和细节控制交给应用的通信传输。
UDP补充:
UDP不提供复杂的控制机制,利用IP提供面向无连接的通信服务。并且它是将应用程序发来的数据在收到的那一刻,立刻按照原样发送到网络上的一种机制。即使是出现网络拥堵的情况下,UDP也无法进行流量控制等避免网络拥塞的行为。此外,传输途中如果出现了丢包,UDO也不负责重发。甚至当出现包的到达顺序乱掉时也没有纠正的功能。如果需要这些细节控制,那么不得不交给由采用UDO的应用程序去处理。换句话说,UDP将部分控制转移到应用程序去处理,自己却只提供作为传输层协议的最基本功能。UDP有点类似于用户说什么听什么的机制,但是需要用户充分考虑好上层协议类型并制作相应的应用程序。
TCP补充:
TCP充分实现了数据传输时各种控制功能,可以进行丢包的重发控制,还可以对次序乱掉的分包进行顺序控制。而这些在UDP中都没有。此外,TCP作为一种面向有连接的协议,只有在确认通信对端存在时才会发送数据,从而可以控制通信流量的浪费。TCP通过检验和、序列号、确认应答、重发控制、连接管理以及窗口控制等机制实现可靠性传输。
TCP与UDP区别总结:
1、TCP面向连接(如打电话要先拨号建立连接);UDP是无连接的,即发送数据之前不需要建立连接
2、TCP提供可靠的服务。也就是说,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达;UDP尽最大努力交付,即不保 证可靠交付
3、TCP面向字节流,实际上是TCP把数据看成一连串无结构的字节流;UDP是面向报文的
UDP没有拥塞控制,因此网络出现拥塞不会使源主机的发送速率降低(对实时应用很有用,如IP电话,实时视频会议等)
4、每一条TCP连接只能是点到点的;UDP支持一对一,一对多,多对一和多对多的交互通信
5、TCP首部开销20字节;UDP的首部开销小,只有8个字节
6、TCP的逻辑通信信道是全双工的可靠信道,UDP则是不可靠信道