HTTP协议

作者: 熠辉web3 | 来源:发表于2017-07-13 21:32 被阅读141次

一. HTTP简介

  1. HTTP(Hypertext transfer protocol)超文本传输协议,是一种详细规定了浏览器和万维网服务器之间互相同行,通过互联网传文档的数据传送协议.
  2. HTTP可以使浏览器更加高效,使网络传输减少,他不仅保证了计算机正确快速的传输文档,还确定传输文档中的那一部分,以及那部分内容首先显示等.
  3. HTTP协议是一个应用层协议,有请求和响应构成,是一个标准的客户端服务器模型,HTTP协议是一个无状态的协议.
  4. HTTP默认的端口号是80,HTTPS的端口号是443.

二. URL和URI

(一)URI:统一资源标识符

Web上可用的每种资源如HTML文档、图像、视频片段、程序等都是一个来URI来定位的,URI一般由三部组成:

  1. 访问资源的命名机制
  2. 存放资源的主机名
  3. 资源自身的名称,由路径表示,着重强调于资源。

(二)URL:统一资源定位符

URL是Internet上用来描述信息资源的字符串,主要用在各种WWW客户程序和服务器程序上,特别是著名的Mosaic。采用URL可以用一种统一的格式来描述各种信息资源,包括文件、服务器的地址和目录等。URL一般由三部组成:

  1. 协议(或称为服务方式)
  2. 存有该资源的主机IP地址(有时也包括端口号)
  3. 主机资源的具体地址。如目录和文件名等

三. HTTP请求

HTTP的请求报文由3部分组成,分别是:请求行,请求头,请求正文

1. GET方法

//请求行 格式:请求方式 请求地址  协议名称/版本
GET /http/userLogin.php?username=wanlum&password=123456 HTTP/1.1

//请求头
Host: localhost
Connection: keep-alive
Upgrade-Insecure-Requests: 1
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
Referer: http://localhost/day02-http&ajax/4-code/02-http/userLogin.html
Accept-Encoding: gzip, deflate, br
Accept-Language: zh-CN,zh;q=0.8

//请求正文
username=json&password=123456

2. POST方法

//请求行 格式:请求方式 请求地址  协议名称/版本
POST /http/userLogin.php HTTP/1.1

//请求头
代表主机名称
Host: localhost
代表是否开启长链接
Connection: keep-alive
代表请求内容的长度(中文一个占三个字节)
Content-Length: 31
是否开启缓存     开启缓存 但是立即删除
Cache-Control: max-age=0
域名的源
Origin: http://localhost
安全请求
Upgrade-Insecure-Requests: 1
用户代理
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/59.0.3071.115 Safari/537.36
告诉服务器请求内容是表单的url的编码
Content-Type: application/x-www-form-urlencoded
浏览器告诉服务器我能接受的内容的类型
image/png image/jpg  audio/mp3  我们把这样的格式  大类型/具体类型   叫做MIME类型
作用是告诉对方用什么样的方式去解析内容
Accept: text/html,application/xhtml+xml,application/xml;q=0.9, image/webp,image/apng,*/*;q=0.8
当前的页面是从那个页面跳转过来的()
Referer: http://localhost/http/userLogin.html
浏览器告诉服务器能接受的内容的压缩格式
Accept-Encoding: gzip, deflate,
浏览器告诉服务器我所能接受的语言
Accept-Language: zh-CN,zh;q=0.8

//请求正文
username=json&password=123456

四. HTTP响应

HTTP的响应报文由3部分组成,分别是:响应行,响应头,响应正文

//响应行 格式:协议/版本号 状态码  状态码描述
HTTP/1.1 200 OK

//响应头
Date: Fri, 07 Jul 2017 06:44:11 GMT
Server: Apache/2.2.21 (Win32) PHP/5.3.10
网站用什么技术开发的
X-Powered-By: PHP/5.3.10
响应内容的长度
Content-Length: 60
长连接的时间  5s以后算超时   超时之后 开始尝试链接 尝试一次max-1  直到100被减完了 就不再尝试了
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
服务器告诉浏览器我给你的内容的格式
Content-Type: text/html

//响应正文
Array ( [username] => json[password] => 123456 )

五. HTTP状态码

  1. 状态代码有三位数字组成,第一个数字定义了响应的类别,共分五种类别:

    1xx:指示信息--表示请求已接收,继续处理
        
    2xx:成功--表示请求已被成功接收、理解、接受
        
    3xx:重定向--要完成请求必须进行更进一步的操作
    
    4xx:客户端错误--请求有语法错误或请求无法实现
                
    5xx:服务器端错误--服务器未能实现合法的请求
    
  2. 常见状态码:

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

六. HTTP请求方法

GET     请求指定的页面信息,并返回实体主体。

HEAD     类似于get请求,只不过返回的响应中没有具体的内容,用于获取报头。

POST     向指定资源提交数据进行处理请求(例如提交表单或者上传文件)。数据被包含在请求体中。POST请求可能会导致新的资源的建立和/或已有资源的修改。

PUT     从客户端向服务器传送的数据取代指定的文档的内容。

DELETE      请求服务器删除指定的页面。

CONNECT     HTTP/1.1协议中预留给能够将连接改为管道方式的代理服务器。

OPTIONS     允许客户端查看服务器的性能。

TRACE     回显服务器收到的请求,主要用于测试或诊断。

七. 关于HTTP协议的面试题

1. 请简要描述在客户端浏览器中输入域名之后,到用户看到页面的整个过程.

(1) 将域名发送到DNS服务器,DNS服务器解析域名,DNS服务器将域名解析成IP地址

(2) DNS服务器将IP地址传入到浏览器中.

(3) 浏览器通过收到的IP地址,给Web服务器发送请求.

(4) Web服务器解析收到的请求信息,将响应信息传递回浏览器

2. HTTP的三次握手.

在TCP/IP协议中,TCP协议提供可靠的连接服务,采用三次握手建立一个连接。

  • 第一次握手:建立连接时,客户端发送syn包(syn=j)到服务器,并进入SYN_SEND状态,等待服务器确认;

  • 第二次握手:服务器收到syn包,必须确认客户的SYN(ack=j+1),同时自己也发送一个SYN包(syn=k),即SYN+ACK包,此时服务器进入SYN_RECV状态;

  • 第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=k+1),此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。 完成三次握手,客户端与服务器开始传送数据.

3. GET方法和POST方法的区别.

  • GET提交的数据会放在URL之后,以?分割URL和传输数据,参数之间以&相连,而POST方法会把数据放在请求正文中.

  • GET提交的数据大小有限制,最多只有1024个字节,而POST方法体检的数据没有限制.

  • GET方法提交数据,因为通过URL传递关系,所以不能传递例如用户密码和用户名等涉及用户隐私的信息. 相对的,POST方法比GET方法安全.

相关文章

网友评论

    本文标题:HTTP协议

    本文链接:https://www.haomeiwen.com/subject/hnughxtx.html