jesse

导航

 

交互过程

具体访问步骤

客户端输入域名,通过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

Connection: keep-alive          # 表示完成本次响应后保持连接(对应为close)

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

posted on 2018-03-18 16:38  jessewu  阅读(138)  评论(0)    收藏  举报