HTTP请求

1、请求头

  1. Accept:浏览器可以接受的文件类型(application/json JSON格式、text/plain纯文本格式、text/html HTML文本、* / * 所有格式),如果没有Accept请求头,相当于* / *。
  2. Accept-Encoding:指定浏览器可以支持的web服务器返回内容压缩编码类型。(Accept-Encoding: compress, gzip)
  3. Accept-Charset:浏览器可以接受的字符编码集。(Accept-Charset: iso-8859-5)
  4. Accept-Language:浏览器可接受的语言。(Accept-Language: en,zh)
  5. Authorization:HTTP授权的授权证书。(Authorization: Basic QWxhZGRpbjpvcGVuIHNlc2FtZQ==)
  6. Connection:表示是否需要持久连接,HTTP 1.1默认进行持久连接。(Connection: close, keep-alive)
  7. Cookie:HTTP请求发送时,会把保存在该请求域名下的所有cookie值一起发送给web服务器。(Cookie: $Version=1; Skin=new;)
  8. Content-Length:请求的内容长度。(Content-Length: 348)
  9. Content-Type:请求的与实体对应的MIME信息。(Content-Type: application/x-www-form-urlencoded)
  10. Cache-Control:指定请求和响应遵循的缓存机制。(Cache-Control: no-cache)
  11. User-Agent:User-Agent的内容包含发出请求的用户信息。(User-Agent: Mozilla/5.0 (Linux; X11))

想要特别说明其中的cookie。

  • 因为HTTP协议本身是无状态的,也就是说,同一个客户第二次访问同一个服务器上的页面时,服务器的响应与第一次被访问时相同。
  • 如果想要服务器记住用户的身份,就可以在HTTP中使用Cookie,Cookie表示在HTTP服务器和客户端之间传递的状态信息。
  • Cookie的工作:当用户A浏览某个使用Cookie的网站时,该网站的服务器就为A产生一个唯一的识别码,并以此作为索引在服务器的后端数据库中产生一个项目。接着在A的HTTP响应报文中添加一个叫作Set-cookie的首部行(这里的“首部字段名”就是Set-cookie,而后面的值就是赋予该用户的“识别码”),当A收到这个响应式,其浏览器就在它管理的特定Cookie文件中添加一行,其中包括这个服务器的主机名和Set-cookie后面给的识别码,当A继续浏览这个网站时,每发送一个HTTP请求报文,其浏览器就会从其Cookie文件中取出这个网站的识别码,并放到HTTP请求报文的Cookie首部行中。于是,这个网站就能够跟踪用户A在该网站的活动,需要注意的是,服务器并不知道这个用户的真实姓名以及其他信息,但服务器能够知道用户A在什么时间访问了哪些页面,以及访问这些页面的顺序。

请求方式:
1、GET

  • 从指定的资源请求数据
  • 查询字符串(名称/值对)是在 GET 请求的 URL 中发送的
  • GET 请求可被缓存
  • GET 请求保留在浏览器历史记录中
  • GET 请求可被收藏为书签
  • GET 请求不应在处理敏感数据时使用
  • GET 请求有长度限制(URL 的最大长度是 2048 个字符)
  • GET 请求只应当用于取回数据
  • 编码类型:application/x-www-form-urlencoded
  • 对数据类型的限制:只允许 ASCII 字符

2、POST

  • 向指定的资源提交要被处理的数据
  • 查询字符串(名称/值对)是在 POST 请求的 HTTP 消息主体中发送的
  • POST 请求不会被缓存
  • POST 请求不会保留在浏览器历史记录中
  • POST 不能被收藏为书签
  • POST 请求对数据长度没有要求
  • 编码类型:application/x-www-form-urlencoded 或 multipart/form-data。为二进制数据使用多重编码
  • 对数据类型的限制:没有限制,也允许二进制数据

2、响应头:

  1. Accept-Ranges:表明服务器是否支持指定范围请求及哪种类型的分段请求。(Accept-Ranges: bytes)
  2. Allow:对某网络资源的有效的请求行为,不允许则返回405。(Allow: GET, HEAD)
  3. Cache-Control:告诉所有的缓存机制是否可以缓存及哪种类型。(Cache-Control: no-cache)
  4. Content-Encoding:web服务器支持的返回内容压缩编码类型。( Content-Encoding: gzip)
  5. Content-Language:响应体的语言。( Content-Language: en,zh)
  6. Content-Length:响应体的长度。(Content-Length: 348)
  7. Content-Location:请求资源可替代的备用的另一地址。(Content-Location: /index.htm)
  8. Content-MD5:返回资源的MD5校验值。(Content-MD5: Q2hlY2sgSW50ZWdyaXR5IQ==)
  9. Content-Type:返回内容的MIME类型。(Content-Type: text/html; charset=utf-8)

状态码:状态代码为3位数字。

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

HTTP连接的两种类型

  • 持久性连接:每个TCP连接最多允许传输一个对象。
  • 非持久性连接:每个TCP连接允许传输多个对象。

假设用户在浏览器中输入URL(www.someSchool.edu/someDepartment/home.index),接下来的过程如下:

  1. HTTP客户端向地址为www.someSchool.edu的服务器上的HTTP服务器进程(端口80)发起TCP连接请求。
  2. HTTP服务器在端口80等待TCP连接请求,接收连接请求并通知客户端。
  3. HTTP客户端将HTTP请求消息(包含URL地址)通过TCP连接的套接字发出。
  4. HTTP服务器收到请求消息,解析,产生包含所需要对象的响应消息,并通过套接字发给客户端。
  5. 如果是非持久性连接,这个时候HTTP服务器就会关闭TCP连接。然后,HTTP客户端收到响应消息,解析html文件,显示html文件,发现有10个指向.jpeg对象的超链接,那么将会为每个.jpeg对象重复1~5步骤。

每个对象需要2个RTT,操作系统需要为每个TCP连接开销资源。
浏览器会怎么做?打开多个并行的TCP连接以获取网页所需对象。

  1. 如果是持久性连接,发送响应后,服务器保持TCP连接的打开,后续的HTTP消息可以通过这个连接发送。

这里的持续连接又分为:
无流水的持久性连接:客户端只有收到前一个响应后才发送新的请求。每个引用的对象耗时1个RTT。
带有流水机制的持久性连接(HTTP1.1默认):客户端只要遇到一个引用对象就尽快发出请求。理想情况下,收到所有的引用对象只需消耗时约1个RTT。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值