您的位置:首页 > 理论基础 > 计算机网络

http协议学习笔记(一)

2016-05-01 16:47 369 查看
前两天刚到公司报道上班,看了两天的文档就到五一放假了,趁着放假的三天时间打算好好复习下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:指定低层使用的协议(例如:http, https, ftp)

host:HTTP服务器的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 服务器当前不能处理客户端的请求,一段时间后可能恢复正常
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  http协议 url