http协议学习笔记(一)

前两天刚到公司报道上班,看了两天的文档就到五一放假了,趁着放假的三天时间打算好好复习下http协议的相关知识

一 URL详解

uri: uniform resource identifier统一资源标识符 
url: uniform resource locator统一资源定位符,是通过web浏览器访问资源的 
urn: uniform resource name,统一资源命名,是通过名字来标识资源 


URL(Uniform Resource Locator) 地址用于描述一个网络上的资源,  基本格式如下:

schema://host[:port#]/path/.../[;url-params][?query-string][#anchor]

http://www.mywebsite.com/sj/test;id=8079?name=sviergn&x=true#stuff

scheme:指定低层使用的协议(例如:httphttpsftp)

hostHTTP服务器的IP地址或者域名

port#HTTP服务器的默认端口是80,这种情况下端口号可以省略。如果使用了别的端口,必须指明,例如http://www.mywebsite.com:8080/

path:访问资源的路径

 url-params:

query-string:发送给http服务器的数据

anchor:锚


二 http协议

http(超文本传输协议)是一个基于请求与响应模式的、无状态的、应用层的协议,常基于TCP的连接方式,HTTP1.1版本中给出一种持续连接的机制,绝大多数的Web开发,都是构建在HTTP协议之上的Web应用。

无状态

http协议是无状态的,同一个客户端的这次请求和上次请求是没有对应关系,对http服务器来说,它并不知道这两个请求来自同一个客户端。 为了解决这个问题, Web程序引入了Cookie机制来维护状态。

Web服务器,浏览器,代理服务器

当我们打开浏览器,在地址栏中输入URL,然后我们就看到了网页。 原理是怎样的呢?

实际上我们输入URL后,我们的浏览器给Web服务器发送了一个Request, Web服务器接到Request后进行处理,生成相应的Response,然后发送给浏览器, 浏览器解析Response中的HTML,这样我们就看到了网页,过程如下图所示

我们的Request 有可能是经过了代理服务器,最后才到达Web服务器的。过程如下图所示:

代理服务器就是网络信息的中转站,有什么功能呢?

1. 提高访问速度, 大多数的代理服务器都有缓存功能。

2. 突破限制, 也就是翻墙了。

3. 隐藏身份。

4. 限制访问。

请求报文(Request

第一部分叫请求行(request-line), 第二部分叫http header(首部行), 第三部分是entity body。header和body之间有个空行,如下图所示:


第一行中的Method表示请求方法,比如"POST","GET",  Path-to-resoure(Request-URI)表示请求的资源路径(相对URL), HTTP/version-number 表示HTTP协议的版本号。当使用的是"GET" 方法的时候, body是为空的。

HTTP请求报文的一些方法

方法就是对所请求的对象进行的操作,这些方法实际上就是一些命令。最基本的有4种:GET POST PUT DELETE。URL用于描述网络上的一个资源,而HTTP请求报文的METHOD则对应着对这个资源的不同操作。

GET:请求读取资源(查询)

POST:给服务器添加信息(更新)

PUT:在指明的URL下存储一个文档(增加)

DELETE:删除指明的URL所标志的资源(删除)

GET和POST的区别

1. GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,如EditPosts.aspx?name=test1&id=123456.  POST方法是把提交的数据放在HTTP包的Body中。

2. GET提交的数据大小有限制(因为浏览器对URL的长度有限制),而POST方法提交的数据大小没有限制。

3. GET方式需要使用Request.QueryString来取得变量的值,而POST方式通过Request.Form来获取变量的值。

4. GET方式提交数据,会带来安全问题,比如一个登录页面,通过GET方式提交数据时,用户名和密码将出现在URL上,如果页面可以被缓存或者其他人可以访问这台机器,就可以从历史记录获得该用户的账号和密码。

响应报文(Response

和Request消息的结构基本一样。 同样也分为三部分,第一部分叫status-line, 第二部分叫response header,第三部分是entity body. header和body之间也有个空行,如下图所示:


HTTP/version-number表示HTTP协议的版本号,  状态码(status-code)和短语(message) 请看下文的详细解释。

状态码用来告诉HTTP客户端,HTTP服务器是否产生了预期的Response,共分5大类33种:

HTTP/1.1中定义了5类状态码, 状态码由三位数字组成,第一个数字定义了响应的类别

1XX  提示信息 - 表示请求已被成功接收,继续处理

2XX  成功 - 表示请求已被成功接收,理解,接受

3XX  重定向 - 要完成请求必须进行更进一步的处理

4XX  客户端错误 -  请求有语法错误或请求无法实现

5XX  服务器端错误 -   服务器未能实现合法的请求

看看一些常见的状态码

200 OK 最常见的就是成功响应状态码200了, 这表明该请求被成功地完成,所请求的资源发送回客户端

302 Found 重定向,新的URL会在response中的Location中返回,浏览器将会使用新的URL发出新的Request

304 Not Modified 代表上次的文档已经被缓存了, 还可以继续使用

400 Bad Request  客户端请求语法错误,不能被服务器所理解

403 Forbidden 服务器收到请求,但是拒绝提供服务

404 Not Found 请求资源不存在(输错了URL)

500 Internal Server Error 服务器发生了不可预期的错误

503 Service Unavailable 服务器当前不能处理客户端的请求,一段时间后可能恢复正常


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值