原文地址:HTTP: Let’s GET It On!

简介

几周之前,我们了解到HTTP是一个应用级的协议。现在是时候探索我们应该如何在客户端和服务端的通信之间使用这个协议了。

从网络上获取资源

记住,HTTP客户端(浏览器)总是向HTTP服务器发起请求。HTTP协议给客户端提供了一些工具向服务器表达意图:URI、HTTP方法和HTTP头部。

给资源起一个名字

URI是网络的基础之一。它解决了互联网上存在的一个重大问题:如何唯一的标识出网络上的一个资源。

如果你让某人抓取一个东西并带给你,你没有其他办法,你需要用词语描述你想要的那个东西以区分出它:

你可能会对朋友说“把这本书带给我。”

你的朋友也许会回答“好的,你要哪一本?”

你说“在另外房间中的那一本。”

你的朋友来到那个房间“哪一本?”

你有点不耐烦“绿色的那个。”

你的朋友“嘿,老兄!这有两个绿色的书。”

最后,你站起身自己拿到了那本书。但是,所有的这些都可以更简单。随后我们想再次访问这些资源时,我们要如何唯一的识别出他们呢?记忆是一种可能的方案。但是,我们要如何给其他人介绍从而拿到你想要的那个资源呢?为此,我们创建一个系统:

1、剪纸或者使用黄色的便签。

2、在你所在的房间或桌子上,将空白便签放在你稍后要访问的对象(例如书籍)的旁边或顶部。

3、在每一个便签上写上一个唯一的ID。

4、在另外一个房间或另外一张桌子上重复上述过程。

记住,这不仅仅只是为了你自己使用,它还要能实现互动(可以显著的避免你的不便)。我在纸上写了如下标识以便我能找到对应的对像:

myRoom.org/table/book/001

myRoom.org/shelf/book/002

otherRoom.org/cup/001

otherRoom.org/flower/001

otherRoom.org/book/001

到目前为止,我想你已经理解了这种方案。现在,我们有了一个标签系统用来精确的标识一个空间内的物品。在网络上,我们使用URI处理一个信息空间并且标识这个信息。

访问被标识的资源

在上一篇文章中我们学习了使用命令行发送HTTP请求的技术。我们使用一个包含了HTTP方法GET和HTTP头部Host的简单的结构:

GET / HTTP/1.1

Host: www.opera.com

HTTP方法的完整列表是:OPTIONS,GET,POST,PUT,DELETE,TRACE,CONNECT。他们中的每一个都有不同的功能,在随后的文章中我们会介绍。GET方法是使用最多的方法。我们每次在浏览器的地址栏中输入HTTP URI时,我们都向服务器发送了一个GET请求。

在网络上,更多的信息(HTTP头部)被客户端发送给了服务器来帮助协商HTTP请求。然后,服务器将根据这些头部信息调整他的响应。在Opera Dragonfly中有一个非常实用的工具用来创建自定义的HTTP请求并查看服务器的HTTP响应:你可以在Network部分下的Make Request标签下找到它(现在Opera已经放弃了自己的内核,在最新的Opera里已经找不到了,你可以使用postman代替)。

在Make Request标签里,有这些区域:

URL:资源标识符(或者说网址)

Request body:客户端发送给服务器的内容。(‘Send request’按钮会通过网络向服务器发送一个请求)

Response:请求完成后服务器的响应

定制HTTP请求

1、把https://www.opera.com/复制到URL部分的输入框中。

2、将下面的HTTP请求复制到”Request body”部分的输入框中。

3、然后点击”Send request”按钮。

GET / HTTP/1.1

Host: www.opera.com

Accept-Language: en

Opera HTTP服务器会回复一些HTTP响应头信息和文档的标记。响应的信息可能会很长,你需要滚动查看。注意,文档是英文的--不仅是书写语言,在html元素的lang属性中也明确指定了:

<!DOCTYPE html>

<html lang="en">

让我们试试法语:

GET / HTTP/1.1

Host: www.opera.com

Accept-Language: fr

这次试用标记中指定的法语和文档中文本的实际语言响应:

<!DOCTYPE html>

<html lang="fr">

我们使用了同一个URI--https://www.opera.com/--但是收到了不同的回应,仅仅因为我们改变了HTTP的Accept-Language。注意,服务器返回了很多头部信息,给我们提供了关于资源的状态,比如类型等。这将允许客户端调整对文档的处理。你也可以试试其他不同的语言:日语ja,德语de。

如果我们请求的语言在服务器上不存在会发生什么呢?你可以试试中文zh(服务器上当然有中文支持):

GET / HTTP/1.1

Host: www.opera.com

Accept-Language: zh

你得到了英文版本的站点--是不是有点疑惑?这是网站设计选择的一部分。服务器的HTTP响应可以以不同方式设计:可以简单地回复“对于这个地址我们没有中文版本。”或者“这个地址没有对应的中文版本,这是目前可用的语言版本”(带有指向不同语言版本的链接列表)。但是Opera UX部门决定,当请求的语言未知时,服务器默认发送英文版本。这确实是一个选择问题:并没有正式的标准规定该怎么做。

这就是我为什么总是给UX的同事和前端开发者教授一点HTTP知识的原因。HTTP是一个应用程序协议,用来管理客户端和服务器之间的通信。就其本身而言,当创建为人类和机器(机器人、API和客户端等)一个网站的时候,理解他是如何工作的有助于设计出有意义的交互。

你要记住的要点

URI:互联网上用来标识信息的系统

HTTP Methods:协议目前包含8种请求一个URI的方法:OPTIONS,GET,HEAD,POST,PUT,DELETE,TRACE,CONNECT。这篇文章中我们重点关注使用比较多的GET方法。

HTTP Headers:头部信息是用户代理发送的额外数据,用于给客户端和服务器之间正在处理的事物提供更多的配置指令。他们中的一些将帮助服务器以更合适的方式回应。

[翻译]HTTP: Let’s GET It On!的更多相关文章

  1. 《Django By Example》第五章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者@ucag注:大家好,我是新来的翻译, ...

  2. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  3. [翻译]开发文档:android Bitmap的高效使用

    内容概述 本文内容来自开发文档"Traning > Displaying Bitmaps Efficiently",包括大尺寸Bitmap的高效加载,图片的异步加载和数据缓存 ...

  4. 【探索】机器指令翻译成 JavaScript

    前言 前些时候研究脚本混淆时,打算先学一些「程序流程」相关的概念.为了不因太枯燥而放弃,决定想一个有趣的案例,可以边探索边学. 于是想了一个话题:尝试将机器指令 1:1 翻译 成 JavaScript ...

  5. 《Django By Example》第三章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第三章滚烫出炉,大家请不要吐槽文中 ...

  6. 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...

  7. 《Django By Example》第一章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:本人目前在杭州某家互联网公司工作, ...

  8. 【翻译】Awesome R资源大全中文版来了,全球最火的R工具包一网打尽,超过300+工具,还在等什么?

    0.前言 虽然很早就知道R被微软收购,也很早知道R在统计分析处理方面很强大,开始一直没有行动过...直到 直到12月初在微软技术大会,看到我软的工程师演示R的使用,我就震惊了,然后最近在网上到处了解和 ...

  9. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第一章:创建基本的MVC Web站点

    在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity ...

  10. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之目录导航

    ASP.NET MVC with Entity Framework and CSS是2016年出版的一本比较新的.关于ASP.NET MVC.EF以及CSS技术的图书,我将尝试着翻译本书以供日后查阅. ...

随机推荐

  1. Java自学入门新的体会0.2

    Java 基本数据类型 变量就是申请内存来存储值,也就是说,当创建变量的时候,需要在内存中申请空间. 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用来存储该类型数据. 因此,通过定义不 ...

  2. Python 获取文件的创建时间,修改时间和访问时间

    # 用到的知识# os.path.getatime(file) 输出文件访问时间# os.path.getctime(file) 输出文件的创建时间# os.path.getmtime(file) 输 ...

  3. python 元组切片

    #create a tuple tuplex = (, , , , , , , , , ) #used tuple[start:stop] the start index is inclusive a ...

  4. webdriver 的三种等待方式

    1.显式等待  一个显式等待是你定义的一段代码,用于等待某个条件发生然后再继续执行后续代码. from selenium import webdriverfrom selenium.webdriver ...

  5. Codeforces 862C - Mahmoud and Ehab and the xor

    862C - Mahmoud and Ehab and the xor 思路:找两对异或后等于(1<<17-1)的数(相当于加起来等于1<<17-1),两个再异或一下就变成0了 ...

  6. Codeforces 580A - Kefa and First Steps

    580A - Kefa and First Steps 思路:dp dp[i]表示包括前i个元素中a[i]在内的最大增序列. 代码: #include<bits/stdc++.h> usi ...

  7. ISO 8859-1 对照表 (扩展ASCII码表)

    1. 0---127 是ASCII码 2.128--255 加了一些特殊符号 DEC OCT HEX BIN Symbol HTML Number HTML Name Description 128 ...

  8. 常用HTTP contentType与后端处理方式

    常用HTTP contentType与后端处理方式 1.Content-Type:application/x-www-form-urlencoded; charset=UTF-8 前端export.j ...

  9. English trip -- VC(情景课)3 A Family

    xu言: 今天,老天很给面子.我在路上的时候基本上没有~然而我也没有带雨具.难道这就是传中的天道酬勤~或者说只要你努力,老天爷会给让路 Talk about the picture 看图说话 Look ...

  10. 莫比乌斯反演学习笔记(转载自An_Account大佬)

    转载自An_Account大佬 提示:别用莫比乌斯反演公式,会炸的 只需要记住: [gcd(i,j)=1]=∑d∣gcd(i,j)μ(d)[gcd(i,j)=1]=\sum_{d|gcd(i,j)}\ ...