标签:
TCP(传输层协议)
(1) 面向连接
(2) 可靠的
(3) 基于字节流的
连接建立阶段:
客户端 ------->SYN 服务端(服务器被动打开)
客户端 <-------SYN-ACK 服务端
客户端 ------->ACK 服务端(连接建立)
DDoS 攻击原理
SYN/ACK
丢包,超时
连接终止阶段:
客户端 ------->FIN 服务端
客户端 <-------ACK FIN 服务端
客户端(等待连接终止) ------->ACK 服务端(连接终止)
Ip层不可靠,寻路问题(分发)
了解tcp协议能干什么
仅仅利用
电子邮件
聊天工具
网络游戏
文件传输
远程登录
Socket ServerSocket
netstat -ntpl
HTTP
请求与响应模式
无状态
应用层协议
GET /index.html HTTP/1.1
Host:www.example.com
请求信息:
请求行
请求头
空行
其他消息体
POST
POST /submit.html HTTP/1.1
Host:www.example.com
name = alice
Head(缓存) Options(跨域) Put Delete Connect Trace
请求头:
Host 指定被请求资源的Internet主机和端口号
User-Agent 客户端将它的操作系统、浏览器和其它属性告诉服务器
Accept 客户端接受哪些类型的信息。如: text/html 表明希望接受html文本
Content-Type 客户端发送数据类型,如POST时
Referer 从哪个页面过来, 安全控制
例 User-Agent
telnet ip.cn 80
GET / HTTP/1.1
Host: ip.cn
User-Agent: curl
GET / HTTP/1.1
Host: ip.cn
User-Agent: mozilla
应答信息:
应答状态
应答头
CRLF
数据
例子:
HTTP/1.1 200 OK
Content-Length: 3059
Server: GWS/2.0
Date: Sat, 11 Jan 2003 02:44:04 GMT
Content-Type: text/html
Cache-control: private
Set-Cookie: PREF=ID=73d4aef52e57bae9:TM=1042253044:LM=1042253044:S=SMCc_HRPCQiqy
X9j; expires=Sun, 17-Jan-2038 19:14:07 GMT; path=/; domain=.google.com
Connection: keep-alive
一级应答控制 状态码
200 OK 请求成功
302 Found 跳转请求
304 Not Modified 无数据体,取缓存
400 Bad Request 请求格式错误,参数缺失等
403 Forbidden 拒绝执行
404 Not Found 资源未找到
405 Method Not Allowed 请求方法不支持
500 Server Error 服务器错误
502 Bad Gateway 网关错误
503 Server Unavailable 服务器忙
二级应答控制 Header
Cookie
(1)存在浏览器端(通常需要加密)
(2)请求附加数据,标识用户
(3)持久或非持久
(4)在无状态的HTTP上维持状态
(5)有了状态,才有"交互性"可言
Session
(1)客户端访问
(2)服务器生成一个非持久Cookie
(3)后续请求将该Cookie作为Session Id
兵器库
curl ip.cn
Dev HTTP Client (Chrome)
HTTP Watch (IE)
Java编程
HttpComponents http://hc.apache.org/
okhttp http://square.github.io/okhttp/
JSON
http://json.org/
对眼睛好一点
http://jsoneditoronline.org/
数据结构
数字
字符
布尔
None
结构体
列表
简单值类型
127, -1.4e+3
"hello world"
true / false
null
Object
{
"name": value,
...
}
Array [127, "hello", {}, true, null]
Map的子类,序列化忽略自定义属性
class Result extends java.util.HashMap {
public final int version;
public Result(int version) {
this.version = version;
}
public Result build() {
if (version == 1) {
put("ret", true);
} else {
put("status", 0);
}
return this;
}
}
new Result(request.getParameter("version")).build();
API Design
功能第一
考虑错误处理
效率问题
URL的意图表现力
GET /api/v1/user/id/1
GET /api/v1/user/role/manager?age_gt=25&age_lt=30
GET|POST [/api/version]/model/property/value?filter=value
{
"status": 0,
"message": null,
"data":{
}
}
http & json
标签:
原文地址:http://www.cnblogs.com/balfish/p/4679865.html