交互过程

具体访问步骤
客户端输入域名,通过DNS解析具体IP地址
向该IP地址的具体端口建立TCP连接
发送HTTP请求的内容,包括请求方法、访问的URL和协议版本等
服务端返回URL所请求的数据作为Response发送给客户端
客户端接收结果并关闭TCP连接
注意:如果在请求头中设置connection: keep-alive,则允许客户端在一次HTTP请求完成后不关闭TCP连接,以便之后第二次的请求,减少系统开销
Request消息结构
消息头(HTTP HEAD):
GET /hello.txt HTTP/1.1 # 请求行:分别表示请求方法、URL、协议版本Host:www.mysite.com
Date: Sun, 18 Mar 2018 07:15:54 GMT # 创建报文时间
Host: 119.29.251.86 # 请求资源所在服务器
Accept: text/html # 接受什么介质类型
Accept-Encoding: gzip, deflate # 接收的编码方法(gzip、deflate、UTF8)
Accept-Language:en # 标识客户端接收的消息语言(en、cn)
消息体(HTTP BODY):
。。。。。。
Response消息结构
消息头:
HTTP/1.1 200 OK # 状态行:协议版本 状态码 状态码的原因字符串
Connection: keep-alive
Server: nginx/1.12.2 # 服务器信息
Location: http://mysite.com/other # 访问的对象已被移到别的位置,用location来重定向
Etag: "cd47905c89155e685da4dbd2edeb8" # 客户端把接收的数据转换为Etag保留,下次请求相同URL时把Etag提交给服务器。服务器判断相应的数据的Etag是否变化,如有变化就发送更新的数据给客户端
Accept-Range: 66666 # 可接收的字节范围
消息体:
HTML网页
状态码:
1xx:表明服务器已接收Request,继续处理,请客户端等待
2xx:处理成功
3xx:重定向:请求的地址已被重定向,切换到另一个页面(从Response的消息头中的location获取)
4xx:客户端错误:请求中提交的参数或内容有错误
5xx:服务器错误:服务器处理Request时出错
常见状态码:
100:继续等待
200:正常完成并返回 204:Request被处理但没有资源可以返回 206:服务器返回部分资源
301:永久性重定向 302:临时重定向 #301表示旧资源已移除,而302表示旧资源还在,只是临时创建一个新地址
400:Request语法有误 401:Request需要认证 403:Request的对应资源禁止访问 404:服务器无法找到对应资源
500:服务器内部错误 503:服务器正忙(过载或维护)
HTTP请求方法:
GET: 从访问的地址中获取信息(包括信息头和信息体)
POST: 向服务器提交数据,提交的数据放在Request的正文里
PUT:与POST类似,但PUT是幂等性(重复操作多少次结果都一样),如A改为B,多次操作结果还是B,而POST不是幂等性的,不允许用户出现重复的POST提交数据
HEAD:与GET类似,但HEAD只获取信息头
DELETE:删除对应URL位置的文件
OPTION:查询相应URL支持的访问方式,既HTTP请求方法
怎么理解HTTP的无状态协议,如何解决?
无状态协议:对事务没有记忆能力。也就是说,客户端的HTTP请求完成后再发送一次HTTP请求,HTTP并不知道当前客户端是一个老用户
解决办法:使用cookie
URI和URL的区别:
URI通过字符串标识资源,代表资源的名称,如index.html
URL通过描述位置来标识资源,代表资源的路径地址,如/root/usr/resource.txt
浙公网安备 33010602011771号