Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

отчет2

.docx
Скачиваний:
11
Добавлен:
18.02.2023
Размер:
90.03 Кб
Скачать

Министерство образования Республики Беларусь

УО «Полоцкий государственный университет»

Факультет информационных технологий

Кафедра технологий программирования

ОТЧЕТ

О прохождении курса по дисциплине

«Программирование для Интернет»

на тему «Web-технологии»

Выполнил студент группы

Проверил

Полоцк

1. Как называется этот курс?

  • Web-технологии

2. Что из нижеперечисленного является корректным MIME типом?

  • text/html

  • application/javascript

  • text/javascript

  • text/css

  • image/jpeg

3. В вашем браузере загружена страница с URL https://site.com/library/new

На какой (абсолютный) URL перейдет браузер при клике по ссылке вида /../best/ ?

  • https://site.com/best/

4. В вашем браузере загружена страница с URL https://site.com/library/123.html?full=1

На какой URL перейдет браузер при клике по ссылке вида /library/234.html#chapter2?

  • https://site.com/library/234.html#chapter2

5. Выберите правильные способы загрузки связанных ресурсов

A) <style src="/index.css"></style>

B) <link rel="stylesheet" href="/index.css">

C) <script href="/js/jquery.js">

D) <script src="/js/jquery.js"></script>

E) <code src="/js/jquery.js"></code>

F) <img src="/img/logo.png">

G) <img href="/img/logo.png"></img>

  • B

  • D

  • F

6. Какой web-сервер (программа и версия) обслуживает URL https://stepic.org/favicon.ico

Название web-сервера можно узнать из заголовка Server HTTP ответа.

  • Nginx/1.10.3

7. На странице https://stepik.org/explore используются различные CSS файлы.

Введите путь первого CSS файла, который загружается с домена stepik.org с помощью HTML.

Внимание: нужно ввести именно часть URL соответствующую пути, а не весь URL. Динамически загружаемые (с помощью JavaScript) стили - не учитывать.

  • /static/frontend-build/critical.css

8. В вашем браузере загружен документ c URL = https://site.com/path/to/page

Вы щелкаете на гиперссылку с URL = ../another/page

На какой URL перейдет браузер в итоге?

  • https://site.com/path/another/page

9. В вашем браузере загружен документ c URL = https://site.com/path/to/page/

Вы щелкаете на гиперссылку с URL = another_page.html

На какой URL перейдет браузер в итоге?

  • https://site.com/path/to/page/another_page.html

10. Напишите DocType HTML версии 5.

  • <!DOCTYPE html>

11. Выберите правильные высказывания о тэгах.

Для проверки ваших предположений можно использовать валидатор HTML https://validator.w3.org/nu/#textarea

Rows:

div

span

img

h1

p

Занимает всю ширину

Можно задавать размер с помощью стилей width и height

Внутри можно (валидно) разместить другие блочные тэги

12. Выберите правильное сочетание атрибутов тэгов form и input для загрузки файлов

  • method="POST" enctype="multipart/form-data" type="file"

13. Что здесь написано:

%D0%A3%D1%87%D0%B5%D0%BD%D1%8C%D0%B5%20-%20%D1%81%D0%B2%D0%B5%D1%82

  • Ученье – свет

14. Какой HTML-код применяется для подключения внешнего CSS-файла?

  • <link rel="stylesheet" type="text/css" href="style.css">

15. Расположите селекторы сверху вниз в порядке возрастания специфичности (приоритета).

  • div a

  • .article a

  • .article a.btn

  • #article a

  • div a#btn

16. Какие стили подействуют на тэг a ?

<html>

    <p class="article">

        Hello <a href="/">Stepic</a>!

</p>

<style>

        body { color: red; }

p { font-size: 120%; }

a { width: 50px; margin-left: 5px; margin-top: 10px; }

</style>

</html>

  • font-size:120%; margin-left: 5px;

17. Вы хотите разделить страницу на две части. Какие стили для этого правильно использовать?

<div class="all">

  <div class="left">...</div>

<div class="right">...</div>

</div>

  • .left, .right { float: left; width: 50% } .all { float: left; width: 100% } .all:after { clear: both }

18. Разработать простейший TCP echo сервер.

Требования:

Запускается на IP адресе 0.0.0.0 и TCP порту 2222

Получает сообщения длинной не более 1024 байт и отправляет обратно клиенту

Закрывает соединение при получении сообщения с текстом close

  • nano serv.py



19. Измените ваш echo сервер так, чтобы он работать одновременно с 10 клиентами. Протокол передачи такой же как в прошлой задаче.

  • nano serv.py

import socket

import threading

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

s.bind(('0.0.0.0', 2222))

s.listen(20)

def server(conn, adrr):

while True:

data = conn.recv(1024)

if not data or data == 'close' : break

conn.send(data)

conn.close()

while True:

conn, adrr = s.accept()

print('Connection', adrr)

t = threading.Thread(target=server, args=(conn, adrr))

t.start()

20. Какие из указанных HTTP методов могут согласно спецификации протокола изменять состояние сервера ? 

  • POST

  • PUT

21. Какие из указанных ниже HTTP Заголовков могут быть использованы в запросе, какие в ответе, а какие - в обоих случаях ?

  • HTTP Запрос: If-Modified-Since, Cookie, Connection, Content-Type, User-Agent, Content-Length

  • HTTP Ответ: Set-Cookie, Connection, Content-Type, Location, Date, Content-Length

22. Сопоставьте коды HTTP ответов и их значения:

  • 200 - Запрос обработан успешно, в теле ответа содержится документ

  • 301 - Теперь этот документ располагается по другому URL

  • 302 - Для успешного выполнения запроса нужно сделать еще один запрос по URL, указанному в заголовке Location

  • 304 - Документ не изменился с указанной даты. Можно использовать документ из кэша пользователя.

  • 400 - Ошибка синтаксиса HTTP запроса

  • 401 - Для данного URL требуется авторизация

  • 403 - Доступ запрещен

  • 404 - Документ не найден

  • 500 - Внутренняя ошибка сервера

  • 502 - Проксируемый (application) сервер ответил некорректно либо недоступен

23. Web-клиент и web-сервер обмениваются следующими пакетами:

GET /index.html HTTP/1.1

Host: site.com

Connection: Keep-Alive

...

HTTP/1.1 200 OK

Content-Type: text/html; charset=utf-8

Content-Length: 1393

...

Будет ли сетевое соединение закрыто или останется открытым?

  • Останется открытым, т.к. используется HTTP/1.1 и нет заголовка Connection: close

24. Расставьте директивы в порядке приоритета (в порядке проверок):

  • location = /uploads/favicon.ico

  • location ^~ /uploads/

  • location ~ \.(ico|jpeg|jpg|png|css|js)$

  • location /uploads/

  • location /

25. Допустим имеется следующая конфигурация nginx

server {

listen 80;

server_name static.demo.org;

    location ~ \.\w\w\w$ {

root /home/box/web/public;

}

}

server {

listen 80 default_server;

server_name _;

    root /var/www/;

location ~ \.html$ {

       proxy_pass http://127.0.0.1:8080/;

    }

}

Какой файл будет отдаваться при следующем запросе ?

GET http://static.demo.org/index.html HTTP/1.0

  • Никакой, т.к. нет подходящего location. Сервер вернет ошибку 404

26. Допустим, у nginx запущены следующие процессы:

$ ps -o pid,ruser,cmd -C nginx

PID RUSER CMD

1718 root nginx: master process /usr/sbin/nginx

1719 www-data nginx: worker process

1720 www-data nginx: worker process

Nginx пытается отдать файл /home/box/web/1.html

Причем права доступа выглядят следующим образом:

$ ls -lad /home/ /home/box/ /home/box/web/ /home/box/web/1.html

drwxr-xr-x 4 root root 4096 Apr 11 2014 /home/

drwx------ 96 box box 12288 Oct 4 01:57 /home/box/

drwxr-xr-x 96 box box 8192 Oct 4 01:57 /home/box/web/

-rwxr--r-- 96 box box 1024 Oct 4 02:00 /home/box/web/1.html

Какой HTTP код ответа вернет Nginx ?

  • 404, т.к. у сервера не хватит прав что бы даже проверить наличие файла

27.

1) Установите Web-сервер nginx

2) В директории /home/box (домашняя директория) создайте следующую структуру директорий

/home/box/web

|---public

| |---img

| |---css

| |---js

|---uploads

|---etc

3) Настройте nginx так что бы:

Все URL, начинающиеся с /uploads/ (например /uploads/1.jpeg) отдавались из директории /home/box/web/uploads

Все URL с расширением (например /img/1.jpeg) отдавались из директории /home/box/web/public

Все URL без расширения (например /question/123) возвращали HTTP 404

4) Фрагмент конфига nginx который обслуживает ваш проект должен находиться в файле /home/box/web/etc/nginx.conf и должен быть включен в основной конфиг с помощью символической ссылки.

5) Запустите nginx, так что бы он принимал запросы на порту 80 и обслуживал бы любые домены.

6) Не забудьте закомитить и сохранить на github полученную структуру директорий и конфиги.

  • git clone https://github.com/mrbrndk/nginx.git

  • chmod a+x init.sh

  • ./init.sh

28. Какие задачи решает frontend сервер в трехзвенной архитектуре?

  • Балансировка нагрузки application серверов

  • Обслуживание статических документов

  • HTTPS шифрование

29. Сопоставьте CGI заголовки с их (вероятными) значениями:

  • QUERY_STRING - sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8&client=ubuntu

  • REMOTE_ADDR - 213.193.10.20

  • HTTP_USER_AGENT - Googlebot/2.1 (+http://www.googlebot.com/bot.html)

  • REQUEST_URI - /book/ch3/text.html

  • HTTP_HOST - www.demo.org

30. Какие из WSGI приложений корректны?

A)

def app(env, start_response):

start_response('200 OK', [('Content-Type', 'text/plain')])

return ['Hello, world!']

B)

def application(env, start_response):

start_response('200 OK')

return ['Hello, world!']

C)

def application(env, start_response):

start_response('200 OK', [('Content-Type', 'text/plain')])

return 'Hello, world!'

D)

def application(env):

return ['Hello, world!']

  • A

  • C

31. Переменная INSTALLED_APPS в settings.py содержит список установленных Django приложений. Допустим мы используем паттерн local settings и хотим (временно) подключить еще одно приложение - debug_toolbar. Что в таком случае мы должны написать в local_settings.py?

  • INSTALLED_APPS = ('debug_toolbar',) + tuple(INSTALLED_APPS)

32. Допустим в нашем приложении имеется группа URL следующего вида /blog/blog_name/post/title , где blog_name и title меняются для каждого блога и поста соответственно. Какая запись в urls.py позволит на обработать данные URL, захватив blog_name и title в одноименные переменные.

  • url(r'blog/(?P<blog_name>[^/]+)/post/(?P<title>[^/]+)/?', post_details)

33. Допустим в urls.py есть следующий маршрут

url(r'article/(?P<id>\d+)/?', article)

Какой из нижеприведенных view правильно получает захваченную переменную?

A)

def article(request, id):

...

B)

def article(request, *args):

  id = args[0]

...

C)

def article(request, **kwargs):

    id = kwargs[0]

...

D)

def article(request):

id = request.ARGS['id']

...

  • A

  • B

  • C

34. Выберите правильные способы получения GET параметров в Django view

A)

def view(request):

value = request.get('name')

B)

def view(request):

value = request['name']

C)

def view(request):

value = request.GET('name')

D)

def view(request):

value = request.GET['name']

E)

def view(request):

value = request.GET.get('name')

  • D

  • E

35. Сопоставьте классы HTTP ответов в Django и коды ответов в протоколе HTTP:

  • HttpResponseRedirect - 302

  • HttpResponsePermanentRedirect -301

  • HttpResponseNotFound - 404

  • HttpResponseBadRequest - 400

  • HttpResponseForbidden - 403

  • HttpResponse - 200

  • HttpResponseServerError – 500

36. Допустим имеются следующие два шаблона Django^

base.html

A

{% block A %}B{% endblock %}

C

index.html

{% extends 'base.html' %}

D

{% block A %}{{ block.super }}E{% endblock %}

F

Напишите текст (без переносов строк и пробелов), который получится при шаблонизации index.html

  • ABEC

37. Допустим вам нужно выбрать 1 статью с определенной категорией (не важно какую именно). Отметьте правильный (безопасный, эффективный, не создающий неожиданных исключений) способ сделать это:

A)

cursor.execute("select * from articles where category = " + category_id + " limit 1")

article = cursor.fetchall()[0]

B)

cursor.execute("select * from articles where category = %s", (category_id,))

article = cursor.fetchall()[0]

C)

cursor.execute("select * from articles where category = %s limit 1", (category_id,))

article = cursor.fetchone()

D)

cursor.execute("select * from articles where category = %s limit 1", (category_id,))

article = cursor.fetchmany(size=1)[0]

  • C

38. Выберите правильные способы получить прямой доступ к базе данных default (база по-умолчанию) в Django

A)

from django.db import connection

connection.cursor().execute(...)

B)

from django.db import default

default.cursor().execute(...)

C)

from django.db import connections

connections['default'].cursor().execute(...)

D)

from django.db import connect

connect('default').cursor().execute(...)

  • A

  • C

39. Перед вами определение модели Django:

class Post(object): # 1

title = models.CharField(max_length=255) # 2

content = models.TextField() # 3

creation_date = models.DateTimeField(blank=True) # 4

def __unicode__(self): # 5

return self.title() # 6

def get_absolute_url(self): # 7

return '/question/%d/' % self.pk # 8

class Meta: # 9

db_table = 'qa__question' # 10

ordering = ['-creation_date'] # 11

Выберите строки, в которых есть ошибки.

  • 1

  • 6

  • 10

40. Сколько таблиц будет создано в СУБД, если определены следующие Django модели?

class User(models.Model):

name = models.CharField(max_length=24)

friends = models.ManyToManyField('User')

groups = models.ManyToManyField('Group')

class Group(models.Model):

name = models.CharField(max_length=100)

moderator = models.ForeignKey('User')

  • 4

41. Какие из методов QuerySet возвращают также объект QuerySet (т.е. являются chaining методами):

  • exclude

  • count

  • order_by

42. Допустим имеются следующие модели.

class Author(models.Model):

rating = models.IntegerField()

name = models.CharField(max_length=50)

class Article(models.Model):

author = models.ForeignKey(Author)

text = models.TextField()

Необходимо выбрать статьи авторов с рейтингом более 10

best = Article.objects.filter(...)

Какое условие нужно написать на месте многоточия?

  • Author__rating__gt=10

43. Допустим имеются следующие модели.

class Author(models.Model):

rating = models.IntegerField()

name = models.CharField(max_length=50)

class Article(models.Model):

author = models.ForeignKey(Author)

text = models.TextField()

Выберите правильные способы создания нового объекта статьи (Article) для данного автора (объект author)

A) article = Article(author=author, text=text); article.save()

B) article = author.article_set.create(text=text)

C) article = Article.objects.create(text=text, author=author)

D) article = Article.objects.create(text=text, author_id=author.id)

  • A

  • B

  • C

  • D

44. Объект какого типа вернет следующий код

res = Author.objects.filter(id=10)

  • django.db.models.query.QuerySet

45. В чем разница между исключениям django.http.Http404 и django.core.exceptions.ObjectDoesNotExist?

  • Генерация Http404 приводит к тому, что сервер вернет код ответа 404, ObjectDoesNotExist – нет

46. Допустим имеются следующие модели.

class Author(models.Model):

rating = models.IntegerField()

name = models.CharField(max_length=50)

class Article(models.Model):

author = models.ForeignKey(Author)

text = models.TextField()

В шаблоне происходит отрисовка объекта article (тип Article)

Каким образом возможно вывести имя автора статьи?

A) {{ article.author.name }}

B) {% article.author.name %}

C) {{ article.author }}

D) {% article.author %}

E) Добавить дополнительную переменную в контекст шаблона перед отрисовкой

author_name = article.author.name

return render(request, 'article_details.html', {

'article': article,

'author_name': author_name,

})

И вызвать в шаблоне

{{ author_name }}

  • A

  • E

47. В каком примере приведен правильный способ использования пагинатора?

A)

from django.core.paginator import Paginator

def view(request):

articles = Article.objects.all()

articles = Paginator(articles, 10, request.GET.get('page', 1))

B)

from django.core.paginator import Paginator

def view(request):

    articles = Article.objects.all()

    paginator = Paginator(articles, request.GET['limit'])

page = paginator.page(request.GET['page'])

C)

from django.core.paginator import Paginator

def view(request):

    articles = Article.objects.all()

paginator = Paginator(Article.objects.all(), 30, page=2)

articles = paginator.paginate()

D)

from django.core.paginator import Paginator

def view(request):

try:

limit = int(request.GET.get('limit', 10))

except:

limit = 10

try:

page = int(request.GET.get('page', 1))

except:

page = 1

paginator = Paginator(Article.objects.all(), limit)

articles = paginator.page(page)

  • D

48. Выберите правильный способ сделать редирект в Django

A)

def view(request):

return HttpResponseRedirect('/new_url/')

B)

def view(request):

resp = HttpResponse(content = '', status = 302)

resp['Location'] = '/new_url/'

return resp

C)

def view(request):

raise Http302('/new_url/')

D)

def view(request):

return request.redirect('/new_url/')

  • A

  • B

49. В каком из вариантов правильно определена Django форма?

A)

class AddArticleForm(forms.Form):

title = forms.CharField(max_length=80)

text = forms.TextField()

tags = forms.CharField()

def clean(self):

tags = self.cleaned_data.get('tags', '')

tags = [ t.trim() for t in tags.split(',') ]

if len(tags) < 2:

raise ValidationError('bad tags')

return tags

B)

class AddArticleForm(forms.Form):

title = forms.CharField(max_length=80)

text = forms.CharField(widget=forms.Textarea)

tags = forms.CharField()

def clean_tags(self):

tags = self.cleaned_data.get('tags', '')

tags = [ t.trim() for t in tags.split(',') ]

if len(tags) < 2:

raise ValidationError('bad tags')

return tags

C)

class AddArticleForm():

title = forms.CharField(max_length=80)

text = forms.CharField(widget=forms.Textarea)

tags = forms.CharField()

def clean(self):

tags = self.cleaned_data.get('tags', '')

tags = [ t.trim() for t in tags.split(',') ]

if len(tags) < 2:

raise ValidationError('bad tags')

return tags

D)

class AddArticleForm(forms.Form):

title = forms.CharField(max_length=80)

text = forms.CharField(widget=forms.Textarea)

tags = forms.CharField()

def clean(self):

tags = self.cleaned_data.get('tags', '')

tags = [ t.trim() for t in tags.split(',') ]

if len(tags) < 2:

return False

else:

self.cleaned_data['tags'] = tags

return True

  • B

50. Выберите правильные утверждения о связанных формах (bound forms) и формах моделей (model forms):

  • ModelForm — это форма сгенерированная на основе модели

  • BoundForm — это обычная форма, заполненная данными (например, из запроса)

51. При CSRF атаке злоумышленник:

  • Незаметно для пользователя совершает действия от лица этого же пользователя

52. Какой заголовок Authorization будем передан при Basic Http Authentication, если пользователь ввел логин user123 и пароль pass321 ?

  • Basic dXNlcjEyMzpwYXNzMzIx

53. Страница по адресу https://site.com/login/ устанавливает следующие куки

response.set_cookie('alpha', '1')

response.set_cookie('beta', '2', domain='.site.com')

response.set_cookie('gamma', '3', expires=datetime.now()-timedelta(days=30))

response.set_cookie('delta', '4', secure=True)

response.set_cookie('epsilon', '5', httponly=True)

Какие из этих кук будут присланы при последующем запросе по URL http://www.site.com/article/1 ?

  • beta

54. Какие методы могут быть определены у middleware классов в Django (1.8)?

  • process_request(request)

  • process_exception(request, exception)

55. При Cookie - based авторизации

  • Логин и пароль проверяются только при входе на сайт, в дальнейшем проверяется ID сессии

  • Сессия, может быть, даже у неавторизованных пользователей

56. Какой (нестандартный) HTTP заголовок часто добавляют JavaScript библиотеки при AJAX запросах?

  • X-Requested-With: XMLHttpRequest

57. Допустим в браузере загружена страница с URL https://site.com/

JavaScript код пытается выполнить AJAX запрос по URL https://api.com/

В чем заключается Same Origin Policy в данном случае?

  • Браузер выполнит AJAX запрос к api.com, но вместо результата JavaScript код получит ошибку

58. Допустим JavaScript код выполняет AJAX запрос к URL http://site.com/add_reply/

Логика сайта требует, чтобы для этого запроса (добавление комментария) пользователь был авторизован.

Каким образом можно сообщить об отсутвии авторизации неавторизованному пользователю, выполняющему такой AJAX запрос?

  • HTTP 404, тело ответа не важно. JavaScript должен обработать ошибку.

  • HTTP 200, в теле ответа указать ошибку, например { "error": "no_auth" }. JavaScript должен обработать ошибку.

59. Допустим разработчики сайта https://api.com/ хотят разрешить AJAX запросы с сайта https://site.com/ (но не для всех остальных). Какой заголовок они должны добавить к своим HTTP ответам?

  • Access-Control-Allow-Origin: https://site.com

60. Расположите технологии по среднему количеству осуществляемых HTTP запросов на одного пользователя в порядке убывания (первая строка - наибольшее число запросов):

  • Polling

  • Comet

  • WebSocket

61. Выберите правильные утверждения:

Polling

Comet

WebSocket

Не требует дополнительного ПО

Поддерживает двустороннюю (full-duplex) передачу

Работает в любом браузере с поддержкой AJAX

Позволяет одновременно обслуживать большое количество клиентов

Минимизирует объем сетевого трафика

Работает с любыми proxy серверами

62. Выберите верные утверждения о технологии Comet (long-polling):

  • Используются обычные AJAX запросы

  • Получатель подключен к специальному Comet серверу, а отправитель - к обычному Application серверу

  • Получатель переподключается к Comet-серверу не реже чем раз в N (например 60) секунд

Вывод: в ходе курса научились разрабатывать приложения на языке python, использовать MVC фреймворки, изучили верстку HTML страниц, погрузились в тематику web-разработки и научились выбирать конкретные технологии.

Соседние файлы в предмете Программирование для Web