首页 > 技术文章 > http

xqr2018 2018-03-28 20:33 原文

什么是http?

http,即超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相通信的规则,通常是建立在TCP/IP协议通信基础之上的,它允许将HTML文档从web服务器传送到web浏览器。

http的请求与回应:在浏览器地址栏中输入一个URL并按回车键就能发起一个http请求,服务器收到请求之后向客户端发送响应信息,具体过程如下:

关于URL:即统一资源定位符,是一种特殊的URI(统一资源标识符),也被称为网页地址,是互联网标准的地址

  格式:协议://服务器IP[:端口]/路径/[?查询]

  eg:http://www.aspxfans.com:8080/news/index.asp?boardID=5&ID=24618&page=1#name 

从上面的URL可以看出,一个完整的URL包括以下几部分:
1.协议部分:该URL的协议部分为“http:”,这代表网页使用的是HTTP协议。在Internet中可以使用多种协议,如HTTP,FTP等等本例中使用的是HTTP协议。在"HTTP"后面的“//”为分隔符

2.域名部分:该URL的域名部分为“www.aspxfans.com”。一个URL中,也可以使用IP地址作为域名使用

3.端口部分:跟在域名后面的是端口,域名和端口之间使用“:”作为分隔符。端口不是一个URL必须的部分,如果省略端口部分,将采用默认端口

4.虚拟目录部分:从域名后的第一个“/”开始到最后一个“/”为止,是虚拟目录部分。虚拟目录也不是一个URL必须的部分。本例中的虚拟目录是“/news/”

5.文件名部分:从域名后的最后一个“/”开始到“?”为止,是文件名部分,如果没有“?”,则是从域名后的最后一个“/”开始到“#”为止,是文件部分,如果没有“?”和“#”,那么从域名后的最后一个“/”开始到结束,都是文件名部分。本例中的文件名是“index.asp”。文件名部分也不是一个URL必须的部分,如果省略该部分,则使用默认的文件名

6.锚部分:从“#”开始到最后,都是锚部分。本例中的锚部分是“name”。锚部分也不是一个URL必须的部分

7.参数部分:从“?”开始到“#”为止之间的部分为参数部分,又称搜索部分、查询部分。本例中的参数部分为“boardID=5&ID=24618&page=1”。参数可以允许有多个参数,参数与参数之间用“&”作为分隔符。

 

http协议详解:

http是一种无状态协议,即web服务器与浏览器之间不需要建立持久的连接,服务器不会保留连接的相关信息,也就是说,只能由浏览器发送请求,而服务器不能主动发送数据。

  1. http请求:包括三部分,请求行,请求头,请求正文,如下:

    1. 请求行以一个方法名开头,以空格分开,后面跟着http的版本
    2. 第二行至空白行是请求头
  2. http响应:跟http请求类似,由响应行,响应头,响应正文组成:

    1. 状态行,由HTTP协议版本号, 状态码, 状态消息 三部分组成。
    2. 第二行到空白行为响应头
    3. 响应正文是服务器向客户端发送的HTML数据
  3.   http的请求方法:
    GET     请求指定的页面信息,并返回实体主体。
    HEAD     类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头
    POST     向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。
    PUT     从客户端向服务器传送的数据取代指定的文档的内容。
    DELETE      请求服务器删除指定的页面。
    CONNECT     HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。
    OPTIONS     允许客户端查看服务器的性能。
    TRACE     回显服务器收到的请求,主要用于测试或诊断。

    GET和POST请求方法的区别:

    GET方法:请求的数据会附在URL之后,以?分割URL和传输数据,多个参数用&连接。

    例如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0 %E5%A5%BD。如果数据是英文字母/数字,原样发送;如果是空格,转换为+,如果是中文/其
    他字符,则直接把字符串用BASE64加密,得出如: %E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。POST方法:把提交的数据放置在是HTTP包的
    包体中。即
    GET方法登录的账号密码在URL上面是会显示出来的,而POST方法是基于表单的方式发出去的,不会显示在URL上面,相对来说POST方法安全性比较高,
    而且,GET方法有长度的限制,而POST方法没有这个限制。
  4. http状态码:由三位数字组成,第一位数字定义了响应的类别,且只有一下5种:
    1xx:指示信息--表示请求已接收,继续处理,范围100-101
    2xx:成功--表示请求已被成功接收、理解、接受,范围200-206
    3xx:重定向--要完成请求必须进行更进一步的操作,范围300-305
    4xx:客户端错误--请求有语法错误或请求无法实现,范围400-415
    5xx:服务器端错误--服务器未能实现合法的请求,范围500-505

    常见的状态码:
    200 OK                        //客户端请求成功
    400 Bad Request               //客户端请求有语法错误,不能被服务器所理解
    401 Unauthorized              //请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用 
    403 Forbidden                 //服务器收到请求,但是拒绝提供服务
    404 Not Found                 //请求资源不存在,eg:输入了错误的URL
    500 Internal Server Error     //服务器发生不可预期的错误
    503 Server Unavailable        //服务器当前不能处理客户端的请求,一段时间后可能恢复正常
    302 //重定向

推荐阅读